简介:
requests
模块的底层实现其实还是urllib
,但是urllib
并不常用
requests
库简单易用
快速上手
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
常用属性
import requests url = "http://www.baidu.com"response = requests.get(url) print(response.url) print(response.status_code) print(response.headers) print(response.request.headers)
运行结果
运行结果
解释:
response.url
:顾名思义,即请求的url
地址
response.status_code
:即响应的状态码
response.headers
:响应头
response.requests.headers
:响应对应的请求头,即我们在请求时带的请求头,简单来说就是浏览器识别的我们访问其网站带有的请求头,这里以请求百度为例,很明显,这里的'User-Agent': 'python-requests/2.19.1'
,其实就是告诉访问的url,我是python的requests访问的。
print(response.content.decode())
response.content.decode()
:获取网页源码
案例:获取百度首页的百度图片
第一步:
百度首页
首先在百度首页的百度logo图片上点击鼠标右键,点击检查,或者按键盘上的F12,
image.png
找到这个logo的图片的src,即链接地址:
//www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super
import requests url = "http://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super"response = requests.get(url)with open("baidu.png", "wb") as f: f.write(response.content)
完整代码如上,得到结果在当前的目录,即在当前目录即可以看到baidu.png
这张图片了
发送带headers的请求
还记得刚才描述的headers的内容吗?
response.requests.headers
:响应对应的请求头,即我们在请求时带的请求头,简单来说就是浏览器识别的我们访问其网站带有的请求头,这里以请求百度为例,很明显,这里的'User-Agent': 'python-requests/2.19.1'
,其实就是告诉访问的url,我是python的requests访问的。
在这种情况下,浏览器是知道我们是爬虫在浏览,那么长期这么操作会导致该网站对IP进行封锁,尤其是短时间内访问量非常大的情况下,那么这个时候我们就需要对写的爬虫进行headers伪装
怎么找到headers呢?
image.png
在浏览器控制台中,找到Network,如果Network里什么都没有,点击浏览器的刷新,或者按F5刷新,即可出现内容,在内容中点击左边的第一个或者其他的都行,只要会出现这样的headers就可以,我们可以在这里面找到User-Agent
,将User-Agent
后面的内容复制出来,放到我们构造的headers里面。
把它构造成字典的形式,即:
headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"}
完整代码如下:
import requests url = "http://www.baidu.com"headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"} response = requests.get(url, headers=headers) print(len(response.content))
感兴趣的小伙伴可以对比一下,带有headers的请求和没有带有headers的请求的区别,这个代码可以看到请求来的内容的总字节数,可以对比字节数是否一致,带headers的请求到的数据是否比不带headers的请求,请求到的数据要多?
作者:techLee
链接:https://www.jianshu.com/p/4e371297aba2