中小企业建网站,wordpress的分享插件下载地址,seo顾问是啥,3733手游网站在哪里做的文章目录 爬虫爬取视频指定url发送请求UA伪装请求页面 获取想要的数据解析定位定位音视频位置 存放视频完整代码实现总结 爬虫
Python 爬虫是一种自动化工具#xff0c;用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持#xff08;如 requ… 文章目录 爬虫爬取视频指定url发送请求UA伪装请求页面 获取想要的数据解析定位定位音视频位置 存放视频完整代码实现总结 爬虫
Python 爬虫是一种自动化工具用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持如 requests、BeautifulSoup、Scrapy 等而成为实现爬虫的首选语言之一。
Python爬虫获取浏览器中的信息实际上是模仿浏览器上网的行为。上一篇中我们尝试着爬取了一个网站页面的图片内容完成获取信息需要完成四步
指定url发送请求获取你想要的数据数据解析
这次我们来试试用同样的方法爬取网站页面的视频看看可以成功吗
爬取视频
我们来试试爬取以下网页的视频
https://www.bilibili.com/video/BV12z421z75d/?spm_id_from333.1007.tianma.2-1-4.clickvd_source4b1ef23e5d47e143cfb702705740719d指定url
打开开发者控制台找到页面的url
url https://www.bilibili.com/video/BV12z421z75d/?spm_id_from333.1007.tianma.2-1-4.clickvd_source4b1ef23e5d47e143cfb702705740719d发送请求
在前前面的内容中我们提到过使用fake_useragent包进行UA伪装给自己一个访问身份其实在页面中有给我们准备好的UA只是使用fake_useragent包更方便这次我们爬取视频用页面给的UA。
UA伪装
同时对于视频的爬取网站都是有很强的反爬取能力所以我们除此以外还需要在申请访问页面时输入Referer防盗链以及Cookie身份信息记得登录网站哦 和找寻url时一样在同一个页面往下滑就能找到页面给的Cookie身份信息。
接着往下滑 同样的找到Referer防盗链和页面给的UA。
head {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0# 防盗链, Referer: https://www.bilibili.com/ # 网页自带的防盗链我们告诉它从哪里向网页发送的请求,Cookie: buvid3C05B40CB-6A34-98BA-39D6-53A15FB1331D09014infoc; b_nut1721443209; b_lsid7E252C23_190CE02D1EA; bsourcesearch_bing; _uuid2A4DF7DB-1415-18110-810D10-61B6E716441309713infoc; enable_web_pushDISABLE; header_theme_versionundefined; bmg_af_switch1; bmg_src_def_domaini1.hdslb.com; buvid_fp4737552723e0dc057e8798fde01861bc; buvid48B3D0C60-C137-8D41-1DA5-4FB60839F89009729-024072002-402qiK5%2F0O1ew%2BiXfV11Kg%3D%3D; home_feed_column5; browser_resolution1872-966; CURRENT_FNVAL4048; bili_ticketeyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE3MDI0MjksImlhdCI6MTcyMTQ0MzE2OSwicGx0IjotMX0.rVZ9CiFYg3l5zrKtSm5jk880b2vYdADHdnTpO64kMog; bili_ticket_expires1721702369; rpdid|(J|)|~~|YYl0Ju~kuRRJkRu; SESSDATAfd47394e%2C1736996380%2C3b724%2A71CjCpXPh-TmqNj96oUDW0altJZ6Iw84xOinBCAAhuZ1G-wxw0FFQR-j2_HvZPJtNgLl0SVmRDc2R6RWg3azBMUzVnVklNRGxBSGVXbWZiT2FydVNZVjM2MU1sQzkzQ3ZYMlNwLTdteUFQby0tWjlSaS1oWkVnbXVfRE8zOEd4VEFQbkNFNktMMVNRIIEC; bili_jct643bc60a12be959fcaf2a7435e37b218; DedeUserID152019087; DedeUserID__ckMd5abf7b9e65385947c; sid5voxt773
} #自己的网页登录信息将页面给的UA、Referer防盗链和Cookie身份信息都放在head中。
请求页面
response requests.get(url, headershead)获取想要的数据
我们在爬取图片时我们在寻找图片的地址那我们视频的位置在哪里怎么获取呐 第一步点击Element,第二部找到html标签在该标签下找到第四个script标签。如下 这里面就是我们要获取的视频信息啦前20个字符不需要。
解析定位
from lxml import etree
tree etree.HTML(res_text)
base_info .join(tree.xpath(/html/head/script[4]/text()))[20:] #前20个字符我们不要
#print(base_info) #可以打印看看有没有获取数据我们看到视频信息看到的是字典形式但是获取信息时返回的是字符串形式我们要将其转换一下
info_dict json.loads(base_info) #将获取到的数据变成字典形式因为b站的视频视频和音频时分开的所以我们得从信息中分别定位到视频和音频位置。但是这个信息密密麻麻的看起来很不方便我们去响应Response中寻找它 打开响应Response然后找到第四个script标签我们能看到有个video标签获取音频url同样的在第四个script标签下面还有audio视频url。
定位音视频位置
这样我们对视频与音频的位置进行访问记住获取的数据已经被转换成字典了
#字典的取值是通过取健的位置得到值
以下代码理解为在data中取dash的值然后再dash的值中取video的值………………最后取到音视频url
video_url info_dict[data][dash][video][0][baseUrl]
audio_url info_dict[data][dash][audio][0][baseUrl]video_content requests.get(video_url, head).content #和图片一样访问后用content接收存储
audio_content requests.get(audio_url, head).content存放视频
with open()可以自己创建文件存放。
with open(video.wmv, wb) as f:f.write(video_content)
with open(audio.mp4, wb) as fp:fp.write(audio_content)完整代码实现
import json
import fake_useragent
import requests
from lxml import etreeif __name__ __main__:head {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0# 防盗链, Referer: https://www.bilibili.com/ # 网页自带的防盗链我们告诉它从哪里向网页发送的请求,Cookie: buvid3C05B40CB-6A34-98BA-39D6-53A15FB1331D09014infoc; b_nut1721443209; b_lsid7E252C23_190CE02D1EA; bsourcesearch_bing; _uuid2A4DF7DB-1415-18110-810D10-61B6E716441309713infoc; enable_web_pushDISABLE; header_theme_versionundefined; bmg_af_switch1; bmg_src_def_domaini1.hdslb.com; buvid_fp4737552723e0dc057e8798fde01861bc; buvid48B3D0C60-C137-8D41-1DA5-4FB60839F89009729-024072002-402qiK5%2F0O1ew%2BiXfV11Kg%3D%3D; home_feed_column5; browser_resolution1872-966; CURRENT_FNVAL4048; bili_ticketeyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE3MDI0MjksImlhdCI6MTcyMTQ0MzE2OSwicGx0IjotMX0.rVZ9CiFYg3l5zrKtSm5jk880b2vYdADHdnTpO64kMog; bili_ticket_expires1721702369; rpdid|(J|)|~~|YYl0Ju~kuRRJkRu; SESSDATAfd47394e%2C1736996380%2C3b724%2A71CjCpXPh-TmqNj96oUDW0altJZ6Iw84xOinBCAAhuZ1G-wxw0FFQR-j2_HvZPJtNgLl0SVmRDc2R6RWg3azBMUzVnVklNRGxBSGVXbWZiT2FydVNZVjM2MU1sQzkzQ3ZYMlNwLTdteUFQby0tWjlSaS1oWkVnbXVfRE8zOEd4VEFQbkNFNktMMVNRIIEC; bili_jct643bc60a12be959fcaf2a7435e37b218; DedeUserID152019087; DedeUserID__ckMd5abf7b9e65385947c; sid5voxt773} #自己的网页登录信息# 1、urlurl https://www.bilibili.com/video/BV12z421z75d/?spm_id_from333.1007.tianma.2-1-4.clickvd_source4b1ef23e5d47e143cfb702705740719d#2、发送请求response requests.get(url, headershead)# 3、获取想要的数据res_text response.text# 4、数据解析tree etree.HTML(res_text)with open(b.html, w, encodingutf8) as f:f.write(res_text)base_info .join(tree.xpath(/html/head/script[4]/text()))[20:] #前20个字符我们不要# print(base_info)info_dict json.loads(base_info) #将获取到的数据变成字典形式#定位音视频位置video_url info_dict[data][dash][video][0][baseUrl]audio_url info_dict[data][dash][audio][0][baseUrl]video_content requests.get(video_url, head).contentaudio_content requests.get(audio_url, head).contentwith open(video.wmv, wb) as f:f.write(video_content)with open(audio.mp4, wb) as fp:fp.write(audio_content)爬取成功显示 查看视频去文件夹中打开查看由于音视频是分开的可以通过剪映等视频剪辑软件将他们拼接在一起。
总结
本篇介绍了网页视频的爬取
指定url发送请求 UA伪装UA、Referer防盗链和Cookie身份信息都放在head中 获取你想要的数据 在Element获取视频信息 数据解析 在响应Response中定位视频的具体位置请求访问它
特别注意
其实与爬取文本和图片区别不大主要是定位到视频的位置。
网页都有反爬虫意识反复多次爬取可能会拒绝你获取信息。