目录
4. requests跳过SSL证书验证,模拟Session登录,获取Cookie
1.焦距爬虫概念
焦距爬虫(Focal Length Spider)是一种用于从网页中提取信息的网络爬虫。与常规的爬虫不同,焦距爬虫可以通过调整网页的焦点和视角来提高信息提取的效率。
焦距爬虫的工作原理是模拟用户的行为,在浏览器中加载网页,并根据网页布局和结构调整焦点和视角。通过这种方式,焦距爬虫可以集中精力提取页面上最重要的内容,避免浪费时间和资源在不必要的部分上。焦距爬虫通常被用于需要从复杂、动态网页中提取信息的应用程序中,例如搜索引擎、社交媒体分析、商品价格比较等。
'''
01 -聚焦爬虫
'''
import urllib.request
# 1. 设置url(统一资源定位符)
url = "https://www.baidu.com"
# 2. 通过urllib模块爬取网页信息
response = urllib.request.urlopen(url=url)
# 3. 获取response对象
print("response对象:",response)
# 4. 获取响应码
print("响应码:",response.getcode())
# 5. 获取请求url
print("url:",response.geturl())
# 6. 获取消息报头
'''
Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 227
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com;
Content-Type: text/html
Date: Tue, 25 Apr 2023 02:15:56 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BD_NOT_HTTPS=1; path=/; Max-Age=300
Set-Cookie: BIDUPSID=DAEDB6859CD44C23BC5ED0776CC79D46; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1682388956; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BAIDUID=DAEDB6859CD44C239FB97007B50C2468:FG=1; max-age=31536000; expires=Wed, 24-Apr-24 02:15:56 GMT; domain=.baidu.com; path=/; version=1; comment=bd
Strict-Transport-Security: max-age=0
Traceid: 1682388956026652212215302383363663786467
X-Ua-Compatible: IE=Edge,chrome=1
Connection: close
'''
print("消息报头:",response.info())
#
2. urllib模块
urllib是Python中一个内置的模块,用于处理URL(Uniform Resource Locator,统一资源定位符)和相关的网络请求。它提供了一系列方法和类,可以轻松地从Web服务器上下载数据、处理URL、编码/解码数据等。
下面是urllib模块中的一些主要方法和类:
-
urllib.request.urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None):打开指定的URL地址并返回一个响应对象,其中url是要打开的网址,data是可选的要传递到服务器的数据,timeout是连接超时时间。
-
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True):解析url字符串并返回一个包含各个组成部分的对象,其中scheme是指定的URL方案,allow_fragments指定是否允许#后面的片段出现在返回的URL中。
-
urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus):将一个字典或元组列表转换为URL编码的字符串,其中query是要编码的字典或元组列表,doseq指定是否需要重复的键,safe指定保留的字符,encoding指定字符编码,errors指定编码错误时的行为,quote_via指定用于引用特殊字符的方法。
-
urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None):将URL指定的文件下载到本地并保存到指定的文件名中,其中url是要下载的文件的网址,filename是可选的要保存的文件名,reporthook是可选的回调函数,data是可选的传递到服务器的数据。
-
urllib.error:包含一些异常类,例如URLError和HTTPError,用于处理与网络请求相关的错误。
'''
02 urllib模块
'''
import urllib.request as req
# 1.设置url
url = "https://www.duquanben.com/xiaoshuo/6/6193/3029026.html"
# 2.发送请求并获取响应文件
response = req.urlopen(url=url)
# 3.输出响应文件
print(response)
# 4.以byte形式文件输出,读取response对象的数据内容
print(response.read(),end="\n")
# 5.以utf-8解码 读取response对象的数据内容
'''
1.ignore:忽略非法字符
2.pycharm中的FileEncoding的编码格式是否为utf-8
'''
html = response.read().decode("utf-8")
print(html)
3. requests模块
requests模块是Python中常用的HTTP请求库,它提供了简单且易于使用的API,使得向网站发起HTTP请求变得更加方便和直观。使用requests模块,我们可以很容易地发送HTTP请求并获取响应内容,比如获取网页HTML、下载文件、模拟登录等操作。
'''
03 requests 模块
'''
import requests
# 1.基本的GET请求方式
response = requests.get("https://www.baidu.com")
print(response) # 200
print(type(response))
response = requests.request("get","https://ieltsonlinetests.com")
print(response) # 200
# 2. 添加headers以及查询参数
# https://www.baidu.com/s?wd=
# 2.1 设置主url
url = "https://www.baidu.com/s?"
# 2.2 设置用户代理
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36 Edg/105.0.1343.50'
}
# 2.3 设置参数列表
data = {
"wd":'python'
}
# 2.4 使用requests模块GET请求发送爬取
response = requests.get(url=url,headers=headers,params=data)
# 2.5 设置文件响应对象的解码格式
response.encoding = 'utf-8'
# 2.6 获取响应对象的文本数据
html = response.text
# 2.7 输出打印html
print(html)
print(type(html))
# 2.8 使用text获得unicode格式的内容,查看响应文件文本的内容
print(response.text)
# 2.9 查看响应文件主体的byte字节
print(response.content)
# 2.10 查看响应文件的解码格式
print(response.encoding)
# 2.11 查看响应文件的响应码
print(response.status_code)
# 2.12 查看响应文件的完整url
print(response.url)
4.requests跳过SSL证书验证,模拟Session登录,获取Cookie
SSL证书(Secure Sockets Layer Certificate),也叫TLS证书(Transport Layer Security Certificate),是一种由认证机构(Certificate Authority)颁发的用于加密网站通信和保护用户隐私的数字证书。
在网站使用SSL证书的情况下,用户与网站之间的通信会被加密,这可以防止中间人攻击、窃取用户信息和篡改数据。SSL证书中包含了网站的身份信息和公钥,浏览器通过验证证书的合法性和信任认证机构,可以确保网站的身份和通信安全。
在使用SSL证书的网站中,浏览器的地址栏通常会显示一个小锁头,表示当前页面是通过SSL加密的。此外,一些网站还会在地址栏显示绿色的 HTTPS 标识,以便用户识别和确认网站的安全性。
使用requests可以跳过SSL证书的验证
'''
Requests模块-SSL证书
'''
import requests
#如果想跳过证书验证则将True改成False
response=requests.get("https://www.12306.cn",verify=True)
response.encoding='utf-8'
print(response.text)
使用requests模块也可以模拟当前session中的用户登入
'''
Requests模块-session
'''
import requests
#1.设置保存客户的session信息
session=requests.session()
#2.设置用户代理
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
}
#3.设置登录的url
# url="https://ssl.ptlogin2.qq.com/login"
url="https://127.0.0.1:5000/admin/login"
#4.设置请求参数
# data={
# 'u':'2317730675',
# 'p':'23232***&#'
# }
data={
# 填写键值对格式的数据,这个数据从session中获取
}
#5.使用session发送请求
req=session.get(url=url,headers=headers,data=data)
#6.输出响应码
print(req.status_code)
#7.输出文本
print(req.text)
使用requests模块也可以获取Cookie的信息
Cookie是指在客户端记录用户状态的一种机制。在Web应用程序中,Cookie通常用于记录用户的登录状态、购物车内容、用户偏好等信息,以便在用户下一次访问时能够快速获取这些信息并提供更好的用户体验。
当用户首次访问一个网站时,服务器可以通过HTTP响应头中的Set-Cookie字段,将一些信息保存在用户的浏览器中,比如用户ID、登录状态、浏览器类型等。浏览器在接收到这些信息后,会将它们存储在本地的Cookie文件中。
当用户再次访问该网站时,浏览器会将存储在本地的Cookie信息发送到服务器端。服务器端可以通过HTTP请求头中的Cookie字段,获取之前保存在浏览器中的信息,从而进行用户状态的判断和处理。
'''Cookie
'''
import requests
# 1.打开url
response = requests.get("http://www.sina.com")
# 2. 获取相应文件的Cookie
cookieobj = response.cookies
# 3. 输出Cookie
print("Cookie:",cookieobj)
# 4. 把Cookie值对象转换为字典
cookieDict = requests.utils.dict_from_cookiejar(cookieobj)
print("Cookie字典:",cookieDict)