爬虫 - Request库简介
Requests
安装
pip install requests
get请求
获取资源,通常用于读取
简单的get请求,如图所示
import requests
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
res = requests.get('https://www.baidu.com', headers=header)
get请求得到Python对象,包含响应头,响应体等等(res为返回的response对象)
-
res.content
:字节方式的响应体,需要进行解码
-
res.text
:字符串方式的响应体,会自动根据响应头部的字符编码进行解码
-
res.url
:获取请求链接
-
res.encoding
:获取编码格式
-
res.status_code
:响应状态码
-
res.headers
:响应头信息
-
res.history
:追踪重定向
-
res.iter_content()
:图片,视频,大文件,一点一点循环取出来import requests urls ='https://imglf6.lf127.net/img/044f60c2398a4552/MStRdmdPRFIrRjFWRk95R041Y296QUpheTlRaG9BMkl1QWRYUVBPalZtYz0.jpg' header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'} res = requests.get(url=urls,headers =header) print(res.iter_content()) ### 生成器<generator object iter_slices at 0x05252CB0> with open('cat.jpg','wb') as f: for i in res.iter_content(): f.write(i)
-
res.cookies
:获取请求后的cookies
-
res.cookies.get_dict()
:cookie,字典格式
-
res.cookies.items()
:cookie,列表格式
-
res.raise_for_status()
:请求失败(非200响应),抛出异常
-
get请求携带参数
-
直接携带参数
-
params设置请求参数
-
get请求携带cookies
-
在header中放
header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36', 'cookie':'key=asdfasdfasdfsdfsaasdf;key2=asdfasdf;key3=asdfasdf' } res=requests.get('http://127.0.0.1:8000/index/',headers=header)
-
cookies设置
header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36', } # cookies是一个字典或者CookieJar对象 res=requests.get('http://127.0.0.1:8000/index/',headers=header,cookies={'key':'asdfasdf'})
-
自动携带cookie
session=requests.session() res=session.post('http://127.0.0.1:8000/index/') # 假设这个请求登录了 res1=session.get('http://127.0.0.1:8000/order/') # 现在不需要手动带cookie,session会帮咱处理
-
使用代理
代理池:列表放了一堆代理ip,每次随机取一个,再发请求就不会封ip了
高匿和透明代理:如果使用高匿代理,后端无论如何拿不到你的ip,使用透明,后端能够拿到你的ipurl = 'http://www.suqian360.com' header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'} res = requests.get(url=url,headers=header,proxies={'http':'112.54.41.177:9091',}) print(res.status_code) ###可以在网站的访问日志中查看这个字段:X-Forwarded-For就能看到源ip
-
设置超时时间
url = 'http://marry.pic.xishuw.net/' header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'} res = requests.get(url=url,headers=header,timeout=1) print(res.text)
post请求
提交数据,通常用与创建或更新资源
先学会谷歌工具查看
1. 先找到post请求
2. 在payload(载荷中找到自己请求的关键字)
payload通常以json格式发送,包含了请求参数和数据;在发送一个post请求时,payload可能包含表单数据,文件数据或者其他需要传递给服务器的数据
3. 然后在header(标头)中找到url
get请求可以直接使用浏览器中的url,但是post请求一定要用head中请求的url
代码运行如下:
response.json():可以直接反序列化并解码post的数据返回
如图所示
其他
随机生成ua头
安装:pip install fake_useragent
from fake_useragent import UserAgent
ua = UserAgent()
###随机生成
suiji = ua.random
###谷歌请求头
google = ua.chrome
###火狐请求头
firefox = ua.firefox
###safari请求头
safari = ua.safari
###ie请求头
ie = ua.edge
异常处理
from requests.exceptions import * #可以查看requests.exceptions获取异常类型
try:
r=requests.get('http://www.baidu.com',timeout=0.00001)
except Exception as e:
print(e)
编码问题
-
response对象获取乱码
res=requests.get('http://www.autohome.com/news') # 一旦打印出来出现乱码问题 # 方式一 res.encoding='gb2312' # 方式二 res.encoding=res.apparent_encoding
-
post请求返回解码
from urllib.parse import unquote,urlencode print(unquote('\u86c7\u5c5e\uff0c\u87d2\u86c7\u5c5e'))
-
url解码编码
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性