c爬虫抓取网页数据(如何通过谷歌浏览器开发者工具分析真实请求的三个步骤分析)
优采云 发布时间: 2022-04-13 07:19c爬虫抓取网页数据(如何通过谷歌浏览器开发者工具分析真实请求的三个步骤分析)
爬虫的大致思路:抓取网页,分析请求
解析网页并查找数据
存储数据,多页面处理
本课主要讲授如何通过谷歌浏览器开发者工具分析真实请求。
三步找到真正的请求
分析:使用 Google Chrome 开发者工具分析网页请求
测试:测试URL请求中各个参数的作用,找出控制翻页等功能的参数
Repeat:反复寻找满足爬虫需求的真实请求
实用链接:爬取知乎
通过爬取知乎“轮子哥”——vczh相关人士分析Ajax或JavaScript加载数据的真实请求,并展示该爬取方式的具体过程。
1. 寻找真实请求的测试首先进入“轮子哥-vczh”关注者的页面(注意:需要登录个人知乎帐户优先)
通过禁用javascript加载发现页面无法正常加载,确认页面的翻页是通过javascript加载数据实现的
使用谷歌浏览器开发者工具查找收录关注者信息的真实请求。可以发现,真正的请求是以“followees”开头的请求,返回的是一个JSON格式的数据,对应下一页的“Followees”。人”:
双击该请求返回JSON格式的数据,通过安装JSONView插件可以更好的显示在浏览器中
然后您可以尝试抓取请求的数据
2. 尝试爬取真实请求的数据 先尝试使用前几课学习的requests.get() 来爬取数据
可以发现返回“500 Server Error”,即由于网站反爬虫,服务器返回“500 Service Error”
这个问题可以通过添加headers请求头信息来解决
3. 添加headers请求头信息,模拟浏览器访问。请求头信息携带客户端浏览器、请求页面、服务器等信息,用于通知服务器发起请求的客户端的具体信息
p>
知乎反爬机制是通过检查请求头信息实现的,所以在使用request请求数据的时候需要加上需要的请求头
对比知乎的请求头信息和普通请求头信息,发现知乎的请求头有更多的授权和X-UDID信息
向爬虫添加请求头信息,即添加headers# -*- coding:utf-8 -*-
导入请求
标题 = {
'authorization':' ',#括号内填写你的授权
'User-Agent':' ',#括号里填你的User-Agent
}
url = '*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%ics&offset=20&limit=20'
response=requests.get(url, headers = headers).json()
打印(响应)
最终代码:#!/usr/bin/env python3
# -*- 编码:utf-8 -*-
"""
创建于 2018 年 3 月 20 日星期二 16:01:47
@作者:杰基
"""
导入请求
将熊猫导入为 pd
*敏*感*词*时间
标题 = {
'授权': '承载 2 | 1:0 | 10:1519627538 | 4:z_c0 | 92: Mi4xYzBvWkFBQUFBQUFBSU1JaTVqRU1EQ1lBQUFCZ0FsVk5FdnVBV3dEdHdaRmtBR1lmZEpqT3VvdmtpSm5QMWtkZ1ZB | 787597598f41757929f46f687f78434dbc66d6abc980e40fb50b55cd09062b07',
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/6< @4.0.3282.186 Safari/537.36',
'x-udid':'ACDCIuYxDAyPTg7eVnDe8ytVGX6ivGdKZ9E=',
}
user_data = []
def get_user_data(page):
for i in range(page):
url = '*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%ics&offset={}&limit=20'.format(i*20)
response = requests.get(url, headers = headers).json()['data']
user_data.extend(响应)
print('爬取页面 %s' %str(i+1))
时间.sleep(1)
如果 __name__ == '__main__':
get_user_data(3)
df = pd.DataFrame(user_data)
df.to_csv('users.csv')
补充知识
1. JSONJSON 是一种轻量级的数据交换格式。连接API爬取数据时,一般数据返回格式为JSON。
JSONView 插件:前往 Chrome JSONView 插件安装,下载并安装 JSONView 插件,以使 JSON 格式的数据在 Google Chrome 中更好地呈现