微信公众号文章内的视频下载

  • A+
所属分类:Python

爬取步骤:

第一步:获取文章链接

第二步:将链接放到硕鼠里面解析,获取视频下载地址

文章链接直接使用默认浏览器打开文章,然后复制链接即可

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逆向和解决动态加载的爬虫资料或者课程,目前卡死在这里了。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin