Python|爬取短视频

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

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

问题描述

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

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

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

爬取目标:方便看视频

解决方案

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

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

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

Python|爬取短视频

Python|爬取短视频

Python|爬取短视频

Python|爬取短视频

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

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

Python|爬取短视频

Python|爬取短视频

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

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

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

Python|爬取短视频

Python|爬取短视频

Python|爬取短视频

Python|爬取短视频

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

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

Python|爬取短视频

Python|爬取短视频

完整代码如下

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 团队


   

微信号:算法与编程之美          

Python|爬取短视频

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

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