上一篇写了一个简单的新浪新闻爬虫作为上手主要是用jsoup包来对url页面进行抓取到本地,并在本地进行数据的解析提取。这里就不重复叙述jsoup的用法了,百度一下基本一大片。看了网上大神们都有对知乎进行爬取,今天我也拿它来试试手。写这篇文章的目的主要是想将自己在爬取中遇到的一些坑,以及怎么解决的做一下记录。也算是一次加深理解的过程。
爬取的目标页面
2017-12-31_172919.png
目标是爬取问题推荐页面的所有问题。但是随后我就发现一个问题,第一次我是通过抓取这个https://www.zhihu.com/explore/recommendations链接来获取问题列表,但是当代码敲完测试的时候发现数据只有20条。。。这显然不是我所期望的,看了一遍代码 发现代码是没有毛病,那么问题出在哪里?排查了一片以及debug模式。最终发现是页面的问题。因为我忽略了一个重要的地方。页面是动态加载的,而且每次只加载20条。
页面加载.png
问题就出在这个地方,这里其实还包含了一个地址(https://www.zhihu.com/node/ExploreRecommendListV2)。通过抓包可以发现(google的F12真的好用,推荐多去看看)
ajax请求头.png
请求参数.png
返回json结果.png
知道问题出在哪里其实就已经完成了一半了。说一下接下来我的思路:
因为用请求的参数可以看出其实这就是一个类似于一个分页信息一样。那么我只要在java代码中每次模仿页面的请求给知乎发送ajax请求,然后解析返回的json结果是不是就可以获取其中的问题信息了。
上面其实就已经有两个需求需要解决。
在java代码中模仿ajax发送请求。采用的是Httpclient。
解析返回的json,Gson jar包可以完美解决。
封装了httpclient post请求
public class HttpClientUtil {
/**
*
* @Title: doPost
* @Description: 模仿提交post请求
* @param @param url
*