提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@TOC爬虫的请求(1)
1. “上网”时数据传输的过程
当我们使用浏览器“上网”查找数据的时候,整个流程涉及到四个“主体”:
- 用户
- 浏览器
- 目标网站的服务器
- 目标网站的数据库
整个数据传输过程,可以分为两大类:
第一类:直来直去型
我们以百度搜索周杰伦为例:
- 小明打开浏览器,在搜索框里输入“周杰伦”,回车确认
- 浏览器像服务器送过去一段信息,包含了“周杰伦”以及其他结构化信息。
- 服务器收到了这个请求,在数据库找出来“周杰伦”的相关信息
- 然后服务器把数据发回给浏览器
- 浏览器把这些数据,按照自己网页的结构,重新“摆盘”展示给你
第二类:曲线救国型
我们以刷微博为例
- 打开微博,随便进入一个话题。就箱单
2. 使用爬虫摸拟浏览器发送“请求”
顾名思义,就是采用代码,摸拟浏览器发送请求的各个操作
- 输入url
- 把请求发送给服务器
- 接收服务器返回的数据
- 展示出返回的数据
1.引入库
代码如下(示例):
import request #导入一个工具,这个工具可以将请求发出去
2.发送请求
代码如下(示例):
url = 'http://www.baidu.com' # 给个url
response = request.get(url) # 使用“get”方法拿到返回值,并赋值给response
print(response.text) # 打印出返回的文本
以上,采用四行最简单的代码,采用python摸拟浏览器发送请求,并获取数据。
这就是最基本的请求结构。
3. “请求”的结构
刚才以最简单的方式向百度发送了一个请求,获取了百度主页的源代码。期间并没有涉及任何多余的参数。在实际工作中,网站是把自己的数据视若珍宝的,必然会设置一些门槛或者检验措施,不允许随随便便简单的三四行代码就轻松获取自己的辛辛苦苦整理的数据。
那既然想要获取对方的数据,就要进一步修饰一下代码,把它打扮的更像是一个浏览器,这样就能躲过服务器的检查,从而获取数据。
那么,从那几个方面进行“化妆”呢?这就要进一步深挖浏览器发送请求的细节了。
当你在搜索框中输入“周杰伦”,按下回车的那一瞬间。浏览器向服务器发过去的信息,包含了以下三部分:
- 请求行
- 请求头
- 请求体
这三部分,也要在代码中有所体现,才能更真实的伪装成浏览器。
请求行
请求行,相当于“标题”,包含了本次请求的url,请求方式,协议。
在刚才的四行代码中,
url = ‘http://xxxxxxx’标注出了协议方式及url信息
request.get()中的get表明了请求方式。
请求方式常用的只有post和get两种方式,具体差异在此不做赘述。
url = 'http://www.baidu.com' # 给个url
response = request.get(url) # 使用“get”方法拿到返回值,并赋值给
请求头
请求头是重点的“化妆”区,服务器会重点检查请求头中的信息,判断是不是真的“浏览器”发来的请求。
要在这里加上多种修饰信息。具体有:
- User-Agent
- Cookies
- Referer
这三个信息里,User-Agent最常用,基本上每个爬虫程序都要加上这个。
对于一些需要登录的网站,需要在程序里加上Cookies
Referer是防盗链,在下载一些图片或者视频时,可能会用到。
这三个,以后遇到的时候再详细说。
有兴趣的话也可以自行查询浏览器,打开网页,右键——检查,即可。
请求体
在代码中一般用不到,服务器一般不查这个。用到再讲。
总结
极其重要的一点:
找到、明确:哪条URL是真正加载数据的。
如果一条URL,发出去返回来,目标数据就在源代码里,那这条URL就是目标URL
如果一条URL,发出去返回来,目标数据不在源代码里,就意味着加载数据的是另一条URL,是,那么就要通过“抓包”来获取数据。