天天看点

python爬虫模块request_爬虫模块篇【requests】

爬虫说白了就是模拟发送网络请求获取数据。在python里,requests可以很好地帮助我们完成这个过程。

本篇只讲怎么获取数据、控制台输出数据和保存数据。至于提取和解析数据在以后的篇目中会讲到。

python爬虫模块request_爬虫模块篇【requests】

一、安装

方法1:cmd输入“pip install requests”

方法2:pycharm配置解释器的位置输入“requests”,再点击右下角的install package

注意事项:1.指定版本安装格式:“pip install requests==X.X.X”。(默认安装最新版本)

2.如果下载速度慢或者报连接超时错误,可尝试用镜像源下载。例如使用豆瓣镜像源: “pip install -i https://pypi.douban.com/simple requests”。

python爬虫模块request_爬虫模块篇【requests】

二、需要知道的一些内容

1.最常用到两种网络请求方式:GET和POST。在python里相对应的用法是“requests.get()”和“requests.post()”。

2.GET方法查询字符串(名称/值对)是在 GET 请求的 URL 中发送的,而POST方法查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的。

3.在浏览器开发者工具的network里能直接体现出两者不同的内容:GET请求一般含有“Query String Parametrs”,POST请求含有“form data”或“Payload”

python爬虫模块request_爬虫模块篇【requests】

三、requests库的常用参数。

1.url。为我们需要请求的连接,为必填参数。用法示例:requests.get(url)或requests.get(url=url)。(GET、POST均适用)

2.headers。为我们发送请求的请求头,不是必填参数,但是一般网站都会有关于请求头的反爬,所以一般还是需要加上的。用法示例:requests.get(headers=headers)。(GET、POST均适用)

3.proxies。我们通过这个参数添加ip代理,不是必填参数,但是当我们大批量爬取的时候,一些网站会把我们识别出来,将我们的ip封掉,对此我们使用这个方法保证程序的运行。(GET、POST均适用)

4.cookies。归根结底用于身份验证。

5.params。用于GET请求内容的传递。我们一般不使用这个参数,因为我们可以直接把这部分内容添加到url里。

6.data。用于POST请求的表单传递。一般为POST的必填参数。在network内查看content-type的对应值(一般为application/x-www-form-urlencoded 或 multipart/form-data),方可确定我们传递内容的具体形式。

7.json。用于POST请求的表单传递。一般为POST的必填参数。一般在表单为“Payload”类型时使用较多。和data的区别是,通过json的方式传递的任何类型,都会被转化成“json”数据类型。(在python叫字符串,在前端叫json)

8.timeout。用于设置请求超时的时间,单位为秒。如果在指定时间里仍没有与服务器连接成功,将会报超时错误,与异常搭配使用。

9.verify。访问某些网站会出现ssl错误,添加“verify=False”即可解决,可能添加后再次运行会报红字警告。如果想让这些不再显示,只需在程序最前加上“requests.packages.urllib3.disable_warnings()”

10.allow_redirects。重定向,默认为“True”。一般不需要添加改动。我一般用python分析api接口的时候才会使用这个参数。(我们大多数情况下直接在浏览器f12里分析就足够了)

11.requests.session()。维持回话状态,只需创建session类,其余和其他内容一样。(requests.session()和requests.Session()本质上是一样的,不理解的可以看他的源码)

python爬虫模块request_爬虫模块篇【requests】

四、所得数据的常用处理方法。

1.控制台输出。“response.text”或“response.content.decode('文字编码类型')”。(第一种有可能出现乱码,两种方法都可以指定解码方式,但第二种实际用起来更方便,所以优先推荐第二种)

2.把请求得到的文字、图片、音视频保存至本地。首先使用“response.content”获得二进制对象,然后“with open('你的文件名.要保存的格式','wb')as f”保存即可。

3.文字另一种保存本地的方法。首先“response.content.decode('文字编码类型')”。然后然后“with open('你的文件名.要保存的格式','w')as f”保存即可。

4.“json”数据。在python里叫做字符串的数据,一般直接“response.json()”即可。注意事项在以后的解析篇再详细说明。

python爬虫模块request_爬虫模块篇【requests】

五、可能存在的疑问

1.有没有别的请求类型? 答:有。一共有8种。除了GET和POST,还有OPTIONS、HEAD、PUT、DELETE、TRACE和CONNECT。

2.GET是不是要比POST简单? 答:不是。难在破解,请求方式单对我们来说无所谓。

3.这些够用吗,我想把所有的先学完再开始实战。 答:绝对够用,没必要先学完。既然踏上了编程这条船,那就要明白一件事,我们不可能把所有都学会。只要够用,在学有余力的情况下再丰富自己就可以了

4.最难的爬虫是什么样的? 答:与其说难得什么样,不如说哪些难破解。比如极客滑动验证码,反debug,js混淆,js自定义加密等等。(我也只能破破简单的)

5.内容太多了,头晕,怎么才能快速掌握这些内容? 答:实操。我给了大家很多的示例,目的就是这个,大家可以找些自己感兴趣网站按着我的示例写爬虫。

6.很多加密的参数都是通过JavaScript生成的,有没有必要先学JavaScript? 答:从我初学到现在来看,个人觉得没必要从头看到尾,简单了解下原生JavaScript、jQuery框架和require框架就可以了。

7.我现在破解不了,甚至以后也破解不了JavaScript该怎么办? 答:学selenium和pyppeteer。这两个会在以后的篇章里说到。这两个基本按道理可以爬取到所有内容。只是有很多缺点,获取数据速度难最为致命。

python爬虫模块request_爬虫模块篇【requests】

六、请求示例

每次复制User-Agent太麻烦,下例均用useragentxxc库生成随机请求头。

源码地址:https://github.com/clearDreamXXC/python_teach/blob/master/requests%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B.py

python爬虫模块request_爬虫模块篇【requests】

示例中需要的模块

1.最基本的请求。(我们在“三”里说了,绝大多数链接都有请求头的检验。我们把headers当成必填参数就可以了,一般填入“Referer”和“User-Agent”即可)

python爬虫模块request_爬虫模块篇【requests】

堆糖网

2.post请求需要添加表单的示例。(content-type的不同取值对我们传递的表单格式会有不同要求。同时把这一键值对添加到headers里,这里不多解释,大家就直接加上以防万一)

python爬虫模块request_爬虫模块篇【requests】

哔哩哔哩

3.需要设置请求超时的请求。(与异常搭配)

python爬虫模块request_爬虫模块篇【requests】

steam模拟登陆

4.需要代理的请求。(http代理和https代理使用效果上是没有区别的)

python爬虫模块request_爬虫模块篇【requests】

萝卜研投网

5.需要cookie的请求。(两种方式,第二种更常用:1.以字典形式加到参数cookies的位置。2.以字符串形式添加到headers里。)

python爬虫模块request_爬虫模块篇【requests】

12306官网

6.控制台输出请求到的数据。(使用print)

python爬虫模块request_爬虫模块篇【requests】

结合print

7.保存音频、视频、图片和文字的简单示例。

python爬虫模块request_爬虫模块篇【requests】

抖音短视频

8.比较难的,各类参数都需要的请求。(在这里只列举难的但也不是很难的)

python爬虫模块request_爬虫模块篇【requests】

携程国际-港澳台机票