Java爬虫-爬取知乎内容(附源码注释)

时间:2019-01-22
本文章向大家介绍Java爬虫-爬取知乎内容(附源码注释),主要包括Java爬虫-爬取知乎内容(附源码注释)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在前一段时间,做了一个demo,苦于没有数据展示,所以翻了很多关于爬虫的资料,在这里分享一下踩过的坑

踩过的坑

之前没接触爬虫的时候以为,只要请求中携带相关信息(请求头中跟浏览器发送的一模一样)就能获取到页面.

  • 例如,在请求中携带cookie
  • 伪装成浏览器.
  • 伪装referer
    请求跟浏览器中的请求没什么区别.然而,这种操作确实对大部分页面有效
    ,但是还有一小部分呢.
    直到某天, 我突然想到试着爬一下知乎,用之前的模拟请求的方式爬取了一下,点击运行,
    稍等片刻,~~誒~好多乱码啊,以为是编码的问题,然而,我把得到html数据写入到,html文件中,用浏览器打开之后还真是乱码.
    解决过程
    在经历了乱码的问题后,查阅了百度,原来知乎把数据并没有直接相应给客户端,而是,客户端拿到数据之后,还要经过js去解析一次,最后才得到我们所得到的页面
    ,之前的方式为什么乱码呢?就是因为只是发了请求,服务端响应了,但是页面中的js并没有执行, 这时候,页面当然不能正常显示.随着一次次的百度,发现这种情况可以使用无头浏览器进行爬取,其工作原理是: 通过java代码间接操作无头浏览器并且拿到浏览器页面中的内容.

使用到的工具

演示

  • 无头浏览器(此文中使用chrome作为无头浏览器)

  • selenium

  • 语言__Java jdk1.8

  • 项目使用maven构建

操作无头浏览器使用qq登录
把二维码保存到本地.(保存的时候请使用selenium的截图功能,或者保存功能.不要直接找到二维码的src进行请求下载,这样永远提示二维码过期,验证码同理)
java客户端使用scanner阻塞,等待确认扫描完成获取页面内容
手机扫描(二维码超时请重启客户端.)
java客户端输入任意内容获取页面内容
拿到页面并且解析
…接下来就可以进行你想要的操作了…

下载源码之后请先更换二维码保存路径,如果该文件夹访问权限过高,或者盘符不存在,会导致程序异常.

虽然这个爬虫并没有做后续的一些操作,但是这种爬取策略是挺有意思的.
源码下载链接
爬虫优化