[爬虫] requests库
requests库的7个常用方法
requests.request() | 构造一个请求,支撑以下各种方法的基础方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCH |
requests.delete() | 向HTML页面提交删除请求,对应于HTTP的DELETE |
get方法:
r = equests.get(url,params=None,**kwargs),r 是服务器返回的一个包含服务器所有资源的Response对象
- url :要获取的API/网页的URL链接
- params:URL中的额外参数,可以是字典、字节流格式,可选
- **kwargs:共有12个控制访问的参数
Response对象的常用属性
- r.status_code http请求的返回状态,200是OK
- r.text http响应内容的字符串形式,即URL返回的页面内容
- r.encoding 从http Header中猜测的响应内容的编码方式,若header没有charset字段,则默认为ISO-8859-1编码,<meta charset='utf-8'>
- r.apparent_encoding 从内容分析出的响应内容编码方式(备选编码)这个更准确解析页面的编码
- r.content http响应内容的二进制形式(如图片是由二进制存储的,就可以通过r.content还原这图片)
- r.headers http响应的响应头
- r.raise_for_status http请求状态码不是200则会引发HTTPError异常
网络链接有风险,所以需要进行异常处理。
异常 | 说明 |
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数 |
requests.ConnectTimeout | 连接服务器超时异常 |
requests.Timeout | 请求URL超时 |
r.raise_for_status() #判断r若果不是200,产生异常requests.HTTPError异常
import requests
def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status() #请求不成功不是200,则引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "异常了!"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLText(url))
Requests库的head方法:
>>> r = requests.head(url="http://www.jd.com",timeout=30) #可以以很少的网络流量获取网站大体信息
>>> r.headers #响应头
{'Content-Type': 'text/html', 'Connection': 'keep-alive', ...}
>>> r.text #所以API内容是空的
''
Requests库的post方法:控制参数是data
向URLpost一个字典,自动编码为form(表单)
>>> payload = {'key1':'value1','key2':'value2'} #post的是一个字典,则自动编码为form表单
>>> r = requests.post(url='http://httpbin.org/post',data=payload,timeout=30)
>>> print(r.text) #返回json
{
......
"form": { #post的是字典或键值对,自动放在form表单下的
"key1": "value1",
"key2": "value2"
},
......
}
>>> print(r.json()) #返回的是一个Python字典
{... 'form': {'key1': 'value1', 'key2': 'value2'}, ......}
向URL post一个字符串,自动编码为data
>>> string = "skdkheh990" #post一个字符串,自动编码为data
>>> r = requests.post(url="http://httpbin.org/post",data = string)
>>> print(r.text) #返回json
{
......
"data": "skdkheh990", #post字符串自动存在data字段下
"form": {},
......
}
>>> r.json() #json()方法返回一个Python字典
{...... 'form': {}, 'url': 'http://httpbin.org/post', 'data': 'skdkheh990',......}
**kwargs:控制方为参数,都是可选项
1.params:是字典或字节序列,作为参数增加到URL中,在get方法中使用
>>> kv = {'wd':'unittest'}
>>> r = requests.get(url='http://www.baidu.com',params=kv)
>>> r.status_code
200
>>> r.url
'http://www.baidu.com/?wd=unittest'
2.data:是字典、字节序列或文件对象,作为Request的内容,向服务器提交资源时使用,post、put、patch、delete方法使用
>>> dic ={'key1':'value1','key2':'value2'} #
>>> r = requests.post(url='http://httpbin.org/post',data=dic)#post提交到服务器不会显示在URL上
>>> body='stringafasdf'
>>> r = requests.post(url="http://httpbin.org/post",data=body)
3.json:是json格式的数据,作为Request的内容,提交内容是json串时,用到json=...,post等方法使用
>>> json1 ={'key1':'value1'}
>>> r = requests.post(url="http://httpbin.org/post",json=json1)
>>> print(r.text)
{
"args": {},
"data": "{\"key1\": \"value1\"}",
"files": {},
"form": {},
"json": { #json=json1会把数据提交到服务器的json域中
"key1": "value1"
},
......
}
post 控制参数用到data、json的区别:
- 提交的数据是字典或键值对,使用data=XXX,则提交到服务器的form表单下;
- 提交的数据是字符串,使用data=XXX,则提交到服务器的data下;
- 提交的数据是json串时,使用json=XXX,则提交到服务器的json域;
4.headers:字典格式,用于定制http请求头,get、post等方法使用
>>> header={'user-agent':'chrome/10'} #模拟浏览器向服务器发起请求就是用headers
>>> r = requests.request('POST',url="http://httpbin.org/post",headers=header)
5.cookies:是字典或cookieJar格式,Request中的cookie
6.auth :是元组类型,用于http认证功能
7.files:是字典类型,用于向服务器传输文件
>>> fs = {'file':open(r'E:\test.txt','rb')}
>>> r = requests.post(url="http://httpbin.org/post",files = fs,timeout=30)
>>> print(r.text)
{
"args": {},
"data": "",
"files": { #向服务器提交的文件保存到服务器的files域中
"file": "hahfhadfhadsfhhsdflahlowej[of567890987654567890987654345678"
},
"form": {},
......
}
8.timeout:设定超时时间,秒为单位
在设定时间内没有返回内容则返回一个timeout异常
9.proxies:是字典类型,可以为我们爬取网页设定访问代理服务器,可以增加登录认证
>>> pxs = {'http':'http"//user:pass@10.10.10.:1234','https':'https://10.10.10.1.4321'}#设置2个代理,一个是http访问时使用的代理,另一个是https访问时使用的代理
>>> r = requests.get(url='http://www.baidu.com',proxies=pxs) #可以隐藏用户爬去网页时原来的IP地址信息
10.allow_redirects:Ture/False,默认是Ture,用于允不允许URL进行重定向
多用于需要登录才能查看内容的网站,若 allow_redirects = False,跳转到登录界面,status_code = 302(重定向);若 allow_redirects = True,status_code = 200
11.stream:Ture/False,默认是Ture,用于对获取的内容是否立即下载
12.verify:Ture/False,默认是Ture,用于验证SSL证书开关
13.cert:保存本地SSL证书路径的字段
网络爬虫中的Robots协议
robots协议是指:放在网站根目录下,用来告知爬虫哪些可以爬取哪些不能爬取数据。
http://www.jd.com/robots.txt 京东网终的robots协议
网络爬虫的尺寸
- 小规模,数据量小,爬取速度不明感,爬取网页:requests库(90%)
- 中规模,数据量规模较大,爬取速度敏感,爬取网站、系列网站:Scrapy库
- 大规模,搜索引擎,爬取速度关键,爬取全网:定制开发
网络爬虫的限制
网站是通过根据请求头中user-agent字段是否是浏览器来判断是否是爬虫爬取数据,通过headers={...}更改用户代理为浏览器就可以正常爬取数据了。
来源审查:判断user-agent进行限制
检查来访http协议头的user-agent域,只响应浏览器或友好爬虫的访问
发布公告:Robots协议(网络爬虫排除标准)
我们平时看到的人机交互方式,如:图像、文本框、点击按钮等等,浏览器向后台服务器提交请求的时候其实都是以链接的形式来提交的,只要通过浏览器的解析知道提交给后台的URL的形式那就可以用request库模拟浏览器向服务器做正式的提交。向网站提交数据时可以通过这种方式。
eg:在百度搜索框搜索内容其实是:http://www.baidu.com?wd='unittest'方式提交的
网络上任何内容都有一个URL,任何内容都是用URL定义的,都可以通过URL对网络上内容进行操作。
reference:
http://blog.csdn.net/JOJOY_tester/article/details/61416719?locationNum=2&fps=1
http://cn.python-requests.org/zh_CN/latest/
[爬虫] requests库的更多相关文章
- Python爬虫—requests库get和post方法使用
目录 Python爬虫-requests库get和post方法使用 1. 安装requests库 2.requests.get()方法使用 3.requests.post()方法使用-构造formda ...
- Python爬虫--Requests库
Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,requests是python实现的最简单易用的HTTP库, ...
- 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】
[写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...
- Python爬虫 requests库基础
requests库简介 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支 ...
- python爬虫---requests库的用法
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多 因为是第三方库,所以使用前需要cmd安装 pip install requests 安装完成后import一下 ...
- Python 爬虫-Requests库入门
2017-07-25 10:38:30 response = requests.get(url, params=None, **kwargs) url : 拟获取页面的url链接∙ params : ...
- Python爬虫---requests库快速上手
一.requests库简介 requests是Python的一个HTTP相关的库 requests安装: pip install requests 二.GET请求 import requests # ...
- 4.爬虫 requests库讲解 GET请求 POST请求 响应
requests库相比于urllib库更好用!!! 0.各种请求方式 import requests requests.post('http://httpbin.org/post') requests ...
- 6.爬虫 requests库讲解 总结
requests库的总结: 用ProcessOn根据前面的几节内容做了个思维导图:
随机推荐
- 列表控件 ListBox、ComboBox
列表控件可以当作容器,内部可以有RadioButton.CheckBox.StackPanel等.即Items类型多样. ListBox,多个Item可被选中:ComboBox,只能有一个Item被选 ...
- B/S上传超大文件解决方案
4GB以上超大文件上传和断点续传服务器的实现 随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求. 但是在很多情况下,平台运营方并没有大文件上 ...
- BZOJ 3270: 博物馆 概率与期望+高斯消元
和游走挺像的,都是将概率转成期望出现的次数,然后拿高斯消元来解. #include <bits/stdc++.h> #define N 23 #define setIO(s) freope ...
- 洛谷比赛 U5442 买(最长链)
U5442 买 题目提供者bqsgwys 标签 树形结构 树的遍历 洛谷原创 题目背景 小E是个可爱的电路编码员. 题目描述 一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装 ...
- Codevs 1519 过路费(Mst+Lca)
1519 过路费 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,-,n. ...
- element-ui多重下拉列表的使用
template <div class="block"> <span class="demonstration">默认 click 触发 ...
- Android_(消息提示)多种使用Toast的消息提示
Toast是一种提供给用户简介信息的视图,可以创建和显示消息,该视图以浮于应用程序之上的形式呈现给用户.因为它并不获得焦点,即使用户正在输入什么也不会受到影响. Toast目标是尽可能以不显眼的方式, ...
- PHP-异常-1
PHP 错误处理 在 PHP 中,默认的错误处理很简单.一条消息会被发送到浏览器,这条消息带有文件名.行号以及一条描述错误的消息. 在创建脚本和 web 应用程序时,错误处理是一个重要的部分.如果您的 ...
- JS基础_对象操作
1.in 运算符 通过该运算符可以检查一个对象中是否含有指定的属性,如果有,返回true 语法: “属性名” in 对象 var obj = { name:"hello" } co ...
- Visual Studio Code 编辑器使用
image.png 之前一直都是用 sublime text 作为开发工具,用久了自然而然会觉得生活无趣,而且当时用sublime text 装了很多插件,有些插件不能用,于是决定试试微软的新产品 ...