与我的浏览器相比,Jsoup提供了不同的HTML文档

时间:2018-07-15 19:47:17

标签: java html web-scraping jsoup

我确保使用浏览器的用户代理,它仍然提供不同的HTML。我还尝试使用Jsoup.parse(Url,int)而不是Jsoup.connect(String)。两次尝试:

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();

URL mainUrl = new URL("https://www.bulq.com/lots/search/category=Consumer%20Electronics&condition%5B%5D=Brand%20New");
Document doc = Jsoup.parse(mainUrl, 6000);

我在“元素”选项卡中使用Safari的“显示页面源”。我试图在下面复制一些HTML,但是格式无法使用:(所以这是一个小例子。

示例:Jsoup HTML中的div类之一是:

div class="row ng-cloak" ui-view

Safari HTML为:

div class="row ng-scope" ui-view

4 个答案:

答案 0 :(得分:1)

我认为您可以尝试使用jsoup发送User-Agent作为标头

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();

答案 1 :(得分:0)

您可以尝试使用以下方法获取页面:

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());

那不需要图书馆,也许那会返回确切的页面...

答案 2 :(得分:0)

如果您正在从“元素”选项卡中查看实时DOM,则这些类中的某些类可能由于JavaScript而有所不同,因为Jsoup在从服务器中获取原始HTML时将无法运行。

答案 3 :(得分:0)

当尝试获取url1的内容时遇到相同的问题,但是jsoup返回another url的内容(可能是jsoup被重定向了)。 感谢@Zendy的回答,我找到了解决方案:

  • 第一步:打开浏览器并按F12打开开发人员工具,导航至Network标签。
  • 将浏览器导航到获取内容所需的网址
  • 在请求标头上获取用户代理,并将其设置到您的jsoup中。 enter image description here