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 ...
随机推荐
- Android OOM 问题探究 -- 从入门到放弃
一.前言 最近客户反馈了一些OOM的问题,很早之前自己也有简单了解过OOM的知识,但时间久远,很多东西都记不清了. 现在遇到这个OOM问题,也即趁此搜索了一些资料,对OOM问题做一些探究,把资料记录于 ...
- Flutter 开启 Windows、macOS 平台支持的命令
Flutter 的多平台支持除了 Android 和 iOS 是默认开启的以外,比如 Windows.Linux 平台的支持需要手动开启. Flutter config 命令集中,有以下参数是对于平台 ...
- K8s小白?应用部署太难?看这篇就够了!
在云原生趋势下,容器和 Kubernetes 可谓是家喻户晓,许多企业内部的研发团队都在使用 Kubernetes 打造 DevOps 平台.从最早的容器概念到 Kubernetes 再到 DevOp ...
- matery添加加载动画
1.在主题 /layout/_partial/目录新建一个loading-pages.ejs 内容如下: <style type="text/css" lang=" ...
- [HDU6057] Kanade‘s convolution (FWT)
题面 出自HDU6057 给你两个数列 A [ 0... 2 m − 1 ] A[0...2^m-1] A[0...2m−1] 和 B [ 0... 2 m − 1 ] B[0...2^m-1] B[ ...
- volatile 函数影响子查询提升
我们知道 volatile 函数会影响SQL的执行性能,比如:volatile 类型函数无法建函数索引.volatile 函数针对每条记录都要执行一次.本篇的例子主要讲述 volatile 类型的函数 ...
- 华南理工大学 Python第6章课后测验-1
1.(单选)以下关于语句 a = [1,2,3,(4,5)]的说法中,正确的个数有( )个.(1)a是元组类型 (2)a是列表类型 (3)a有5个元素 (4)a有4个元素(5)a[2] ...
- Netty 学习(一):服务端启动 & 客户端启动
Netty 学习(一):服务端启动 & 客户端启动 作者: Grey 原文地址: 博客园:Netty 学习(一):服务端启动 & 客户端启动 CSDN:Netty 学习(一):服务端启 ...
- Exchange 2019数据库切换
最近在测试Exchange 2019的一些安装步骤.在测试到DAG的数据库切换的时候遇到了一些问题.An Active Manager operation failed. Error: The dat ...
- Git将本地仓库上传到github
这里采用简单的描述,提供两种方式: 一.连接本地文件夹和远程仓库 1.使用pull--拉取github项目文件 (1)进入到自己要上传的文件夹内部,然后git bash here (2)输入命令 gi ...