目录
知识点回顾
代理ip的原理、分类及如何使用
爬虫cookie的使用、登录后保存及读取
请求异常处理
关于requests库的介绍
requests是一个擅长处理复杂HTTP请求、cookie、header等内容的第三方库。
该库创建者Kenneth Reitz对python标准库工具的评价:
python标准库urllib2为你提供了大多数HTTP功能,但是他的API非常差劲。它是为当时的web创建的。即使最简单的任务,它也需要大量的工作(甚至重写整个方法)。事情不应该这样复杂,在python中更不应该如此。
基本使用
安装
跟任何python第三方库一样,requests库也可以用其他第三方python库管理器(比如pip)安装,或者直接下载源代码安装。
pip安装:
pip install requests
导入
import requests
各类基本请求
req = requests.get("http://www.baidu.com")
req = requests.post("http://www.baidu.com")
req = requests.put("http://www.baidu.com")
req = requests.delete("http://www.baidu.com")
req = requests.head("http://www.baidu.com")
req = requests.options("http://www.baidu.com")
基本的post请求和get请求
参数是字典,我们也可以传递json类型的参数:
import requests
from fake_useragent import UserAgent
def test_get():
url = 'http://baidu.com/s'
headers = {'User-Agent':UserAgent().chrome}
# 构建传递的参数
params = {'wd':'python爬虫'}
resp = requests.get(url,headers=headers,params=params)
print(resp.text[:1500])
def test_post():
url = 'https://www.kuaidaili.com/login/'
headers = {
'User-Agent':UserAgent().chrome
}
data = {
'login_type':'1',
'username':'xxxxxxx',
'passwd':'xxxx',
'next':'/'
}
resp = requests.post(url,headers=headers,data=data)
print(resp.text[:1500])
if __name__ == '__main__':
#test_get()
test_post()
requests伪装爬虫
爬虫里,伪装必不可少。
在requests中伪装爬虫跟urllib中的使用基本一致。
伪装请求头
伪装请求头在采集信息时经常使用,我们可以用这个方法来隐藏身份。
一样是使用fake_useragent随机生成请求头进行伪装。
import requests
from fake_useragent import UserAgent
def test_headers():
url = 'http://httpbin.org/get'
headers ={
'User-Agent':UserAgent().chrome
}
resp = requests.get(url,headers=headers)
print(resp.text)
代理ip访问
注意设置的格式为:
'type' :'type://ip:port'
import requests
def test_proxy():
'''
设置代理ip
'''
url = 'http://httpbin.org/get'
headers ={
'User-Agent':UserAgent().chrome
}
# 设置代理参数
proxy = {
# 'type' :'type://ip:port'
'http':'http://202.109.157.62:9000',
}
resp = requests.get(url,headers=headers,proxies=proxy)
print(resp.text)
requests的其他功能
除了自定义请求头和设置ip代理,requests还有相当丰富的功能。
设置超时时间
可以通过timeout属性设置超时时间,一旦超过这个时间还没获得响应内容,就会提示错误。
import requests
from fake_useragent import UserAgent
def test_timeout():
url = 'http://www.github.com'
headers = {
'User-Agent':UserAgent().chrome
}
resp = requests.get(url,headers=headers,timeout=1) # 设置超时
print(resp.text)
session自动保存cookies
seesion的意思是保持一个会话,比如 登陆后继续操作(记录身份信息) 而requests是单次请求的请求,身份信息不会被记录
import requests
from fake_useragent import UserAgent
def test_session():
url ='https://www.kuaidaili.com/login/'
headers = {
'User-Agent':UserAgent().chrome
}
data = {
'login_type':'1',
'username':'xxxxx',
'passwd':'xxxx',
'next':'/'
}
index_url ='https://www.kuaidaili.com/usercenter/overview'
# 发送登录请求,为了登录后可以保存cookie,使用session对象
s = requests.session()
resp1 = s.post(url,data=data,headers=headers)
# 登录成功后访问个人主页
resp2 = s.get(index_url,data=data,headers=headers)
with open('tmp.html','wb') as f:
f.write(resp2.content)
ssl验证
SSL验证(Secure Sockets Layer verification)是一种用于确保网络通信安全的协议。SSL验证通过对通信双方进行身份认证和数据加密来保护数据的传输过程。SSL验证使用了公钥加密和数字证书来实现安全通信。
在SSL验证中,服务器需要使用数字证书来证明自己的身份。数字证书由可信任的证书颁发机构(CA,Certificate Authority)签发,并包含了服务器的公钥。当客户端连接到服务器时,服务器会将数字证书发送给客户端。客户端会验证证书的合法性,包括验证证书的签发机构是否可信、证书是否过期等。如果验证通过,客户端会生成一个随机的对称密钥,并使用服务器的公钥加密该密钥,然后发送给服务器。服务器使用自己的私钥解密该密钥,并与客户端建立安全的加密通道。
这个一般用不到,用到就直接照搬,格式都是一样的!
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings()
resp = requests.get(url, verify=False, headers=headers)
作用
-
身份验证:SSL验证确保客户端与服务器之间的身份真实性。客户端可以验证服务器的数字证书,确保连接到的是预期的服务器,而不是恶意伪造的服务器。
-
数据加密:SSL验证使用公钥加密算法来加密传输的数据,确保在传输过程中数据不会被窃取或篡改。
-
完整性保护:SSL验证使用消息摘要算法来计算数据的哈希值,并将其与数字签名一起传输,以验证数据在传输过程中是否被篡改。