python爬虫之requests
requests
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多
一、用法
1、各种请求方式
import requests requests.get('http://httpbin.org/get') requests.post('http://httpbin.org/post') requests.put('http://httpbin.org/put') requests.delete('http://httpbin.org/delete') requests.head('http://httpbin.org/get') requests.options('http://httpbin.org/get')
2、url参数
方法1.直接放在url
import requests response = requests.get(http://httpbin.org/get?name=gemey&age=22) print(response.text)
方法2.params传参,放在一个字典中
import requests data = { 'name': 'tom', 'age': 20 } response = requests.get('http://httpbin.org/get', params=data) print(response.text)
3、添加头信息
import requests heads = {} heads['User-Agent'] = 'Mozilla/5.0 ' \ '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \ '(KHTML, like Gecko) Version/5.1 Safari/534.50' response = requests.get('http://www.baidu.com',headers=headers)
二、属性
r.status_code
http请求的返回状态,200表示连接成功,404表示连接失败
r.text
http响应内容的字符串形式,url对应的页面内容
r.encoding
从HTTP header中猜测的响应内容编码方式
r.apparent_encoding
从内容分析出的响应内容的编码方式(备选编码方式)
r.content
HTTP响应内容的二进制形式
r.headers
http响应内容的头部内容
r..cookies
获取cookie
r.Session
会话维持
三、解析数据
1、解析json
import requests response = requests.get('http://httpbin.org/get') print(response.text) print(response.json()) #response.json()方法同json.loads(response.text) print(type(response.json()))
2、保存二进制文件
import requests response = requests.get('http://img.ivsky.com/img/tupian/pre/201708/30/kekeersitao-002.jpg') b = response.content with open('F://fengjing.jpg','wb') as f: f.write(b)
四、一些注意事项
1、SSL证书验证错误
报错
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",)
解决:添加参数verify=False
response = requests.get(url,verify=False)
2、用户user-agent过于频繁
有些网站会统计单个user-agent单位时间访问服务器的次数。
安装fake_useragent库
pip install fake_useragent # 安装ua库
使用
from fake_useragent import UserAgent import requests url = 'https://www.baidu.com/' ua = UserAgent().random header = { 'User-Agent': ua } response = requests.get(url, headers=header, verify=False)
3、使用代理
为了保护自己,也为了提高爬虫的效率,安全度高,可以使用代理,但是成本高。
import requests proxies = {'http': 'socks5://172.0.0.0:0', 'https': 'socks5://172.0.0.0:0'} response = requests.get(urln,proxies=proxies)
4、在headers中添加Referer
为了防反爬,可以在headers里加上目标网址
url = 'https://www.baidu.com/' ua = UserAgent().random header = { 'Referer': 'https://www.baidu.com/', 'User-Agent': ua } response = requests.get(url, headers=header, verify=False)
5、增加异常判断
try: res = requests.get(url=url,headers=header) print(res.text) except Exception as r: print('error:',r)