记录一次 Python 脚本爬虫实录

header

记录一次 Python 脚本爬虫实录

背景

之前(2018年),看到人民日报上面有一个特别好的国庆专题,是讲得国内各个省份的一分钟视频跟介绍的,就把那个公账号的地址给记录下来,并整理成了文章–这里是中国。最近,因为要用到其中一分钟系列的视频作为素材,想着就用脚本下载下来。
刚开始准备用 Chrome 的 snippte 来做的,但是发现,由于有 很多页面跳来跳去的,所以导致很多数据得不到跟获取失败。没办法,只能上大杀器—-爬虫鼻祖 Python

准备

软件条件:

数据条件:

  • 之前保存的公众号文章地址

过程

分析页面

首先分析页面数据,例如打开’https://mp.weixin.qq.com/s/3JnEJKr9UlgWGdstYsv3hg‘ 公众号地址。发现其中嵌套了一个 iframe ,里面有个腾讯视频的播放器。点击页面的腾讯视频图标,外跳到腾讯视频中来播放该视频,该视频的真是播放地址为https://v.qq.com/x/page/d0725d6whiw.html。可以看出整个地址的变量应该就是后面的d0725d6whiw.
大概思路整理如下:

  1. 使用 Python 脚本打开公众号页面,拿到视频地址
  2. 抓取视频地址并保存
  3. 使用 you-get 工具下载视频

爬取视频地址

由于之前已经有获取到每个公众号的地址了,现在这里只需要,通过 requests 包获取到网页内容,记得配置 headers 否则打不开公众号地址,然后通过正则匹配到视频地址的关键串,之后在进行拼接,把所得的结果写入一个文件中。整个流程就完成。

主要代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import requests
import re
import time

def save_file (content):
with open('video.txt', 'a', encoding='UTF-8') as f:
f.write(content+ '\n')

def get_html (url):
# url = 'https://mp.weixin.qq.com/s/3JnEJKr9UlgWGdstYsv3hg'
headers = {
'cookie': 'pgv_pvi=6411978752; pgv_pvid=5128749576; RK=RaiYKbaTXh; ptcz=923c6704cdc78e647be2740a43d8264a3dfba2c46c015a188bbca4c1156c4b33; _ga=GA1.2.1273698204.1594176548; rewardsn=; wxtokenkey=777; tvfe_boss_uuid=017df832425d807d; pgv_info=ssid=s1234604434; pgv_si=s9151318016',
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
result = requests.get(url,headers=headers)
return result.text

def parse_result(html):
pattern = re.compile(
'vid=(\w{11})',
re.S)
# items = re.findall(pattern, html)
data = re.search(pattern,html)
print(data.group(1))
return data.group(1)

def conect_url (id):
# https://v.qq.com/x/page/e07415ouyl2.html
return 'https://v.qq.com/x/page/'+ str(id) +'.html'


def main ():
array = ['https://mp.weixin.qq.com/s/3JnEJKr9UlgWGdstYsv3hg',
'https://mp.weixin.qq.com/s/Tba_AsVUDlh9pwqssugxLA',
'https://mp.weixin.qq.com/s/fDJWWLc5hNC7TUozqYNNRQ',
'https://mp.weixin.qq.com/s/FXTuwDmPTndO_ispQmwFUA',
'https://mp.weixin.qq.com/s/QN5sp-6c_t5Voa9Na4hJUg',
'https://mp.weixin.qq.com/s/ZLJO429hi9A2nBjqKoSDXw',
'https://mp.weixin.qq.com/s/fsGiEUvWlLG5hTuIXxu9Ew',
'https://mp.weixin.qq.com/s/wcnz_v49I9Uu4ZcpOnTywQ',
'https://mp.weixin.qq.com/s/W5CtrpAtlyMMZcdMaUx3yA',
'https://mp.weixin.qq.com/s/u1j4nIDPZQxieKFGioxQUg',
'https://mp.weixin.qq.com/s/1H-WTJNrz_ydLgH3n_JatQ',
'https://mp.weixin.qq.com/s/bH5Ip-7aAMscnjm6yJuROw',
'https://mp.weixin.qq.com/s/vEiAhSggFaqCxkYqCCRdFw',
'https://mp.weixin.qq.com/s/ZGwvIBFhgW6P4fOAjb4z9g',
'https://mp.weixin.qq.com/s/MEJzCmkK7fcCu5wixwrDGA',
'https://mp.weixin.qq.com/s/2SJvvkpC1S8U__WfpCS1nw',
'https://mp.weixin.qq.com/s/MJUU6VttxhrRo5WjZtYqJw',
'https://mp.weixin.qq.com/s/mpCx-FnqJZP8hvBHbbCBpg',
'https://mp.weixin.qq.com/s/CturocUYQtCf_Q_yOHM3eQ',
'https://mp.weixin.qq.com/s/O2KMaluN7Xg1vRReL9TJFg',
'https://mp.weixin.qq.com/s/9_yrOUTmpD68qlmpapiSYA',
'https://mp.weixin.qq.com/s/gCFxale2551ETk9IegBhSQ',
'https://mp.weixin.qq.com/s/LNkXVUJFCNUICdXzbEIbfQ',
'https://mp.weixin.qq.com/s/-uOAT-AQN1cGEmyBrh0BSg',
'https://mp.weixin.qq.com/s/x6MyukTK0eDt_5CdLJhmcw',
'https://mp.weixin.qq.com/s/GOSjnUj3smQsXuunKPJ_ww',
'https://mp.weixin.qq.com/s/rl5eg1Rds2FA2bGBX5ImSg',
'https://mp.weixin.qq.com/s/jyYWMAlcqChjiO2z8zUllQ',
'https://mp.weixin.qq.com/s/aKW8ZaPpFi3MAleaJVkzFg',
'https://mp.weixin.qq.com/s/7oMvbY4oEu1d0OTWW8VcmA',
'https://mp.weixin.qq.com/s/5E4qHPkxld_acANwYctZNw']
for item in array:
html = get_html(item)
id = parse_result(html)
video_url = conect_url(id)
print('video_url-->' + str(video_url))
save_file(video_url)
# time.sleep(3)

if __name__ == "__main__":
main()

下载视频

you-get

you-get 是一个 Python 写的下载工具,国内主流的网站都可以下载。不能破解 vip 视频哦,当然你要有 cookie 的话就可以下载,理论上,你看到什么就能下载什么。
安装方式: $ pip3 install you-get
更新方式: $ pip3 install --upgrade you-get

cookies

本文的获取 cookie 是使用的 Chrome 的插件 – cookies.txt。它可以导出 cookie 给其他程序使用。

下载命令:

1
$ you-get -o /Users/ruicky/Downloads/中国一分钟 -I /Users/ruicky/Downloads/video.txt --cookies /Users/ruicky/Downloads/cookies.txt

总结

通过简单的 Python 脚本就可以实现重复的劳动,果然强大如斯。但是也有一个问题需要考虑,通过 you-get 下载的视频即使携带了 cookie 了能够下载高清的视频,但是也是有水印的,这个怎么破呢?其实也有方法,那就是使用 Mac 下的一个好用方便的下载工具 Downie 4,自己亲测使用抓包的地址下载没有水印,完美解决问题,但是不能实行自动化 比较可惜。

-------------------本文结束 感谢您的阅读-------------------
坚持原创技术分享,您的支持将鼓励我继续创作!