Python|爬取短视频

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

python是一种非常好用的爬虫工具。对于大多数的爬虫小白来说,python是更加简洁,高效的代码。今天就用实际案例讲解如何爬取动态的网站视频。

环境配置:python3:爬虫库requestjson模块,Pycharm

爬虫的一般思路:分析目标网页,确定url发送请求,获取响应解析数据—保存数据

爬取目标:方便看视频

解决方案

第一步:分析网页类型,获取爬虫参数

分析网页:通过查看网页源代码搜索当前网页的一段文字发现为空,说明网页为动态的网页。

获取参数:通过谷歌审查元素依次点击Network,XHR,Headers,找到需要的三个个头部信息use-agent,cookieurl以及headers参数。

第二步:模拟浏览器发送请求,获取响应数据

利用requestsget()向服务器发送请求

第三步:解析数据--json模块:把json字符串转换为python可交互的数据类型

转换数据:利用json进行转换,jsonpython的内置模块,json可以把json字符串转换为python可交互的数据类型。

获取数据:通过观察,title是视频名,url是视频地址,提取这两个数据,并再次访问获得的url,得到视频数据。

第四步:保存数据,保存在目标文件夹中

创建文件夹,写入获取的视频数据。

完整代码如下

import requests
 import json
 url = 'https://haokan.baidu.com/videoui/api/videorec?tab=gaoxiao&act=pcFeed&pd=pc&num=20&shuaxin_id=1584866887932'
 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36',
 'cookie': 'BAIDUID = 74DF3564617B2C9FA9D0468C96EA2D5B: FG = 1;BIDUPSID =  74DF3564617B2C9FA9D0468C96EA2D5B;PSTM = 1575894957;BDRCVFR[TfzreFuSob] =  mk3SLVN4HKm;delPer = 0;PSINO = 6;H_PS_PSSID =;BDORZ =  FFFB88E999055A3F8A630C64834BD6D0;BDSFRCVID = OV8sJeCCxG3HHcRuJgPnSaVvNIfB4Z1  - g_EP3J;H_BDCLCKID_SF = tR333R7oKRu_HRjYbb__ -  P4DHUjHfRO2X5REVh7CfPOkeqOJ2Mt5yMkS0loZKhOXLK6pLqrY5q_MoCDzbpnp05tpexbH55uetn  - f_U5;PC_TAB_LOG =  haokan_website_page;Hm_lvt_4aadd610dfd2f5972f1efee2653a2bc5 =  1584866867;Hm_lpvt_4aadd610dfd2f5972f1efee2653a2bc5 = 1584866869;reptileData  = % 7B % 22data % 22 % 3A %  2242da399b6855dc02a8c72001523e8685c0ec37b2f26178d68783bd941cca8e26e937dbe59953fb090211f372d6eb955dc20beb8396b045e5df4d725d5fedac7aaa415293534710428b39a3ce5851c795051c61beacdb88b1de6226323caf92f6a0c55a67f60dc0e50896f95dc05d54fa4803a75c5e3ba3751015d7b13e253544  % 22 % 2C % 22key_id % 22 % 3A % 2230 % 22 % 2C % 22sign % 22 % 3A %  22fd3d5c98 % 22 % 7D '}
 
 respons = requests.get(url,headers = headers)
 text = respons.text
 #print(respons.text)
 
 data = json.loads(text)#字典
 #print(data)
 list1=data['data']['response']['videos']
 #print(list1)
 
 for id in list1:
     print(id)
     video_title = id['title']
     video_url = id['play_url']
     print(video_title,video_url)
     print('下载')
     video_data =  requests.get(video_url,headers = headers).content
 
     with open('video\\' + video_title,'wb')  as f:
         f.write(video_data)
 print('完成')

 

结语

动态网页的爬取与静态网页的爬取是非常相似的,其中一个差异是不能直接确定url,而需从头部信息中去获取。本次案例中的网站,可以直接看到头部信息,但很多的视频网站的头部信息是无法查看的。需要其他一些手段。最后提醒大家爬虫程序规避网站经营者设置的反爬虫措施或者破解服务器防抓取措施,非法获取相关信息,情节严重的,有可能构成“非法获取计算机信息系统数据罪”。

END

编  辑   |   王楠岚

责  编   |   王   曦

 where2go 团队


   

微信号:算法与编程之美          

长按识别二维码关注我们!

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

发布了729 篇原创文章 · 获赞 57 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览