requests库是Python第三方的HTTP请求库,主要用于访问网页,需要下载安装
pip install requests
1、GET请求
import requests
response = requests.get("http://www.baidu.com")
print(response.text)
requests中发起请求的方法就是get方法。调用get方法实现与urllib中的urlopen相同的操作,得到一个Response对象。
对于GET请求,如果要附加额外的信息,一般怎样添加呢?比如现在想添加一个参数,其中keyword是aa。 要构造这个请求链接,是不是要直接写成:
r = requests.get('http://www.baidu.com?keyword=aa')这样也可以,但是是不是有点不人性化呢?一般情况下,这种信息数据会用字典来存储。那么,怎样来构造这个链接呢?
kw = {'keyword':'aa'}
response = requests.get("http://www.baidu.com",params = kw)
上面我们抓取的是一个页面,实际上它返回的是一个HTML文档。如果想抓去图片、音频、视频等文件,应该怎么办呢?
图片、音频、视频这些文件本质上都是由二进制码组成的,由于有特定的保存格式和对应的解析方式,我们才可以看到这些形形色色的多媒体。所以想要抓取它们,就要拿到它们的二进制码。
r = requests.get("https://github.com/favicon.ico")
with open('favicon.ico','wb') as f:
f.write(r.content)
这里用了open方法,它的第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件里写入二进制数据。
与urllib.request一样,我们也可以通过headers参数来传递头信息。
headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Host':'www.baidu.com'}
response = requests.get("http://www.baidu.com",headers = headers)
2、POST请求
resp = requests.post("http://www.baidu.com",headers = headers)
和GET请求基本一样,只是方法名使用post替换get。
3、会话
在requests中,如果直接利用get或post等方法的确可以做到模拟网页的请求,但是这实际上是相当于不同的会话,也就是说相当于你用了两个浏览器打开了不同的页面。第一个请求利用post方法登录了某个网站,第二次想获取成功登录后的自己的页面,你又用了一次get方法去请求登录后的页面。实际上这相当于打开了两个浏览器,是两个完全不相关的会话,是不能成功获取页面的。其实解决这个问题的主要方法就是维持同一个会话,也就是相当于打开一个新的浏览器选项卡而不是新开一个浏览器,可以使用session来解决。
s = requests.Session()
s.get('https://www.baidu.com')