某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

最近因为毕设,比较忙,所以最近估计一周最多两三更,希望大家见谅。

但是我觉得再忙也需要给自己安排一点娱乐时间,对自己好点,自己对自己不好,谁会?

自己娱乐一般会有:跑步、看电影、小视频,而小视频是最家常的娱乐方式,看得最多的小视频是「 陈翔六点半 」,咦

拍得搞笑,演技也一流,也不乏有内涵!非常推荐大家看看。

但我不推荐大家用「抖音」看短视频,因为它的算法实在太强大了、内容也非常抓人性!一入抖音深似海,从此时间是狗屎!

因此我推荐大家到「微信看一看」、「QQ空间、「微博」里去瞧一瞧,最推荐是「微博」,但千万别花太多时间,也出于不要浪费太多时间去翻各种页,看一些原本自己没有打算看的信息,因为这些平台的算法真的是太了解我们自己,99% 的人都比不过它了解我们自己,数据的价值被这些平台利用得淋漓尽致,因此我这次去爬视频,数据是微博的,让我自己不要花太多时间在搜索,浏览或者观看一些对自己没多大意义的信息数据,让自己想看哪些小视频就只看哪些小视频,仅此而已。

时间太贵,我耗不起

正题

先上爬取小视频的效果图,duang、duang、duang、想下载什么就是什么,哈哈。

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

随便插的一张图,你们想啥呢!真的是,哈哈哈 好了 正文来了!

进群:548377875    即可获取数十套PDF哦!此项目的源码请私信!

打开浏览器(电脑版,方便调试)输入微博 url :https://m.weibo.cn,点击输入框,输入「陈翔六点半」,回车搜索

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

但是发现在这个页面就只用几个视频。滑下一点,一看,有个「更多热门微博」,点击!

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

跳转到新页面,一看,一滑,就像一个无底洞!一直滑都会有视频!

咦,这不就是我要的视频数据嘛

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

仔细看地址,不知大家有没仔细看地址栏,我滑动时,地址是一直不变的,也就证明这网页是用 Ajax 来异步请求加载数据的!

我就马上按 F12 调出调试工具,点击 Network 选项卡,选中 XHR ,一边滑动网页,一边查看 Ajax 网络请求,选中一条查看

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

展开 Json 数据查看,可以看到每条视频微博数据,总供有十条

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

我想下载视频,如何快速找到视频的下载地址而不是每一个数据点开来看呢?我想想能不能借助了谷歌浏览器的忙。

随便点开其中一个视频,右键,竟然可以查看并复制视频链接

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

复制到视频链接后,贴到地址栏,回车访问,也能播放,大喜呀!

马上回到调试工具,点击 preview 预览数据,按 Ctrl + F 进行搜索,把刚刚复制的地址贴到搜索框

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

咦,竟然匹配到了!

发现 media_info 中的 stream_url 就是该视频的播放地址,也就是下载地址。再往前看,media_info 前面的 content2 是视频的在微博中的标题。

查看其他的 Json 数据也同样有视频地址和标题,复制里面的 视频地址 url 贴到浏览器地址栏也能直接播放视频!八九不离十,这个 stream_url 就是视频下载地址了

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

马上构造请求,根据刚刚复制的视频地址获取资源,并下载视频,看看有没有什么端倪,此时心中忐忑不安

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

1import requests
2
3resp = requests.get('https://f.us.sinaimg.cn/001OrLM5gx07nuJQItKM01040200fJQ20k010.mp4?label=mp4_ld&template=640x360.27&Expires=1536498737&ssig=vhkO6zIdV0&KID=unistore,video')
4with open('text.mp4','wb') as file:
5 file.write(resp.content)
6 print('下载完成')

很快就下载好了

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

点击播放视频,竟然毫无毛病,流畅播放!这下好了!就 kuang、kuang、kuang 准备开始撸代码了,不要怂,就是干!

认真查看请求地址、请求头中的请求地址,请求方法和 User—Agent 等,开始构建请求方法模拟 Ajax 请求,获取 Json 数据。

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

 1# 请求页面
 2def get_page(page_index):
 3 base_url = 'https://m.weibo.cn/api/container/getIndex?'
 4 # 如果不是非常清楚字典和确定 url 编码,不要使用字典方式构造 url 参数,
 5 # 建议直接用字符串构造
 6 # 构造好后,一步步删去非必要参数
 7 # 确定好后,在把一些变化的参数,换成变量
 8 params = 'containerid=100103type=60' 
 9 '&q=陈翔六点半' 
