知乎问答图片爬取

前段时间看到不少爬虫的案例,有不少爬招聘网站数据的,还有房产中介数据的,固然也有不少爬取知乎用户数据的,不少爬虫都是用Python语言,可是我不会用它,只能用Java写一个爬虫来抓取知乎问题下答案的图片连接git

先上一个下载的图片的截图github

看到网上这么多人写爬虫,内心也是羡慕,想着本身何时也能够写一个简单的爬虫来了解下爬虫的原理,这几天刚开学,就尝试来抓取知乎的图片,主要是由于知乎某些问答的妹子都很好看……正则表达式


抓取的原理

想办法获取图片的连接,而后添加到一个容器中,依次下载,很简单的json

过程

一开始我单纯的认为只要获取一个问答首页的源码,而后用正则表达式拿到图片连接,接下来就不是事儿了。可是这样作只能获取到第一页的数据api

下图为第一页的数据,每个List-item就是一个回答,这儿一共才20条浏览器

点击查看更多回答。F12中打开network选项卡,再选择XHR查看AJAX请求,发现有一个连接特别长,查看requestresponse,就发现了下图中的东西多线程

查看请求的详情,发现这个请求返回的是一个json数据
ide

这是一个实例连接:https://www.zhihu.com/api/v4/questions/38906616/answers?include=data%5B*%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Cquestion%2Cexcerpt%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B*%5D.mark_infos%5B*%5D.url%3Bdata%5B*%5D.author.follower_count%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=3&limit=20&sort_by=default工具

连接参数中的offset表示与第一个回答的偏移量,limit表示返回回答数据的条数测试

我觉得这样就能够了,用在线get工具测试了一下,看是否是相同的结果

结果响应了这样的json数据,根据那个英语,猜想是没有受权,因而去浏览器开发人员工具下寻找有没有什么特殊requestHeader没有添加,因而发现了一个authorization的字段,故添加好header参数后再次尝试,结果呢?此次就对了

若是问这个authorization字段的值怎么来的,其实我也不知道,我是复制的浏览器的数据

如今拿到了回答的json数据

通过分析,每个回答的json中有一个content属性,这个属性包含了回答的内容,其中就含有图片的连接。到此,感受寄几终于找到了光明

经过这个属性的值,就能够拿到图片的连接。

返回的这个json数据中还包含回答的总数等内容,更多有用的就本身去挖掘了哟

使用的jar包:

  • httpclient
  • json-lib:解析json数据

使用这些jar包还须要其它依赖包

须要注意的地方

  1. 这个小项目中没有登陆,因此有的须要登陆帐号的问题就不能获取到图片连接,会跳转到登陆的页面
  2. 图片较多的时候下载时间会比较长,没有使用多线程技术

最后附上项目的github地址Java抓取知乎图片

相关文章
相关标签/搜索