Network 能记录浏览器的所有请求。
一、快捷键(F12)打开Network。
第0行:红色的 按钮是启动Network 监控,默认高亮是打开,灰色圆圈是清空面板上的信息。右侧勾选框Preserve log ,也是第4的位置,作用是‘保留请求日志’。如果不惦记这个,当页面发生跳转时,记录会被清空。所以需要爬取跳转界面时,需要点亮它。
第1行:是对请求进行分类查看。
常用的分类:
- ALL(查看全部)
- XHR(仅查看XHR)
- Doc(Document ,第0个请求一般在这里)
- Img(仅查看图片)
- Media(仅查看媒体文件)
- Other(其他)
- JS和CSS 是前端代码,负责发起请求和页面实现
- Font 是文字的字体。
也可以直接参考下表:
其中非常重要的一个请求是XHR,XHR的功能是传输数据,其中最重要的一种数据是用json 格式写的,和html 一样,这种数据能够有组织地存储大量内容。json 的数据类型是‘文本’,在Python 语言中,把它称为字符串;对于json 格式的数据,可以轻松转化为字典/列表,也能将列表/字典 转化为json 格式的数据。
- 1.是一个时间轴,记录什么时间,有什么请求。
- 2.name: 请求的名字
- 3.Status: 请求的状态,1xx/2xx/3xx/4xx
- 4. type : 请求的类型
- 6.Size :数据的大小
- 7.time:请求的耗时
- 8.waterfall :瀑布流,用于描述每个请求的起止时间
二、json 文件查找(前提是确定数据没有存储在html 里)
- 第一种的话是根据文件大小(Size)寻找,你想要爬取的文件数据存储量肯定是特别大的,那它相比其他的文件内存,所占用的内存肯定是最大的,所以可以尝试直接寻找文件Size 值最大的文件查看,点击Preview,查看最小级里是否有需要的数据。
- 第二种就是先把Network 面板清空,上下滑动界面,看有没有新多出来的XHR,多出来的那个肯定就是你要的数据了。
三、json 文件模块介绍
- Headers :标头(请求信息)
- Preview:预览
- Response:响应
- Cookies: cookies
- Timing :时间
四、Preview 功能描述
点击Preview ,可以看到,Preview 下存储的都是一层一层字典格式的数据,要取数据的话,就要一层一层取key,从而拿到value 值。
五、Headers 功能描述
点击headers,可以看到有4个模块
5.1 General 模块介绍
- Request URL :请求的url 地址,在浏览器中打开这个链接,看到的 是一层又一层字典和列表。
- Request Method :请求用到的方法 GET/POST
- Remote Address: 服务器的ip地址 和端口
- Referrer Policy: 用于记录请求来源信息
5.2 Query String Parameters
中文翻译的话就是查询字符串参数,所以常用来存储需要传递得到参数。
由两部分组成的,‘https://www.douban.com/search’+‘q=%E6%B5%B7%E8’
中间用?进行分割,前半部分是我们所请求的地址。后半部分就是请求所带的参数,它会告诉服务器,我们需要什么样的参数,这部分用‘utf-8’进行编码了。
在这个链接里,是用# 进行分隔的。#和?功能是一样的,作用都是分隔,把#替换成?,访问效果是一样的。(注意:用?分隔的url 不一定能用#代替)
在requests 模块里,requests.get() 提供了一个参数params,可以用字典的形式,把参数传递进去。详情的话可以参考一下官方文档:
需要注意的点呐,就是Query String Parameters里面的内容,复制拿到之后,需要封装为一个字典,传递给params。特别是,要给他们打引号,让他们变成字符串。
params = { 'g_tk':'5381', 'loginUin':'0', 'hostUin':'0', 'format':'json', 'inCharset':'utf8', 'outCharset':'GB2312', 'notice':'0', 'platform':'yqq.json', 'needNewCode':'0', 'cid':'205360772', 'reqtype':'2', 'biztype':'1', 'topid':'102065756', 'cmd':'6', 'needmusiccrit':'0', 'pagenum':str(i), 'pagesize':'15', 'lasthotcommentid':'song_102065756_3202544866_44059185', 'domain':'qq.com', 'ct':'24', 'cv':'10101010' } #将参数封装为字典
res_comments = requests.get(url,params=params)
5.3 Request Headers
每一个请求,都会有一个Request Heaers ,也就是请求头。它里面会有关于该请求的基本信息。
- user-agent : 中文翻译的话就是用户代理,可以记录电脑的信息和浏览器的版本,这里我用的是Chrome
- origin :中文源头 referer: 引用来源 两个都记录了请求的最初起源是来自哪个网页,区别是referer 比origin 携带的信息更多。
5.3.1 如何添加request headers
首先看一下user-agent 的官方文档
和params 很像,就是封装成字典就可以了。
import requests url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp' headers = { 'origin':'https://y.qq.com', 'referer':'https://y.qq.com/n/yqq/song/004Z8Ihr0JIu5s.html', 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', # 标记了请求从什么设备,什么浏览器上发出 } # 伪装请求头 params = { 'ct':'24', 'loginUin':'0' } # 将参数封装为字典 res_music = requests.get(url,headers=headers,params=params) # 发起请求,填入请求头和参数
加请求头的目的就是把自己的爬虫伪装成真实的浏览器,因为在某些情况下,服务器很可能会拒绝爬虫的访问,甚至说有些网页都禁止爬虫访问。所以加了请求头可以帮助我们应对反爬虫技术,把python 爬虫伪装成真正的浏览器,不让服务器辨识。