10 '&luicode=10000011' 
11 '&page=' + str(page_index)
12 # 构建请求头,不然会被禁
13 header = {
14 "User - Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) +
15 AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 68.0.3440.106Safari / 537.36",
16 "X - Requested - With": "XMLHttpRequest",
17 "Accept": "application/json, text/plain, */*",
18 }
19
20 # 注意 quote 不要对 = url编码,不然和原来的请求 url 不一致,会返回没有内容
21 url = base_url + quote(params, '=')
22 try:
23 resp = requests.get(url, headers=header)
24 if(resp.status_code==200):
25 # 获取到的是 json 格式数据,直接用 json 方法解析并返回 json 对象
26 return resp.json()
27 except requests.ConnectionError as e:
28 print("连接错误:" + e.args)

查看多几次异步请求,就会发现,变化的参数只有 page,可以一步步把一个参数删掉后测试一下能不能正常获取数据,这样把一些非不要的参数剔除。里面有一些注释,是我踩过的坑

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

,有兴趣就多看几眼

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

,希望各位看客能分享一下(在下方留言)在 python 爬虫上入过的一些坑,让彼此少躺枪!

获取到了页面后,构建方法解析 Json 数据,分析 Json 数据中的层级结构,把里面的视频名和视频下载地址提取出来。

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

这里有个快捷查出 stream_url 层级结构路径,选中该属性或者说节点,右键,copy property path

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

再粘贴到浏览器地址栏查看即可清晰知道它们之间的层级结构

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

 1# 解析 json 数据
 2def parse_page_get_name2url(resp_json_obj):
 3 # 对着所在 key 右键,选择 copy property path
 4 # data.cards[""0""].card_group[""0""].mblog.page_info.media_info.stream_url
 5
 6 name2url = []
 7 length = len(obj_json['data']['cards'][0]['card_group'])
 8 for index in range(0, length):
 9 # 推荐这种取值方式,json 对象在 python 中其实是字典(dict)类型。
10 # 此中方式取值方便,但假如键有误,则会抛异常
11 page_info = obj_json['data']['cards'][0]['card_group'][index]['mblog']['page_info']
12
13 # 此中方式取值繁琐,但能避免抛异常
14 # data = obj_json.get('data', None)
15 # cards = data.get('cards', None)
16 # card_groups = cards[0].get('card_group', None)
17 # mblog = card_groups[0].get('mblog', None)
18 # page_info = mblog['page_info']
19
20 media_name = page_info['content2']
21 media_url = page_info['media_info']['stream_url']
22 # 追加到数组中
23 name2url.append({media_name: media_url})
24 return name2url

面对这种多层 json 格式数据,我知道有上面两种取值方式,代码中也说明了各的优势和缺点,按需选取。如果你还有更优雅的方式,希望你能在下方留言

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

提取到视频的标题和下载地址后,简单改一下前面的下载方法,来适应一下

1# 下载视频
2def download_video(filename, url):
3 resp = requests.get(url)
4 with open(filename + '.mp4', 'wb') as file:
5 file.write(resp.content)
6 print(filename, '下载完成')

之后在,主函数中循环、遍历调用前面的方法,就下载指定到多少页的视频了

 1if __name__ =='__main__':
 2 # 指定到多少页
 3 pages = 2
 4 for page in range(1, pages+1):
 5 obj_json = get_page(page)
 6 name2urls = parse_page_get_name2url(obj_json)
 7 print(name2urls)
 8 for name2url in name2urls:
 9 for (name, url) in name2url.items():
10 download_video(name, url)

嗨皮时刻,效果如下

某个网站居然要冲VIP!限制访问?利用Python爬取最爱看的小电影

上面的代码中还有许多需要优化之处,比如下载时重名怎么办、各种参数的有效性判断等等,后面我也会优化一下,把它优化成:只用要用户输入自己喜欢的小视频制作方,如「 陈翔六点半」,再指定想看多少个视频或者多少页,后就自动下载视频,下载好了,就可以嗨皮娱乐一波了。关键是自己省很多时间,不得不像那些优秀的算法和大数据屈服

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/82807183
今日推荐