做网站源代码,房子设计师怎么找,wordpress完全删除插件,怎么查询网站开发时间一、在B站上爬取一段视频#xff08;B站视频有音频和视频两个部分#xff09; 1、获取URL 注意#xff1a;很多平台都有反爬取的机制#xff0c;B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装#xff0c;下列图片中#xff08;注意代码书写格式#xff09; 3、Co…一、在B站上爬取一段视频B站视频有音频和视频两个部分 1、获取URL 注意很多平台都有反爬取的机制B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装下列图片中注意代码书写格式 3、Cookie 在上节课以及说了Cookie这个东西需要我们登录后的复制的才有用其需要在左侧找到web对应的页面找到如下图所示 4、防盗链 用来告诉服务器你请求链接是从哪里跳转过来的没有这个就无法成功。即使下载好后打开文件会显示无法播放 防盗链是指通过设置HTTP请求的Referer头字段来限制其他网站对自身网站资源的访问。在爬取数据时开发者可以在HTTP请求中添加Referer字段告知服务器请求的来源页面。服务器会检查Referer字段来判断请求是否来自合法的来源页面如果不合法服务器可能会拒绝该请求或返回错误信息。
而最上面第二张图里的红色框就是Referer将它复制过来就可以了
注意User-Agent、Cookie、Referer需要写在head里传入get请求属性内必须字母大小写完全一致
head{#UA伪装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/video/BV1Hm421g7Uk/?spm_id_from333.1007.tianma.10-1-35.click,#Cookie用户登录信息Cookie:buvid3380A54AC-1380-1A80-3501-B4D8CCABA7BF29897infoc; b_nut1720504429; _uuid13E92EE8-61F4-5115-D85B-AA5944A8C35D29991infoc; enable_web_pushDISABLE; buvid4D79928A9-BA71-3CF7-EF1B-C8E41318CF0731079-024070905-IYJQtQw8DTdtrI0uY1UGvQ%3D%3D; b_lsid1A3CF2B8_190D4BF05FC; bsourcesearch_bing; header_theme_versionCLOSE; CURRENT_FNVAL4048; bili_ticketeyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE4MTU0MTksImlhdCI6MTcyMTU1NjE1OSwicGx0IjotMX0.ExMDwTuyn9PYFV0sqW9gxFH4UDmKR-BkkgHHmOAIGls; bili_ticket_expires1721815359; sid8q9u9sec; home_feed_column5; browser_resolution1488-755; is-2022-channel1; rpdid|(Y|RJRl|k|0Ju~kullYJul; fingerprint3413b6ee321fed7d51121223b51b31f5; buvid_fp_plainundefined; buvid_fp3413b6ee321fed7d51121223b51b31f5} 5、content-type类型的查看 同样是在左侧web标签页下寻找可以发现当前页面是text类型 此处代码实现如下
import requestsif __name__ __main__:urlhttps://www.bilibili.com/video/BV1Hm421g7Uk/?spm_id_from333.1007.tianma.10-1-35.clickhead{#UA伪装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/video/BV1Hm421g7Uk/?spm_id_from333.1007.tianma.10-1-35.click,#Cookie用户登录信息Cookie:buvid3380A54AC-1380-1A80-3501-B4D8CCABA7BF29897infoc; b_nut1720504429; _uuid13E92EE8-61F4-5115-D85B-AA5944A8C35D29991infoc; enable_web_pushDISABLE; buvid4D79928A9-BA71-3CF7-EF1B-C8E41318CF0731079-024070905-IYJQtQw8DTdtrI0uY1UGvQ%3D%3D; b_lsid1A3CF2B8_190D4BF05FC; bsourcesearch_bing; header_theme_versionCLOSE; CURRENT_FNVAL4048; bili_ticketeyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE4MTU0MTksImlhdCI6MTcyMTU1NjE1OSwicGx0IjotMX0.ExMDwTuyn9PYFV0sqW9gxFH4UDmKR-BkkgHHmOAIGls; bili_ticket_expires1721815359; sid8q9u9sec; home_feed_column5; browser_resolution1488-755; is-2022-channel1; rpdid|(Y|RJRl|k|0Ju~kullYJul; fingerprint3413b6ee321fed7d51121223b51b31f5; buvid_fp_plainundefined; buvid_fp3413b6ee321fed7d51121223b51b31f5}#发送get请求responserequests.get(url,headershead)res_txtresponse.text#打印获取到的数据print(res_txt)
代码打印的结果为 如此便是正确的爬取到了视频网页的内容接下来便可以接着进行下一步 6、找到视频和音频地址 B站视频是和音频分开的所以需要我们额外去找点击F12后在第一条的响应里右边滚轮拖到最顶端找到这个界面 在这个标签下可以发现video 而video标签这里的baseUrl就是视频的地址继续下拉会发现这个audio这个标签这下面baseUrl存放的就是音频的地址 7、定位到需要内容页面
注意这一步的目的就是为了找到上面的视频和音频的baseUrl因为视频存放地址的代码基本在这个平台基本都是一致的所以为了爬取更多的B站的视频就需要快速定位到视频URL而不需要像上一点那样一条一条找每个视频的URL。
打开元素页面找到head标签下的第四个script标签这里存放的使我们需要的内容如下列图片其类似于上节课xpath所有的li标签的内容 有了这么多的数据就可以开始写代码了
首先我们获取到了res_txt内容那么便去用etree解析这段内容然后在对xpath返回的列表用join去除括号处理得到字符串然后前面那段window.__playinfo__内容我们不需要所以用索引去除去除后得到的是json大字符串可以将它转换成字典
#解析获取的数据
treeetree.HTML(res_txt)
#利用xpath找到视频地址
base_info.join(tree.xpath(/html/head/script[4]/text()))[20:]
print(base_info)
打印后得到的内容如下可以看出他是一个json字符串 然后用json.loads()将其转换成字典代码如下
#将json大字符串转换成字典类型然后通过键取值
video_urljson.loads(base_info)[date][dash][video][0][baseUrl]
audio_url json.loads(base_info)[data][dash][audio][0][baseUrl]
其中json.loads(base_info)是将base_info转化成字典的形式后面的[date][dash][video]则是字典的键而video键所对应的值为列表而我们所需要的videoUrl就在这个列表的第一个元素的字典里所以索引为0得到另一个字典另一个字典中的[baseUrl]则对于我们所需要的video_url具体可通过下图来直观解释 同样可以通过这个方法找到音频的URL然后在通过这些URL发送get请求得到音频和视频的二进制编码再将这些编码写入文件即可得到视频文件和音频文件其后缀名都为mp4格式如下代码即可获取视频和音频的全部二进制数据
#将json大字符串转换成字典类型然后通过键取值得到音频和视频的URL
video_urljson.loads(base_info)[date][dash][video][0][baseUrl]
audio_url json.loads(base_info)[data][dash][audio][0][baseUrl]#发送get请求获取音频和视频的数据
video_rerequests.get(video_url,headershead)
audio_rerequests.get(audio_url,headershead)video_convideo_re.content
audio_conaudio_re.content
然后再创建mp4文件将这些数据存放进去即可完成视频爬取后期在通过音视频合成工具将两个内容合并即可
with open(./video.mp4,wb) as f:f.write(video_con)with open(./audio.mp4,wb) as fp:fp.write(audio_con)
点击运行以后即可在左侧文件夹中找到两个mp4音视频文件
需要在当前代码存放文件夹内打开而不是再pycharm编译器内打开