python学习笔记之爬虫(三) requests进阶丨【生长吧!Python】

举报
菜鸟级攻城狮 发表于 2021/07/06 20:57:00 2021/07/06
【摘要】 python学习笔记之爬虫(三) requests进阶

第三章requests进阶

### 第三章 ###
''' requests进阶概述 '''
'''


我们在之前的爬虫中其实已经使用过headers了,headersHTTP协议中的请求头,
一般存放一些和请求内容无关的数据,有时也会存放一些安全验证信息,
比如厂家你的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

''' 代理 '''

一般匿名度为透明的都可以用。
站大爷免费代理IPhttps://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)')))
'''

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。