Python爬虫:(亲测,已解决!)解决在使用谷歌浏览器的开发者工具时,没有Referer防盗链缺失问题。

今天,我在做Python网络爬虫时(web spider),正在爬取哔哩哔哩的某一个视频,发现一个致命问题,就是单纯在headers中加入UA(user-Agent)是不够的,也就是说,我的爬虫没有足够的权限全访问此网站,所以,我的headers还少了一些东西。

headers = {
    #'Accept-Encoding':'',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}

  我首先想到的是Referer防盗链,简单的来说,防盗链就是告诉哔哩哔哩的服务器,我是从哔哩哔哩官网跳转过来的,而不是从别的地方跳转,所以,以此来蒙掉哔哩哔哩服务器,以便获取数据。

但我,找了一圈后,却并没有找到Referer防盗链,这下可就尴尬了,到是多了一些之前从未见过的数据

例如:

  1. sec-ch-ua:

    "Chromium";v="21", " Not;A Brand";v="99"

  2. sec-ch-ua-mobile:

    ?0

  3. sec-ch-ua-platform:

    "Windows

所以我怀疑,我的浏览器已经更新了,或者发生了其他错误,将我的Referer给弄没了,但其实,Referer还存在,只是我们看不到而已,所以,现在的问题,就成了

                                如何将Rederer重新显示出来

于是,我查阅了大量资料,观看了大量的CSDN的文章,总结出以下一点好用的方法:

1.在html的head标签中加入:

<meta name="Referrer" content="origin" />

那么我,问题又来了,我该怎么加?

一开始我毫无思绪,烦躁不已,但我当我冷静后,重新审视这个问题,我终于明白这其中奥妙。

那么,接下来,请跟着我的步骤走下去,慢慢的走,不要心急,慢慢揭开那神秘的面纱。

1。选择你要爬取的页面或者视频,在空白处右键,选择“查看网页源代码”(不同浏览器,这里会不一样。)

2.打开后,在鼠标右键,选择“网页另存为”,这样,我们在电脑中获得了一个以“.html”为后缀的html代码

3.更改后缀,将后缀".html"更改为“.txt”,以便我们添加<meta name="Referrer" content="origin" />

4.打开改好的文档。注意!!,一定要在<head>标签中加入<meta name="Referrer" content="origin" />,我们以下面某页面源代码为例:

<!-- saved from url=(0086)https://www.bilibili.com/video/BV1oY411p7Yr?vd_source=b305ecdc9ae3bd6e7c27b55794f9edd9 -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><div class="line-gutter-backdrop"></div><form autocomplete="off"><label class="line-wrap-control">自动换行<input type="checkbox" aria-label="自动换行"></label></form><table><tbody><tr><td class="line-number" value="1"></td><td class="line-content"><span class="html-doctype">&lt;!DOCTYPE html&gt;</span><span class="html-tag">&lt;html <span class="html-attribute-name">lang</span>="<span class="html-attribute-value">zh-Hans</span>"&gt;</span><span class="html-tag">&lt;head <span class="html-attribute-name">itemprop</span>="<span class="html-attribute-value">video</span>" <span class="html-attribute-name">itemscope</span> <span class="html-attribute-name">itemtype</span>="<span class="html-attribute-value">http://schema.org/VideoObject</span>"&gt;</span><span class="html-tag">&lt;meta <span class="html-attribute-name">name</span>="<span class="html-attribute-value">format-detection</span>"

我们需要在head标签中加入<meta name="Referrer" content="origin" />

所以,更改为以下形式:

<!-- saved from url=(0086)https://www.bilibili.com/video/BV1oY411p7Yr?vd_source=b305ecdc9ae3bd6e7c27b55794f9edd9 -->
<html><head><meta name="Referrer" content="origin" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><div class="line-gutter-backdrop"></div><form autocomplete="off"><label class="line-wrap-control">自动换行<input type="checkbox" aria-label="自动换行"></label></form><table><tbody><tr><td class="line-number" value="1"></td><td class="line-content"><span class="html-doctype">&lt;!DOCTYPE html&gt;</span><span class="html-tag">&lt;html <span class="html-attribute-name">lang</span>="<span class="html-attribute-value">zh-Hans</span>"&gt;</span><span class="html-tag">&lt;head <span class="html-attribute-name">itemprop</span>="<span class="html-attribute-value">video</span>" <span class="html-attribute-name">itemscope</span> <span class="html-attribute-name">itemtype</span>="<span class="html-attribute-value">http://schema.org/VideoObject</span>"&gt;</span><span class="html-tag">&lt;meta <span class="html-attribute-name">name</span>="<span class="html-attribute-value">format-detection</span>"

5.更改好后,在将文档后缀更改为html,双击运行后即可。

这样当我们在回到我们要爬取的页面时,在按F12打开开发者工具时,在找到我们的数据包,即可发现,Referer就出现了。

那么,当我加上Referer后,我的爬虫代码也就通过了,什么,你想看我爬哔哩哔哩的爬虫的代码??        满足你!

import requests

import re

import json

import pprint

import os

filename = '哔哩哔哩//'
if not os.path.exists(filename):
    os.makedirs(filename)
url = 'https://www.bilibili.com/video/BV1oY411p7Yr?vd_source=b305ecdc9ae3bd6e7c27b55794f9edd9'

headers = {
    #'Accept-Encoding':'',
    'Referer': 'https://www.bilibili.com/video/BV1oY411p7Yr?vd_source=b305ecdc9ae3bd6e7c27b55794f9edd9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}

response = requests.get(url=url,headers=headers).text
#print(response)

#数据解析:

html_data = re.findall('<script>window.__playinfo__=(.*?)</script>',response)[0]
#获取标题
title = re.findall('<title data-vue-meta="true">(.*?)i</title>',response)[0]
#print(html_data)

json_data = json.loads(html_data)
#print(json_data)

pprint.pprint(json_data)

audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
print(audio_url)
print(video_url)

response2 = requests.get(url=audio_url,headers=headers).content
response3 = requests.get(url=video_url,headers=headers).content

with open(filename+title+'.mp3',mode='wb') as f:
    f.write(response2)
with open(filename+title+'.mp4',mode='wb') as f:
    f.write(response3)
print("爬去完成!")

最后,如果,本文章有帮到你,那么请你送我一个免费的赞,好么QWQ(打字不易)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值