爬取步骤:
第一步:获取文章链接
第二步:将链接放到硕鼠里面解析,获取视频下载地址
1.获取文章链接
文章链接直接使用默认浏览器打开文章,然后复制链接即可
2.使用硕鼠解析链接
将链接放到硕鼠里面进行解析,然后对比文章的链接和硕鼠解析访问的链接,找到其中部分的内容替换公式。(因为硕鼠解析访问的链接对“=”,“\”等符号进行了转换,所以需要先将其规律找到,然后构造替换关系式。
替换公式:
文章链接:https://mp.weixin.qq.com/s?__biz=MzIwMzc3MjYzOQ==&&mid=2247613073&&idx=1&&sn=e9307ab0ff93f760eb49a747499881e5&&chksm=96c93d21a1beb4370948aa2ba2fc00c3dac50177f7a5a3577a52fc20cfbed390297bc0bbb19d&&scene=21#wechat_redirect
硕鼠解析访问的链接:https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIwMzc3MjYzOQ%3D%3D%26amp%3Bmid%3D2247613073%26amp%3Bidx%3D1%26amp%3Bsn%3De9307ab0ff93f760eb49a747499881e5%26amp%3Bchksm%3D96c93d21a1beb4370948aa2ba2fc00c3dac50177f7a5a3577a52fc20cfbed390297bc0bbb19d%26amp%3Bscene%3D21%23wechat_redirect
/ —> %2F
: —> %3A
?—> %3F
= —> %3D
& —> %26
;—> %3B
—> %23
硕鼠解析可以直接返回得到文章内的视频下载链接,根据获得的链接进行视频下载即可。
代码
import os
import re
from time import sleep
import requests
from fake_useragent import UserAgent
import random
from bs4 import BeautifulSoup
def download_url(url):
try:
path = os.getcwd()#获取当前的文件位置
filepath = path + '\\视频'
if os.path.exists(filepath) == False:#判断是否存在filepath,不存在则创建文件夹
os.mkdir(filepath)
URL = 'https://www.flvcd.com/parse.php?format=&kw=' + str(url).replace('/', '%2F').replace(':', '%3A').replace(
'?', '%3F').replace('=', '%3D').replace('&', '%26').replace(';', '%3B').replace('#', '%23')#构造硕鼠的解析链接
# print(URL)
headers = {'UserAgent': 'str(UserAgent).random'}
response = requests.get(URL, headers=headers)
response.encoding = 'gbk'
# print(response.text)
soup = BeautifulSoup(response.text, 'html.parser')
soup = str(soup)
regex_title = re.compile(
r'document.title = "(.*?)" ')
title = re.findall(regex_title, soup)[0]#获取title
# print(title)
regex_href = re.compile(r'href="(.*?)"', re.S)
href = re.findall(regex_href, soup)[9]#获取视频下载地址
# print(href)
video_response = requests.get(href, headers=headers)
print('正在下载{},请稍后。。。。。。'.format(title))
with open(filepath + f'\\{title}.mp4', mode='wb') as f:
f.write(video_response.content)
sleep(10)
print('下载完成!!!')
except:
print(f'下载失败,请确认该文章内含有视频,失败链接是:{url}')
if __name__ == '__main__':
url = 'http://mp.weixin.qq.com/s?__biz=MjM5MDMyMzMxMg==&mid=2247687337&idx=5&sn' \
'=efd74900ff01a778bb0a879a2c6dda30&chksm' \
'=a64adbb6913d52a0908e5ae580ae7f3aa7bbb4b32a2271d7a9e9b7875af84362a2c247479125&scene=21#wechat_redirect '
download_url(url)
一开始以为直接使用python获取文章的网页源代码可以直接获取视频的下载链接,但是返回的结果并没有出现,仔细看代码才知道采用了动态加载视频,所以想要直接获取是不现实的。奈何我是一个小白,本来想就此放弃,但是想到要下载的视频有好几百个,一个一个打开然后再用IDM下载,人都会麻了。在网上找了很多方式都没解决,还好最后发现硕鼠可以解析(硕鼠牛逼),就尝试着构造访问硕鼠的方式获取下载视频。
上面的代码针对的是单个视频,需要批量的可以自己更改一下代码就行。
ps:有没有大佬推荐下怎么学习js逆向和解决动态加载的爬虫资料或者课程,目前卡死在这里了。