Jsoup is giving a different HTML document compared to my browser
我确保使用浏览器的用户代理,并且仍然提供不同的HTML。 我还尝试使用Jsoup.parse(Url,int)而不是Jsoup.connect(String)。 两次尝试:
1 2 3 | Document doc = Jsoup.connect("https://www.bulq.com/lots/search/?category=Consumer%20Electronics&condition%5B%5D=Brand%20New") .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.1Safari/605.1.15") .get(); |
和
1 2 |
我在"元素"标签中使用Safari的"显示页面源"。 我试图在下面复制一些HTML,但是格式不起作用:(所以这是一个小例子。
示例:Jsoup HTML中的div类之一是:
1 | div class="row ng-cloak" ui-view |
而Safari HTML是:
1 | div class="row ng-scope" ui-view |
我认为您可以尝试使用jsoup发送
1 2 3 | Document doc = Jsoup.connect(url) .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7") .get(); |
尝试获取
感谢@Zendy的回答,我找到了解决方案:
-
第一步:打开浏览器并按F12打开开发人员工具,导航至
Network 选项卡。 - 将浏览器导航到获取内容所需的URL
-
在请求标头上获取用户代理,并将其设置到您的jsoup中。
如果您正在"元素"选项卡中查看实时DOM,则这些类中的某些类可能由于JavaScript而有所不同,因为Jsoup从服务器获取原始HTML时将不会运行该类。
您可以尝试通过以下方式获取页面:
1 2 3 4 5 6 7 8 9 | URL u = new URL("https://www.google.com/"); //replace https://www.google.com/ with your url InputStream in = u.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder result = new StringBuilder(); String line; while((line = reader.readLine()) != null) { result.append(line); } System.out.println(result.toString()); |
那不需要图书馆,也许那将返回确切的页面...