python学习笔记之爬虫(三) requests进阶丨【生长吧!Python】
第三章requests进阶
### 第三章 ###
''' requests进阶概述 '''
'''
我们在之前的爬虫中其实已经使用过headers了,headers为HTTP协议中的请求头,
一般存放一些和请求内容无关的数据,有时也会存放一些安全验证信息,
比如厂家你的User-Agent, token, cookie等。
通过requests发送的请求,我们可以把请求头信息放在headers中,也可以单独存放,
最终由requests自动帮我们拼接成完整的http请求头。
本章内容:
1、模拟浏览器登录 -> 处理cookie
2、防盗链处理 -> 抓取梨视频数据
3、代理 -> 防止被封IP 不推荐
'''
''' 处理cookie,登录小说网 '''
# 登录网页 -> 得到cookie
# 带着cookie去请求书架url -> 书架上的内容
# 必须把上面的两个操作连起来
# 这时我们就可以使用 session 进行请求 -> session你可以认为是一连串的请求,这个过程中的cookie不会丢失
import requests
# session: 会话
session = requests.Session()
data = {
'loginName': '18614075987',
'password': 'q6035945'
}
# 1、登录
# url = 'https://user.17k.com/www/bookshelf/index.html' # 提示访问出错
url = 'https://passport.17k.com/ck/user/login' # 访问成功
resp = session.post(url, data=data)
resp.encoding = 'utf-8'
# print(resp.text)
print(resp.cookies)
# 然后视频就没有啦!
防盗链Referer
''' 防盗链Referer -- 抓取梨视频 '''
import requests
# 拉取视频的网址
url ='https://www.pearvideo.com/video_1719484'
contId = url.split('_')[1]
requestVideoUrl = f'https://www.pearvideo.com/videoStatus.jsp?contId={contId}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4043.400',
# 防盗链:溯源,当前本次请求的上一级是谁?
'Referer': url
}
resp = requests.get(requestVideoUrl, headers=headers)
# print(resp.text) # 加上Referer后成功访问
# 获取整个字典
# print(resp.json())
# 获取srcUrl的链接
# print(resp.json()['videoInfo']['videos']['srcUrl'])
# 将json放在字典中
dct = resp.json()
# 获取字典中的srcUrl
srcUrl = dct['videoInfo']['videos']['srcUrl']
# 获取字典中的systemTime
systemTime = dct['systemTime']
# 处理srcUrl,得到最终的视频链接
srcUrl = srcUrl.replace(systemTime, f'cont-{contId}')
# https://video.pearvideo.com/mp4/adshort/20210205/cont-1719484-15600352_adpkg-ad_hd.mp4
# 下载视频
with open('a.mp4', 'wb')as wstream:
wstream.write(requests.get(srcUrl).content)
print('Done!!!')
'''
在很多时候,页面F12看到的代码和网页源代码是不匹配的
'''
代理Proxy
''' 代理 '''
一般匿名度为“透明”的都可以用。
站大爷免费代理IP:https://www.zdaye.com/FreeIPList.html
高可用全球免费代理IP库:https://ip.jiangxianli.com/?page=1
'''
# 原理:通过第三方的一个机器去发送请求
import requests
url = 'http://shortof.com/'
# 218.60.8.83:3129
ip = '49.75.59.242:3128' # 江苏省苏州市 电信
proxies = {
# 最新的requests库使用代理需要在IP前加上“https://”
'http': 'http://' + ip,
'https': 'https://' + ip,
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4043.400'
}
try:
resp = requests.get(url, headers=headers, proxies=proxies)
print(resp.text) # 成功访问
except Exception as err:
print(err)
'''
把链接改成https://www.baidu.com/时会报错,该错误仍未解决。
HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1108)')))
'''
- 点赞
- 收藏
- 关注作者
评论(0)