爬虫之requests介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫之requests介绍相关的知识,希望对你有一定的参考价值。
一 介绍
1 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是urllib3)
2 注意:requests库发送请求将网页代码下载下来之后,并不会执行js代码,这需要我们分析目标站点,然后发起新的requests请求
3 各种请求方式:常用的是requests.get()和requests.post()
requests.get(url)
requests.post(url,data={‘key‘:value})
requests.put(url,data={‘key‘:‘value‘})
request.delete(url)
request.option(url)
二 基于GET请求
1. 基本请求
import requests
response = requests.get(‘http://www.baidu.com‘)
print(response.text)
高级用法:
1. SSL Cert Verification
# 证书验证(大部分网站都是https)
import requests
response = requests.get(‘https://www.12306.com‘) # 如果是ssl请求,首先检查证书是否合法,不合法则报错,程序终止
#改进1:去掉报错,但是会警告
import requests
response = requests.get(‘https://www.12306.com‘,vertify=False) # 不验证证书,有警告,返回200
#改进2:去掉报错,并且去掉警告信息
import requests
from requests.packages import urllib3
urllib3.disable_warning() # 关闭警告
response = requests.get(‘https://www.12306.com‘)
#改进3:加上证书
#很多网站都是https,但是不用证书也可以访问,大多数情况下都是可以携带也可以不携带证书
#知乎,百度都是可带可不带
#有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定的网站
import requests
response=requests.get(‘https://www.12306.cn‘,
cert=(‘/path/server.crt‘,‘/path/key‘))
)
2. 使用代理
#官网链接: http://docs.python-requests.org/en/master/user/advanced/#proxies
#代理设置:先发送请求给代理,然后由代理帮忙发送(封ip是常见的事情)
import requests
proxies={
‘http‘:‘http://egon:[email protected]:9743‘,#带用户名密码的代理,@符号前是用户名与密码
‘http‘:‘http://localhost:9743‘,
‘https‘:‘https://localhost:9743‘,
}
respone=requests.get(‘https://www.12306.cn‘,
proxies=proxies)
print(respone.status_code)
#支持socks代理,安装:pip install requests[socks]
import requests
proxies = {
‘http‘: ‘socks5://user:[email protected]:port‘,
‘https‘: ‘socks5://user:[email protected]:port‘
}
respone=requests.get(‘https://www.12306.cn‘,
proxies=proxies)
print(respone.status_code)
3. 超时设置
#超时设置
#两种超时:float or tuple
#timeout=0.3 #代表从发出到接收到的总时间
#timeout=(0.1,0.2) #0.1表示链接超时 0.2表示接收数据的超时时间
import requests
response=requests.get(‘https://www.baidu.com‘,timeout=0.001)
4. 认证设置
#官网链接:http://docs.python-requests.org/en/master/user/authentication/
#认证设置:登陆网站是,弹出一个框,要求你输入用户名密码(与alter很类似),此时是无法获取html的
# 但本质原理是拼接成请求头发送
# r.headers[‘Authorization‘] = _basic_auth_str(self.username, self.password)
# 一般的网站都不用默认的加密方式,都是自己写
# 那么我们就需要按照网站的加密方式,自己写一个类似于_basic_auth_str的方法
# 得到加密字符串后添加到请求头
# r.headers[‘Authorization‘] =func(‘.....‘)
#看一看默认的加密方式吧,通常网站都不会用默认的加密设置
import requests
from requests.auth import HTTPBasicAuth
r=requests.get(‘xxx‘,auth=HTTPBasicAuth(‘user‘,‘password‘))
print(r.status_code)
#HTTPBasicAuth可以简写为如下格式
import requests
r=requests.get(‘xxx‘,auth=(‘user‘,‘password‘))
print(r.status_code)
5. 异常处理
# 异常处理
import requests
from requests.exceptions import *
try:
x=requests.get(‘https://www.baidu.com‘,timeout=0.0001)
except ReadTiomout:
print(‘访问超时‘)
except ConnectionError:#网络不通
print(‘网络不通‘)
except RequestException:
.....
6. 上传文件
import requests
files = {‘file‘:open(‘a.jpg‘,‘rb‘)}
response=requests.post(url,files=files)
以上是关于爬虫之requests介绍的主要内容,如果未能解决你的问题,请参考以下文章