Python从入门到精通 / 爬虫入门 · 2021年8月16日 0

共73 次浏览

Python爬虫(二)——发送请求

requests入门

1 .requests库介绍

在python中有许多支持发送的库。比如:urlib、requests、selenium、aiohttp……等。但我们当前最常用的还是requests库,这个库是基于urllib写的,语法非常简单,操作起来十分方便。下面我们就直接进入主题,简单介绍一下如何使用requests库。

2 requests安装及使用

2.1 安装

使用简单易操作的pip的安装方式就可以了:

 pip install requests

2.2 发送请求

下面先列举一个最简单的get请求:

 import requests
  
 response = requests.get(url='http://zx529.xyz')    # 最基本的GET请求
 print(response.text)   #打印返回的html文档

通过上面这段代码我们就可以初步获得想要请求的网站的网页源代码了。但是大多数情况都会存在着一些反爬手段,这时候我们就需要对requests中的参数进行一些添加,比如Headers、cookies、refer……等。对于大部分网站,通过添加所需要的请求参数就能够对网站发送请求,并得到期望的响应。对于常见的请求,使用requests都可以得到解决,比如:

requests.get('https://github.com/timeline.json') #GET请求
 requests.post('http://httpbin.org/post') #POST请求
 requests.put('http://httpbin.org/put') #PUT请求
 requests.delete('http://httpbin.org/delete') #DELETE请求
 requests.head('http://httpbin.org/get') #HEAD请求
 requests.options('http://httpbin.org/get') #OPTIONS请求

而请求类型我们也可以在控制面板中进行查看,按下 f12 或者鼠标右击检查,随便打开一个数据包就可以查看该数据包的请求方式,如果没有数据包的话刷新一下页面就可以了,我们以百度为例:

这就是最简单的发送get请求,也就是当要请求的网站没有任何的反扒手段时,只需要在get方法内添加url地址就可以了。但是许多网站存在着一些简单的反爬,就需要添加一些相应的参数。下面列举一些请求的参数:

method :请求方法get posturl:请求网址
 params: (可选的)查询参数
 headers:(可选的)字典请求头
 cookies:(可选的)字典.cookiejar对象,用户身份信息proxies: (可选的) ip代理
 data:(可选的)字典.列表.元组.bytespost请求时会用到json:(可选的)字典提交参数
 verify:(可选的)是否验证证书,ca证书
 timeout:(可选的)设置响应时间,一旦超过,程序会报错
 a7low_redirects:(可选的)是否允许重定向,布尔类型数据

以上的参数按照出现的频率排序,当我们对网站进行请求时如果不能够正确出现预期的响应时就可以添加这些参数,最常用的是Headers、refer、cookies。一般情况下如果不用添加cookies就可以的话尽量不要添加cookies,因为cookies可能包含着我们的个人数据。

2.3 个人经验

我总结一下我个人进行爬虫的一些准备。

  1. 先查看所要获取的数据是否在网页源代码中,如果在网页源代码中,那只要获得网页源代码,那我们直接获取网页源代码就可以了;如果不在网页源代码中,我们就要打开控制面板,对数据包进行抓取,从数据包中获取数据。根据我个人经验,如果网页是一个静态网页,而且想要获得的数据很少发生变化,那么所要获得的数据很大可能就在网页源代码中,比如一些常见的图片网站等;如果想要请求的数据会经常更新,那么数据很有可能是以数据包的形式发送过来的,比如我们一些新闻网、天气网站等。当然这只是大部分情况,具体的情况还要具体分析。再下一步就是确定它的请求方式,以便于我们请求的发送。
  2. 发送请求之后,具体数据以控制台打印的为准,因为控制台打印的才是我们能够直接进行操作的。而网页有一些结构在经过前端的各种渲染之后就与我们所获得的网页源代码有一定的出入,因此在进行数据筛选之前都以我们控制台获取到的数据为准。
  3. 请求参数方面如果不能获取到就尝试添加一些参数。先添加headers,refer,如果实在不行再添加cookies。对于get请求,url中的请求参数我们还可以以字典的形式放到params对应的参数中。而对于post请求,对应的请求数据则会以字典的形式放到data参数中。

下面我们对飞卢小说网站的内容进行获取,网页地址:https://b.faloo.com/y_0_0_0_0_3_15_1.html

import requests
 ​
 url='https://b.faloo.com/y_0_0_0_0_3_15_1.html'
 response=requests.get(url).text
 print(response)

通过控制台打印的内容,此时我们可以复制一段网页中的内容,然后到控制台中按下 Ctrl+F 进行查找,比如我复制了一本小说的名字,在控制台可以获取到,那么就说明我们获取到了期望的内容。

image-20210816153310344

可以搜索到相关的内容,说明数据已经被我们获取到了,下一次会给大家整理数据筛选相关的知识。关于requests库的相关知识大家可以参考相关文档:

中文文档: http://docs.python-requests.org/zh CN/latest/index.html

github地址: https://github.com/requests/requests