1.解决方式:
修改获取html页面时候的 user-agent 参数
删除掉里面的 Chrome/25.0.1364.160 Safari/537.22这两个即可
2.原因:
起因是今天有点不太想学别的了,就打算写写爬虫啥的,放松放松,然后就遇到了这个问题:
我明明获取到html的页面了,也获取到html所有的信息了,但是jsoup就是解析不到数据
测试代码长这样:
@Test
public void test() throws IOException {
String url = "https://tieba.baidu.com/f?kw=%E5%8F%A4%E9%A3%8E&ie=utf-8&tab=good&cid=3";
String html = HttpClientUtil.execute(url, true);
System.out.println(html);
System.out.println("============");
Document parse = Jsoup.parse(html, url);
Elements select = parse.select("a.j_th_tit");
for (Element element : select) {
System.out.println(element.attr("abs:href"));
}
}
结果是这样的:
我这次使用的是HttpClient去获取html页面信息,然后使用jsoup去解析。看到能够获取到正确的html页面也就没有往那边去想,而是开始检查我的jsoup代码。
结果问题就出在Httpclient的代码中
先看之前的配置信息:
#请求头配置文件
User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; zh-CN; rv:1.9.2.15) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept-Encoding=gzip
Accept=text/html
Accept-Language=zh-CN,zh
之前我傻乎乎的就和python爬虫一样直接把谷歌浏览器的用户代理直接写上去了
然而等我看到Jsoup官方给出的例子,我才后知后觉
在我反复的实验之下发现:
只要带上这两个参数获取html字符串,就解析不到,不带就能够解析到
Chrome/25.0.1364.160 Safari/537.22
然后我对比了这两种获取之后html页面,结果发现,根本没有区别,也不知道是不是我眼睛不太好。
最让我无法理解的就是这个了,看起来没有任何区别,HTML中的标签信息啥的都是一摸一样的,不一样的可能就是头文件那些细小的差距了,结果一个可以解析一个解析不了,关键是你是字符串呀,吐了,就这样吧。