Python爬虫requests请求库
requests:pip install request 安装
实例:
import requests
url = 'http://www.baidu.com'
response = requests.get(url=url)
print(type(response)) #请求类型
print(response.status_code) #网站响应状态码
print(type(response.text)) #网站内容类型
print(response.text) #网站内容
print(response.cookies) #网站cookies
requests.post()
requests.get()
requests.put()
requests.delete()
requests.head()
requests.options() #requests可以直接实现各种请求,比urllib方便很多
基本实例
构建一个最简单的get请求,链接为 http://httpbin.org/get
import requests
r = requests.get('http://httpbin.org/get')
print(r.text)
传参
import requests
data = {
'name':'germey',
'age':'18'
r = requests.get('http://httpbin.org/get',dat=data)
print(r.text)
转换数据类型
import requests
r = requests.get('http://httpbin.org/get')
print(type(r.text)) #打印出类型是json格式的字符串
pritn(r.json) #将返回结果是json格式的字符串转化为字典,如果返回结果不是json,便会出现解析错误,抛出json.decoder.JSONDecodeError异常
print(type(r.json())) #打印出类型是字典
抓取网页
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
r.requests.get(url='www.zhihu.come/explpre',headers=headers)
#这里加入headers请求头,其中包括user-agent字段信息,也就是浏览器标识信息,如果不加,知乎会禁止抓取
抓取二进制数据
#图片、视频、音频这些文件本质是由二进制码组成,犹豫有特定的保存格式和对应的解析方式,我们才可以看到这些 形形色色的媒体,如果抓取他们,就要拿到他们的二进制码
import requests
r = requests.get(url='https://github.com/favicon.ico')
print(r.text) #text结果出现乱码
print(r.content) #结果前带个B,代表是bytes类型数据,由于图片是二进制数据,打印时候转化为str类型,图片直接存为字符串,当然会出现乱码
#将提取的图片保存下来
with open('favicon.ico','wb') as f:
f.write(r.content)
#这里用了open方法,第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件写入二进制数据
POST请求
import requests
data = {'name':'germey','age':'22'}
r = requests.post(url='http://httpbin.org/post',data=data)
print(r.text) #可以发现获得返回结果,其中form部分就是提交的数据
响应
import requests
r = requests.get(url='http://www.jianshu.com')
print(type(r.status_code),r.status_code) #响应状态码类型以及状态码
print(type(r.headers),r.headers) #请求头的类型以及打印请求头
print(type(r.cookies),r.cookies) #cookies的类型以及打印cookies
print(type(r.url),r.url) #url类型以及打印url
print(type(r.history),r.history) #history
文件上传
requests 可以模拟提交一些数据,如果一些网站需要上传文件
import requests
files = {'file':open('favicon.ico','rb')} #文件需要与当前脚本在同一目录下
r = requests.get('http://httpbin.org/post',files=fiels)
Cookies
import requests
r = requests.get('http://www.baidu.com')
pritn(r.cookies) #调用cookies属性得到cookies,可以发现是RequestCookieJar类型
for key.value in r.cookies.items(): #使用items()方将其转化为远足组成的列表,遍历输出每个cookies的名称和值
print(key + '=' + vlaue)
会话维持
在requests中,直接利用get和post等方法可以做到模拟网页的请求,但是这实际是相当于不相同的会话,也就是说相当于你用两个浏览器打开不同的页面
设想这样一个场景,第一个请求用post方法登录的某个网站,第二次想获取登录后的个人信息,你又用了一次get方法请求个人信息页面,这相当于打开两个
浏览器,两个不相干的会话,不能获取到个人信息,如果两个请求设置同样的cookies可以获取到,但是有些繁琐,可以有更简单的方法
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789') #请求测试网址时设置一个cookies,名字叫做number,内容是123456789
r = s.get('http://httpbin.org/cookies/') #随后请求这个网址,可以网址可以获取当前的cookies
print(r.text)
SSL证书验证
requests提供了证书验证功能,当发送HTTP请求时,会检查SSL证书,我们可以使用verify参数控制是否检查此证书,如果不加verify参数的话
默认是True,会自动验证
import requests
response = requests.get('http://www.12306.cn')
pritn(response.status_code) #这样会提示一个错误SLLError表示证书验证错误
--------------------------------
response = requests.get('http://www.12306.cn',verify=False)
pritn(response.status_code) #这样就会打印一个请求成功的状态码
不过我们发现了一个警告,简易我们给它指定证书,我们可以通过设置忽略警告的方式来屏蔽这个警告
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://www.12306.cn',verify=Falsh)
print(response.status_code)
或者通过捕获警告到日志的方式忽略警告:
import logging
import requests
logging.CaptureWarnings(True)
response = requests.get('https://www.12306.cn',verify=False)
pritn(response.status_code)
我们也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或者一个包含两个文件路径的元祖
import requests
response = requests.get('https://www.12306.cn',cert=('/path/server.crt',/path/key)) #我们需要有crt和key文件,并且指定他们的路径
#本地私有证书key必须是解密状态
pritn(response.status_code)
代理设置
某些网站,请求频繁的时候,网站会弹出验证码,跳转到登录认证页面,或者封禁IP,导致一定时间内无法访问
为了防止这样的情况,我们可以设置代理IP ,使用proxies
import requests
proxies = {
'http':'http://10.10.1.10:3128', #这个代理是无效的
'https':'http://10.10.1.10:3128' #需要换成我们有效的代理IP
}
requests.get('https://www.taobao.com',proxies=proxies)
若代理需要使用 HTTP Basic Auth,可以使用类似 http://user:password@host:post 这样的语法来设置代理
import requests
proxies = {
'http':'http://user:password@10.10.1.10:3128'
}
requests.get('https://www.taobao.com',proxies=proxies)
除了最基本的HTTP代理之外,requests还支持socks协议的代理
import requests
proxies = {
'http':'socks5://user:password@host:port',
'https':'socks5://user:password@host:port'
}
requests.get('https://www.taobao.com',proxies=proxies)
超时设置
在本机网络状况不好或者服务器网络响应太慢甚至无响应时,我们可能会等特别久的时间才能收到响应,甚至到最后收不到响应而报错。
为了防止服务器不能及时响应,应该设置一个超时设置,即超过这个时间还没收到响应,就报错,需要用到timeout参数
import requests
response = requests.get('https://www.taobao.com',timeout=1) #超时时间设置为1秒,如果1秒没有响应,那就抛出异常
实际上,请求分为两个阶段,即连接(connect)和读取(read),上面设置的timeout将作用于这二者的timeout总和
如果要分别指定,就可以传入一个元组
r= requests.get('https://www.taobao.com',timeout(5,30)) #如果想永久等待,就设置为None或者直接留空,默认是None
身份验证
访问网站时没如果遇到认证页面, 需要进行身份验证(用户名和密码),此时就可以使用requests自带的身份认证功能
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:5000',auth=HttpBasicAuth('username','password'))
pritn(r.status.code)
#如果用户名和密码正确,请求时就会认证成功,返回200状态码,如果认证失败,则返回401状态码
#如果每个参数都传一个HTTPBasicAuth类,显得有些繁琐,所以requests可以直接传递远足,它会默认使用HTTPBasicAuth方法
import requests
r= r.requests.get('http://localhost:5000',auth('username','password'))
pritn(r.status_code)
Python爬虫requests请求库的更多相关文章
- Python爬虫—requests库get和post方法使用
目录 Python爬虫-requests库get和post方法使用 1. 安装requests库 2.requests.get()方法使用 3.requests.post()方法使用-构造formda ...
- 爬虫(一)—— 请求库(一)requests请求库
目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ...
- Python3 网络爬虫(请求库的安装)
Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...
- python爬虫之urllib库(三)
python爬虫之urllib库(三) urllib库 访问网页都是通过HTTP协议进行的,而HTTP协议是一种无状态的协议,即记不住来者何人.举个栗子,天猫上买东西,需要先登录天猫账号进入主页,再去 ...
- python爬虫之urllib库(二)
python爬虫之urllib库(二) urllib库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...
- python爬虫之urllib库(一)
python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...
- python爬虫基础03-requests库
优雅到骨子里的Requests 本文地址:https://www.jianshu.com/p/678489e022c8 简介 上一篇文章介绍了Python的网络请求库urllib和urllib3的使用 ...
- Python爬虫之selenium库使用详解
Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...
- python爬虫#网络请求requests库
中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urlli ...
随机推荐
- mybatis报错:java.io.IOException: Could not find resource /resources/mybatis-config.xml
原因: 这个图标的resources目录是根目录,在此目录下的文件直接写文件名即可
- LuoguP5022 旅行 (割点,基环树)
// luogu-judger-enable-o2 #include <cstdio> //#include <iostream> #include <cstring&g ...
- Vue3 Transition 过渡效果之基于 CSS 过渡
介绍 Transistion 路由组件的切换.动态组件的切换.v-if 条件渲染组件以及 v-show 显示组件原本是没有任何过渡(CSS 动画)效果的.然而,Vue 的内置组件<Transit ...
- Canvas 非线性图形(一):文本
基础 画布除了绘制图形以外还可以绘制文本,画布中的文本可以设置字体大小.字体格式.对齐方式(横向和纵向对齐方式),并且还可以制作很炫酷的文本,比如渐变文字. 文本有以下三个属性,控制文本的字体大小.字 ...
- 浅拷贝工具类,快速将实体类属性值复制给VO
/** * 浅拷贝的工具类 */ public class PropertiesUtil { /** * 两个类,属性名一样的元素,复制成员. */ public static void copy(O ...
- 【题解笔记】PTA基础6-10:阶乘计算升级版
题目地址:https://pintia.cn/problem-sets/14/problems/742 前言 咱目前还只能说是个小白,写题解是为了后面自己能够回顾.如果有哪些写错的/能优化的地方,也请 ...
- C#实现HTTP访问类HttpHelper
在项目开发过程中,我们经常会访问第三方接口,如我们需要接入的第三方接口是Web API,这时候我们就需要使用HttpHelper调用远程接口了.示例中的HttpHelper类使用Log4Net记录了每 ...
- 用bash反弹shell
用bash反弹shell 受害主机:linux系统 攻击机:需要安装netcat(nc) 受害主机执行:ifconfig ## 查看受害主机ip 攻击机执行:nc -lvp 19999 ## 在攻击 ...
- 知乎问题之:.NET AOT编译后能替代C++吗?
标题上的Native库是指:Native分为静态库( 作者:nscript链接:https://www.zhihu.com/question/536903224/answer/2522626086 ( ...
- 采云端&采云链:从订单协同到采购供应链,让采购供应链互联互通
采购供应链安全从来没有像现在这样显得如此重要和紧迫,也从来没有像现在这样复杂和敏感,对企业的经营产生决定性的影响.尤其在疫情期间,采购供应链更加牵一发而动全身,成为"运筹帷幄,决胜于千里之外 ...