Python爬虫---requests库快速上手
一、requests库简介
requests是Python的一个HTTP相关的库
requests安装:
pip install requests
二、GET请求
import requests # 首先导入reqeusts模块 res = requests.get( # 使用requests模拟浏览器发送一个get请求 url="https://www.baidu.com", # 指定访问的网址 ) # 打印响应内容:网站的源代码 print(res.text) # 打印二进制响应内容;我们在拉取音乐、视频等使用 print(res.content)
我们发送get请求时,如果URL参数需要携带参数,那么数据会以键/值对的方式置于URL中,跟在一个问号的后面,例如:ttps://www.baidu.com/s?wd=hello
import requests #get请求,携带参数信息 #http://httpbin.org/get?key1=value1&key2=value2 payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://httpbin.org/get", params=payload) print(r.text)
你还可以将一个列表作为值传入:
#http://httpbin.org/get?key1=value1&key2=value2&key2=value3 payload = {'key1': 'value1', 'key2': ['value2', 'value3']} r = requests.get("http://httpbin.org/get", params=payload)
三、POST请求
通常,如果你想要发送一些编码为表单形式得数据的时候,只需要简单的给request的data传递一个字典即可。你的数据在发送请求时会自动编码为表单形式:
import requests payload = {'key1': 'value1', 'key2': 'value2'} # 类似我们的请求体中的数据 r = requests.post("http://httpbin.org/post", data=payload) print(r.text)
很多时候,你想发送出去的数据并非编码为表单形式,如果你想传输一个json字符串,而不是一个字典,那么数据会被直接发送过去
例如,Github API v3 接受编码为 JSON 的 POST/PATCH 数据:
import requests import json payload = {'some': 'data'} url = 'https://api.github.com/some/endpoint' r = requests.post(url, data=json.dumps(payload)) print(r.text)
四、requests参数总结
:param method: 请求方法 :param url: 目标地址的URL :param params: 请求参数:可以是字符串、字节、字典 :param data: 可以是字典、字符串、字节、文件对象,发送的时候会在请求体中携带 :param json: 将json中对应的数据进行序列化成一个字符串,在请求体中发送给服务器,并且Content-Type是 {'Content-Type': 'application/json'} :param headers: 请求头数据 :param cookies: 请求携带的cookie :param files: 向服务器发送文件数据 :param auth: Auth tuple以启用基本的/摘要/自定义http auth。 :param timeout: 等待服务器响应时间,可以是浮点数 :param allow_redirects: 是否允许自动重定向,True(默认),Flase :param proxies: 字典映射协议到代理的URL。 :param verify: 控制我们是验证服务器的TLS证书,还是字符串,在这种情况下,它必须是CA包的路径才能使用。默认为“True”。 :param stream: 是否以流的形式读取服务器传来的数据 :param cert: 如果是字符串,则为SSL客户端证书文件(.pem)的路径。如果是元组,(‘cert’,‘key’)对。
五、响应
import requests import json payload = {'some': 'data'} url = 'https://api.github.com/some/endpoint' r = requests.post(url, data=json.dumps(payload)) # 获取响应头 print(r.headers) print(r.headers['Content-Type']) # 'application/json' print(r.headers.get('content-type')) # 'application/json' # 获取响应cookie print(r.cookies['example_cookie_name']) print(r.cookies.get_dict()) # 获取响应体 print(r.text) # 获取响应体(二进制形式) print(r.content) # 重定向与请求历史 print(r.url) print(r.status_code) # 响应状态码 print(r.history) # json响应内容 print(r.json()) # [{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...