爬虫之requests

一、基本用法
1.GET请求
①r=requests.get(url) --返回Response对象
def get(url, params=None, **kwargs):
params={... },还可增加头信息如requests.get(url,headers={...})
如果r是JSON格式的字符串,可以调用r.json()转化为字典,若不是JSON格式,则json.decoder.JSONDecoderError
②抓取网页
r.text可以获取网页信息,并且为字符串类型
③抓取二进制数据
r.content可以获取二进制数据,如图片、音频、视频等文件
④添加headers
requests.get(url,headers={...}) ---伪装成浏览器
2.POST请求
def post(url, data=None, json=None, **kwargs):
requests.post(url,data={...})
3.响应
r.status_code --返回int类型 100信息性 200成功 300重定向 400客户端错误 500服务端错误
r.headers --返回CaseInsensitiveDict类型
r.cookies --返回RequestsCookieJar类型
r.url --返回str类型
r.history --返回list类型
requests.codes ---requests内置的状态码查询对象 如requests.codes.ok 为 200
二、高级用法
1.文件上传 ---post方法的file关键字
files={"file":open("路径","rb")}
r=requests.post(url,files=files)
2.Cookies
①获取cookies
r.cookies
for k,v in r.cookies.itemes():
print(k+'='+v)
②设置cookies
直接在headers={'Cookie':...}里加上cookies
也可以通过cookies关键字来设置,不过先要构造RequestCookieJar对象
jar=requests.cookies.RequestCookieJar()
cookies=...
for cookie in cookies.split(';')
k,v=cookie.split('=',1)
jar.set(k,v)
r=requests.get(url,cookies=jar,headers=...)
3.会话维持
直接用get()或post()相当于不同的绘画,等于用两个不同的浏览器打开页面,每次都要设置cookie时很繁琐.
session相当于打开一个新的浏览器选项卡而不是一个新的浏览器,利用session可以用于模拟成功登陆成功之后再进行下一步操作
s=requests.Session()
s.get(url)
...
4.SSL证书验证
如12306的证书没有被CA机构信任,用requests访问会出现requests.exceptions.SSLError
①只需把verify参数设置为False即可
requests.get(url,verify=False)
不过有警告,可以使用requests.packages下的urllib3模块 urllib3.disable_warnings() 或者 捕获到logging模块的日志 logging.captureWarnings(True)
②使用本地证书
requests.get(url,cert='包含密钥和证书的单个文件路径')
#或
requests.get(url,cert=('cert文件路径1','key文件路径2')) #key必须是解密状态
5.代理设置
设置proxies参数
proxies={
'http':'http://10.0.0.1:3228',
'https':'https://10.0.0.1:3028',
}
requests.get(url,proxies=proxies)
若代理需要设置HTTP Basic Auth,可以使用类似http://user:password@host:port的格式来设置
proxies={'http':'http://user:password@10.0.0.1:3128',}
requests还支持SOCK协议的代理,首先安装 pip3 install 'requests[socks]'
proxies={
'http':'http':'socks5://user:password@10.0.0.1:3128',
'https':'https':'socks5://user:password@10.0.0.1:3128',
}
6.超时设置
timeout参数,默认为None,永久等待
request.get(url,timeout=1)
7.身份认证
使用HTTPBasicAuth类
import requests.auth import HTTPBasicAuth
requests.get(url,auth=HTTPBasicAuth('username','password')) 或 requests.get(url,auth=('username','password')) 默认使用HTTPBasicAuth类
requests还提供了其他认证方式,如OAuth认证,pip install requests_oauthlib ...
8.Prepared Request
from requests import Request,Session
url='...'
data={...}
headers={...}
s=Session()
req=Request('POST',url,data=data,headers=headers)
prepped=s.prepare_request(req)
r=s.send(prepped)
有了Request对象,就可以将请求作为独立的对象来看待,对于构造Request队列非常方便
本文参考文献:[1]崔庆才.python3网络爬虫开发实战[M].北京:人民邮电出版社,2018:122-138.
爬虫之requests的更多相关文章
- Python爬虫之requests
爬虫之requests 库的基本用法 基本请求: requests库提供了http所有的基本请求方式.例如 r = requests.post("http://httpbin.org/pos ...
- 第三百二十二节,web爬虫,requests请求
第三百二十二节,web爬虫,requests请求 requests请求,就是用yhthon的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请 ...
- 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块
孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...
- Python爬虫练习(requests模块)
Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...
- 自定义 scrapy 爬虫的 requests
之前使用 scrapy 抓取数据的时候 ,默认是在逻辑中判断是否执行下一次请求 def parse(self): # 获取所有的url,例如获取到urls中 for url in urls: yiel ...
- python爬虫 - python requests网络请求简洁之道
http://blog.csdn.net/pipisorry/article/details/48086195 requests简介 requests是一个很实用的Python HTTP客户端库,编写 ...
- 爬虫之requests模块
requests模块 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的 ...
- 爬虫之Requests&beautifulsoup
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...
- 04.Python网络爬虫之requests模块(1)
引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...
随机推荐
- Calling Circles(UVa 247)(Floyd 算法)
用Floyd算法求出传递闭包,然后用dfs求出每条连通分量.注意其中用到的几个小技巧: #include<cstdio> #include<iostream> #include ...
- 锋利的jQuery初学(2)
js与jq事件处理程序区别: 1,事件源: document.getElementById('id'); $("#id") 2,事件: document.getElem ...
- java根据ip地址获取详细地域信息的方法
通过淘宝IP地址库获取IP位置(也可以使用新浪的) 请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串] 响应信息:(jso ...
- centos tree 命令
ftp://mama.indstate.edu/linux/tree/ download & make
- servlet_4
过滤器入门 过滤器的概念及执行基本流程 过滤器的使用场景 过滤器的实现及基本配置 过滤器链 过滤器链的配置 使用注解的方式无法保证过滤器链的执行顺序,所以只能使用web.xml的配置 按照出现在web ...
- js 创建标签执行
<script type="text/javascript"> var _maq = _maq || []; _maq.push('_setAccount', 'F20 ...
- C goto
http://c.biancheng.net/view/266.html 当程序遇到 goto 后, 会无条件跳转到标签后出,然后程序按照顺序执行 例子: #include <stdio.h&g ...
- pl/sql oracle数据库中文数据显示异常或者不能使用中文查询的解决办法
1首先我们需要找到pl/sql developer 目录 然后在该目录下 创建一个bat文件 在文件中定义 set NLS_LANG=AMERICAN_AMERICA.UTF8start PLSQLD ...
- Day 22 初识面向对象
一.两种编程思想 1.面向过程编程 核心是'过程',过程指的是解决问题的步骤,就是先干什么再干什么 基于面向过程思想编写程序相当于写一条流水线,是一种机械式的思维方式 优点:解决问题的思路清晰,可以把 ...
- python MySQL执行SQL查询结果返回字典
写自动化测试的时候我希望执行数据库前置任务,把数据库查询的结果作为请求的参数,但是正常返回结果为列表嵌套里面,这样就会影响到关键字准确的获取,特别的受限于SQL的查询字段的的顺序,所以希望返回的单条数 ...