默不言 发表于 2022-1-26 21:49

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

本帖最后由 默不言 于 2022-1-26 21:54 编辑


# 爬取步骤:

  第一步:获取文章链接

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

## 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

  

  硕鼠解析可以直接返回得到文章内的视频下载链接,根据获得的链接进行视频下载即可。

  代码

```python
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)#获取title
      # print(title)
      regex_href = re.compile(r'href="(.*?)"', re.S)
      href = re.findall(regex_href, soup)#获取视频下载地址
      # 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逆向和解决动态加载的爬虫资料或者课程,目前卡死在这里了。**

默不言 发表于 2022-1-27 19:51

a2523188267 发表于 2022-1-27 00:16
对公众号里的某篇里的所有链接能批量抓取下载吗

可以先试试硕鼠能不能把所有的视频链接都解析出来,可以的话就可以做到,只是需要更改下代码而已

默不言 发表于 2022-1-27 19:35

lzspain 发表于 2022-1-27 08:55
电脑上在安装有idm插件的浏览器打开网址,手机上在具有视频获取功能的浏览器(IDM下载器自带浏览器)上打开 ...

一两个视频无所谓,但是我需要下载几百个{:1_923:}

simon21 发表于 2022-1-26 23:17

先收藏了!~期待下次看到你的解题~~
因为我也有这个烦恼。。。

又要取名字 发表于 2022-1-26 23:51

a2523188267 发表于 2022-1-27 00:16

对公众号里的某篇里的所有链接能批量抓取下载吗

CCQc 发表于 2022-1-27 00:45

感谢分享

吾爱蛋蛋 发表于 2022-1-27 00:56

我想爬自己的微信视频怎么爬用电脑微信版本

wecanfly9292 发表于 2022-1-27 06:26

没有看懂怎么使用

东方天涯 发表于 2022-1-27 07:48

istat 发表于 2022-1-27 07:50

东方天涯 发表于 2022-1-27 07:48
不需要硕鼠啊,很多在线插件都能做到

比如呢哈哈

ysy2001 发表于 2022-1-27 08:00

没有看懂,谢谢分享。
页: [1] 2 3 4
查看完整版本: 微信公众号文章内的视频下载