Python爬虫之requests库基本介绍
本文详细介绍Python第三方库requests的基本用法,涵盖安装配置、GET与POST请求、参数传递、JSON解析、文件保存、代理设置、Cookie维持及异常处理等核心功能,帮助开发者快速掌握HTTP客户端操作。
一、说明
requests是一个功能强大的Python HTTP客户端库,在编写爬虫程序或测试服务器响应数据时非常常用。作为Python的第三方库,它专门用于发送HTTP请求,相比内置的urllib模块,requests的使用方式更加简洁直观。
Requests具备以下主要功能特性:
1、支持Keep-Alive连接与连接池 2、支持国际化域名(IDN)和URL 3、支持带有持久Cookie的会话对象 4、实现浏览器级别的SSL证书认证 5、自动进行内容解码 6、支持基本认证和摘要式身份认证 7、提供优雅的key/value格式Cookie管理 8、支持自动解压压缩内容 9、返回Unicode编码的响应体 10、支持HTTP和HTTPS代理设置 11、支持文件分块上传 12、支持流式下载 13、支持连接超时设置 14、支持分块请求 15、支持.netrc配置文件 Requests库兼容Python 2.6至2.7版本,以及Python 3.3至3.7版本,并且能在PyPy环境下完美运行。
使用pip命令进行第三方库的安装
pip install requests安装完成后,尝试import导入该库,若未报错则说明安装成功,可以开始使用。
二、基本用法:
1、requests.get()方法
该方法用于向目标网站发起请求,返回类型为HTTP response对象。
import requests
response = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头信息
print(response.cookies) # 打印cookie信息
print(response.text) #以文本形式打印网页源码
print(response.content) #以字节流形式打印
print(response.content.decode("utf-8")) #解决了通过response.text直接返回显示乱码的问题
response.encoding="utf-8" #避免乱码的问题发生
2、各种HTTP请求方式
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')
3、基本的GET请求示例
import requests
response = requests.get('http://httpbin.org/get')
print(response.text)
4、带参数的GET请求
第一种方法是将参数直接拼接在URL字符串内部。
import requests
response = requests.get(http://httpbin.org/get?name=gemey&age=22)
print(response.text)
另一种方法是先将参数封装在字典(dict)中,在发起请求时将params参数指定为该字典。
import requests
data = {
'name': 'tom',
'age': 20
}
response = requests.get('http://httpbin.org/get', params=data)
print(response.text)
5、解析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()))
如果JSON解码失败,程序将会抛出 ValueError: No JSON object could be decoded 异常。需要注意的是,成功调用 response.json() 并不一定意味着HTTP请求本身是成功的。某些服务器会在失败的响应(如HTTP 500错误)中返回包含错误细节的JSON对象,该对象仍会被解码并返回。要检查请求是否成功,应使用 r.raise_for_status() 方法,或者检查 response.status_code 是否与预期一致。
6、保存二进制文件
二进制内容可以通过 response.content 属性获取。
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)
7、添加请求头(Headers)信息
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)
8、使用代理服务器
与添加headers的方法类似,代理参数也需要配置为一个字典(dict)。
此处演示使用requests库爬取IP代理网站上的IP地址、端口号以及代理类型。
import requests
import re
def get_html(url):
proxy = {
'http': '120.25.253.234:812',
'https': '163.125.222.244:8123'
}
heads = {}
heads['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
req = requests.get(url, headers=heads,proxies=proxy)
html = req.text
return html
def get_ipport(html):
regex = r'<td data-title="IP">(.+)</td>'
iplist = re.findall(regex, html)
regex2 = '<td data-title="PORT">(.+)</td>'
portlist = re.findall(regex2, html)
regex3 = r'<td data-title="类型">(.+)</td>'
typelist = re.findall(regex3, html)
sumray = []
for i in iplist:
for p in portlist:
for t in typelist:
pass
pass
a = t+','+i + ':' + p
sumray.append(a)
print('高匿代理')
print(sumray)
if __name__ == '__main__':
url = 'http://www.kuaidaili.com/free/'
get_ipport(get_html(url))
9、基本的POST请求
import requests
data = {'name':'tom','age':'22'}
response = requests.post('http://httpbin.org/post', data=data)
10、获取Cookie信息
import requests
response = requests.get('http://www.baidu.com')
print(response.cookies)
print(type(response.cookies))
for k,v in response.cookies.items():
print(k+':'+v)
11、会话维持(Session)
import requests
session = requests.Session()
session.get('http://httpbin.org/cookies/set/number/12345')
response = session.get('http://httpbin.org/cookies')
print(response.text)
11、证书验证设置
import requests
from requests.packages import urllib3
urllib3.disable_warnings() #从urllib3中消除警告
response = requests.get('https://www.12306.cn',verify=False) #证书验证设为FALSE
print(response.status_code)
12、超时异常捕获
import requests
from requests.exceptions import ReadTimeout
try:
res = requests.get('http://httpbin.org', timeout=0.1)
print(res.status_code)
except ReadTimeout:
print(timeout)
13、通用异常处理
在不确定会发生何种错误时,建议尽量使用try…except语句块来捕获并处理异常。
import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException
try:
response = requests.get('http://www.baidu.com',timeout=0.5)
print(response.status_code)
except ReadTimeout:
print('timeout')
except HTTPError:
print('httperror')
except RequestException:
print('reqerror')
总结
到此这篇关于Python爬虫之requests库基本介绍的文章就介绍到这了,更多相关Python requests库内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









