10请求头反爬

反爬处理

爬虫:使用技术手段去批量的获取网上的数据

反爬:使用技术手段,阻止别人获取自己网站上的数据

反反爬:使用技术手段 绕过对方反爬策略

请求头反爬

User-Agent:在HTTP请求的请求头里面的一个字段,用来表明。请求的客户端是什么,不同的浏览器会有不同的User-Agent。我们之前处理这种反爬的方式就是在浏览器里面直接复制比较麻烦。python当中会有一个第三方模块,帮我们更快的获取User-Agent。fake_useragent

import requests
# pip install fake_useragent
from fake_useragent import UserAgent

# 随机生成一个UA,存在浏览器版本不兼容的问题
ua = UserAgent()
headers = {
    'User-Agent': ua.random
}
response = requests.get('https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA', headers=headers)
print(response.text)

Referer:表明当前这个请求是从哪个url过来的。这个一般也可以用来做反爬虫技术。如果不是从指定页面过来的,那么就不做相关的响应。

import requests
from fake_useragent import UserAgent
from lxml import etree

# 1. 是给列表页发送请求
url = 'https://www.pearvideo.com/popular'
headers = {
    "user-agent": UserAgent().random
}
response = requests.get(url, headers=headers)
html = response.text
# 2. 在列表页里面html代码当中 解析详情页面url
html = etree.HTML(html)

lis = html.xpath('//ul[@id="popularList"]/li')
for li in lis:
    # 3. 我们发现详情页面当中是没有我们要的数据的
    d_url = li.xpath('./div[@class="popularem-ath"]/a/@href')[0]
    name = li.xpath('./div[@class="popularem-ath"]/a/h2/text()')[0]
    contId = d_url.split('_')[1]
    # 4. 获取我们视频对应的url是在这个链接上
    # 4.1 当我们给这个链接发送请求的时候, 发现获取不到我们要的数据
    # 4.2 因为在发送这个请求的时候 后端判断了我们请求头当中的Referer这个字段
    # 防盗链 表明的是我们发送这个请求之前是在那个url上
    json_url = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}&mrd=0.4479471535100221"
    detail_url = f'https://www.pearvideo.com/{d_url}'
    detail_headers = {
        "user-agent": UserAgent().random,
        "Referer": detail_url
    }
    json_response = requests.get(json_url, headers=detail_headers).json()
    systemTime = json_response['systemTime']
    srcUrl = json_response['videoInfo']['videos']['srcUrl']
    video_url = srcUrl.replace(systemTime, f'cont-{contId}')
    print(name, video_url)
    with open(f'{name}.mp4', 'wb') as f:
        f.write(requests.get(video_url).content)
    print(f'{name}.mp4-下载完成')
    print('-' * 100)

Cookie:对应的是一个用户的信息,cookie是会有过期时间的。遇到了我们直接更换cookie值就可以了。

posted @   LePenseur  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示