天天看点

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

抓取网页、分析请求

解析网页、寻找数据

储存数据、多页处理 -

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎
DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

可以看到,有些网址翻页后URL是不变的,那该怎么爬取,请看下文。

谷歌浏览器——检查——Network

首先清空请求列表,点击下一页(第2页)

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

箭头所指的地方就是真实请求

以下是第2、3、4页的请求,通过对比可以发现网站是通过pageIndex参数控制翻页的,并且pageSize参数删去之后并不会对请求产生影响

有关参数的信息可以在Hearders的Query String Parameters里查找到

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

翻页后URL不发生变化的网站的数据一般都是通过Ajax或者JavaScript加载的,可以在过滤器的XHR或者JS中找到真实请求

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

分析:使用谷歌浏览器开发者工具分析网页的请求

测试:测试URL请求中每个参数的作用,找出控制翻页等功能的参数

重复:多次重复寻找符合爬虫需要的真实请求

通过爬取知乎“轮子哥”——vczh关注的人分析Ajax或者JavaScript加载的数据的真实请求并展示这种爬取方法的具体过程。

首先,进入“轮子哥——vczh”关注的人的页面(注意:需要先登录个人知乎账号)

通过禁止JavaScript加载的方法发现页面不能正常加载,确认该页面的翻页是通过JavaScript加载数据实现的

使用谷歌浏览器开发者工具寻找包含关注人信息的真实请求,可以发现真实请求是以“followees”开头的请求,其返回一个JSON格式的数据,该数据对应下一页的“他关注的人”:

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

接下来便可以尝试爬取该请求的数据

首先使用requests.get()尝试爬取数据

可以发现返回了“500 Server Error”,即由于网站反爬虫的原因,服务器返回了“500服务错误”

该问题可以通过添加hearders请求头信息解决

请求头信息承载了关于客户端浏览器、请求页面、服务器等相关的信息,用来告知服务器发起请求的客户端的具体信息

知乎的反爬虫机制是通过核对请求头信息实现的,所以需要在使用requests请求数据的时候加上所需的请求头

对比知乎的请求头信息和常见的请求头信息,发现知乎请求头多了authorization和X-UDID的信息

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

在爬虫程序中添加请求头信息,即添加headers

DC学院爬虫学习笔记(六):浏览器抓包及headers设置爬虫的一般思路:分析具体网页请求:实战:爬取知乎

注:刚才写的时候出问题了,说是User-Agent问题,查了半天,发现是在最前面多了个空格。。

运行程序,成功返回数据

pandas DataFrame的from_dict()方法可以很方便地把爬取到的数据保存为DataFrame格式的结构化数据

定义一个get_user_data()函数,实现翻页爬取功能,并添加上爬取时间间隔以免由于爬取太频繁给服务器造成负担

ok,成功解决