requests快速入门

来源:互联网 发布:上海臣邦医药 知乎 编辑:程序博客网 时间:2024/05/22 14:29

requests是一个比较流行的小型的爬虫模块

1. 发送请求

主要有get,post,put,delect,head以及option等请求

使用也很简单,如下:

get请求: r = requests.get("http://httpbin.org/post")

其他类型的请求也是一样。

2.传递URL参数

requests允许使用param关键字参数,以一个字典的方式来提供这些参数。例如:

>>> payload = {'key1': 'value1', 'key2': 'value2'}>>> r = requests.get("http://httpbin.org/get", params=payload)
则输出URL时的结果就变成:

>>> print(r.url)http://httpbin.org/get?key2=value2&key1=value1


3.响应内容

通过requests可以读取到服务器的响应内容
1.通过text属性,如r.text就可以获得urf-8编码的响应内容,

2.通过content属性则可以获得以二进制方式的响应内容

3.json响应内容

requests中含有一个内置的json解码器方法,可以获取json类型的数据,如:r.json()

通过以上方法便获取到相关的响应内容,从而可以通过分析这些内容来开始之后的相关操作。

4.定制请求头

现在的网站基本都是动态网站,如果不定制相关的请求头,很难获得完整的网页内容,requests就可以定制相关的请求头,只要通过传递一个ditc歌headers参数就可以了。

例如:

>>> url = 'https://www.baidu.com'>>> headers = {'user-agent': 'my-app/0.0.1'}>>> r = requests.get(url, headers=headers)
5.其他的post请求

post请求可以通告传递一个字典个data参数,例如在模拟登陆的时候,其post请求会添加如下:

data = {'form_email': username, 'form_password': password, "source": source, 'redir': redir, "login": login, "ck": ck}r = requests.post("http://httpbin.org/post", data=data)
6.cookie

如果某个响应中包含了一些cookie‘,则我们可以获取到他们:

>>> url = 'http://example.com/'>>> r = requests.get(url)>>> r.cookies['cookie_name']
而想要发送cookie到服务器中,则可以通过cookies参数:

>>> url = 'http://httpbin.org/cookies'>>> cookies = dict(cookies_are='working')>>> r = requests.get(url, cookies=cookies)>>> r.text'{"cookies": {"cookies_are": "working"}}'
7.会话对象

会话对象可以让我们在跨域请求的时候保持一些参数,也会在同一个session实例发出的所用请求之间保持cookie。

保持cookie的方式如下:

s = requests.Session()s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')r = s.get("http://httpbin.org/cookies")print(r.text)# '{"cookies": {"sessioncookie": "123456789"}}'
同时,会话也可以为请求的方法提供缺省数据,通过为会话对象的属性来提供对象:

s = requests.Session()s.auth = ('user', 'pass')s.headers.update({'x-test': 'true'})# both 'x-test' and 'x-test2' are sents.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
8.请求与响应对象

在调用requests时主要会做两件事:

1.构建一个requests对象,该对象将被发送到请求的服务器来请求或查询的一些资源

2.一旦requests得到了一个从服务器返回的响应则会产生一个response对象。该响应对象包含服务器所返回的所用信息,也包含之前创建的request请求对象。

如下:

r = requests.get('http://en.wikipedia.org/wiki/Monty_Python')
如果想访问服务器返回我们的响应头部信息:

>>> r.headers{'content-length': '56170', 'x-content-type-options': 'nosniff', 'x-cache':'HIT from cp1006.eqiad.wmnet, MISS from cp1010.eqiad.wmnet', 'content-encoding':'gzip', 'age': '3080', 'content-language': 'en', 'vary': 'Accept-Encoding,Cookie','server': 'Apache', 'last-modified': 'Wed, 13 Jun 2012 01:33:50 GMT','connection': 'close', 'cache-control': 'private, s-maxage=0, max-age=0,must-revalidate', 'date': 'Thu, 14 Jun 2012 12:59:39 GMT', 'content-type':'text/html; charset=UTF-8', 'x-cache-lookup': 'HIT from cp1006.eqiad.wmnet:3128,MISS from cp1010.eqiad.wmnet:80'}
也可以得到发送到服务器的请求的头部
>>> r.request.headers{'Accept-Encoding': 'identity, deflate, compress, gzip','Accept': '*/*', 'User-Agent': 'python-requests/0.13.1'}

9.代理

一直不间断的访问某一个网站的时候,可能会被封ip,我们可以通过代理的方式防止这种情况发生。

我们通过添加proxies的参数来配置单个请求

import requestsproxies = {  "http": "http://1.1.1.1:3128",  "https": "http://1.1.1.1:1080",}requests.get("http://example.org", proxies=proxies)









1 0