精华内容
下载资源
问答
  • 本文实例为大家分享了python爬取微信公众号文章的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup from requests.exceptions import RequestException...
  • 主要为大家详细介绍了python爬取微信公众号文章的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有...话不多说,下面我就介绍如何使用 Python 爬取微信公众号所有文章的。主要有以下步骤:1 使用 Fiddler 抓取公众号接口数据...

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章。但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦。

    于是便想着能不能把某个公众号所有的文章都保存下来,这样就很方便自己阅读历史文章了。

    话不多说,下面我就介绍如何使用 Python 爬取微信公众号所有文章的。

    主要有以下步骤:

    1 使用 Fiddler 抓取公众号接口数据

    2 使用 Python 脚本获取公众号所有历史文章数据

    3 保存历史文章

    Fiddler 抓包

    Fiddler 是一款抓包工具,可以监听网络通讯数据,开发测试过程中非常有用,这里不多做介绍。没有使用过的可以查看这篇文章,很容易上手。

    接下来,使用微信桌面客户端,打开某个公众号的历史文章,这里以我的公众号举例,如下图。

    如果你的 fiddler 配置好了的话,能够看到如下图的数据。

    图中包含抓取的 url、一些重要的参数和我们想要的数据。

    这些参数中,offset 控制着翻页,其他参数在每一页中都是固定不变的。

    接口返回的数据结构如下图,其中 can_msg_continue 字段控制着能否翻页,1 表示还有下一页,0 表示没有已经是最后一页了。 next_offset 字段就是下一次请求的 offset 参数。

    构造请求,获取数据

    接下来我们的目标就是根据 url 和一些参数,构建请求,获取标题、文章 url 和日期等数据,保存数据。

    保存数据一种是使用 pdfkit 将 文章 url 保存为 pdf 文件;另一种是先保存 html 文件,然后将 html 制作成 chm 文件。

    1 将 文章 url 保存为 pdf 文件,关键代码如下:

    def parse(index, biz, uin, key):

    # url前缀

    url = "https://mp.weixin.qq.com/mp/profile_ext"

    # 请求头

    headers = {

    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 "

    "Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 "

    "QQBrowser/9.0.2524.400",

    }

    proxies = {

    'https': None,

    'http': None,

    }

    # 重要参数

    param = {

    'action': 'getmsg',

    '__biz': biz,

    'f': 'json',

    'offset': index * 10,

    'count': '10',

    'is_ok': '1',

    'scene': '124',

    'uin': uin,

    'key': key,

    'wxtoken': '',

    'x5': '0',

    }

    # 发送请求,获取响应

    response = requests.get(url, headers=headers, params=param, proxies=proxies)

    response_dict = response.json()

    print(response_dict)

    next_offset = response_dict['next_offset']

    can_msg_continue = response_dict['can_msg_continue']

    general_msg_list = response_dict['general_msg_list']

    data_list = json.loads(general_msg_list)['list']

    # print(data_list)

    for data in data_list:

    try:

    # 文章发布时间

    datetime = data['comm_msg_info']['datetime']

    date = time.strftime('%Y-%m-%d', time.localtime(datetime))

    msg_info = data['app_msg_ext_info']

    # 文章标题

    title = msg_info['title']

    # 文章链接

    url = msg_info['content_url']

    # 自己定义存储路径(绝对路径)

    pdfkit.from_url(url, 'C:/Users/admin/Desktop/wechat_to_pdf/' + date + title + '.pdf')

    print(title + date + '成功')

    except:

    print("不是图文消息")

    if can_msg_continue == 1:

    return True

    else:

    print('爬取完毕')

    return False

    2 保存 html 文件,关键代码如下

    def parse(index, biz, uin, key):

    # url前缀

    url = "https://mp.weixin.qq.com/mp/profile_ext"

    # 请求头

    headers = {

    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 "

    "Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 "

    "QQBrowser/9.0.2524.400",

    }

    proxies = {

    'https': None,

    'http': None,

    }

    # 重要参数

    param = {

    'action': 'getmsg',

    '__biz': biz,

    'f': 'json',

    'offset': index * 10,

    'count': '10',

    'is_ok': '1',

    'scene': '124',

    'uin': uin,

    'key': key,

    'wxtoken': '',

    'x5': '0',

    }

    # 发送请求,获取响应

    reponse = requests.get(url, headers=headers, params=param, proxies=proxies)

    reponse_dict = reponse.json()

    # print(reponse_dict)

    next_offset = reponse_dict['next_offset']

    can_msg_continue = reponse_dict['can_msg_continue']

    general_msg_list = reponse_dict['general_msg_list']

    data_list = json.loads(general_msg_list)['list']

    print(data_list)

    for data in data_list:

    try:

    datetime = data['comm_msg_info']['datetime']

    date = time.strftime('%Y-%m-%d', time.localtime(datetime))

    msg_info = data['app_msg_ext_info']

    # 标题

    title = msg_info['title']

    # 内容的url

    url = msg_info['content_url'].replace("\\", "").replace("http", "https")

    url = html.unescape(url)

    print(url)

    res = requests.get(url, headers=headers, proxies=proxies)

    with open('C:/Users/admin/Desktop/test/' + title + '.html', 'wb+') as f:

    f.write(res.content)

    print(title + date + '成功')

    except:

    print("不是图文消息")

    if can_msg_continue == 1:

    return True

    else:

    print('全部获取完毕')

    return False

    保存文章

    保存为 pdf 文件,用到了 python 的第三方库 pdfkit 和 wkhtmltopdf。

    安装 pdfkit:

    pip install pdfkit

    安装 wkhtmltopdf:

    下载地址:

    安装后将 wkhtmltopdf 目录下的 bin 添加到环境变量中。

    保存为 chm 文件,可以下载 Easy CHM ,使用这个软件可以将 html 制作成 chm,使用教程网上比较多。

    下载地址:

    效果图:

    pdf 和 chm 对比:

    pdf 支持多终端,阅读体验好,但是有个大坑,就是微信文章保存的 pdf 没有图片,很影响阅读体验,暂未找到解决办法。

    chm 的好处是可以建立索引,查看文章方便。一个公众号制作成一个 chm 文件,管理方便。不会出现图片不显示问题。

    所以推荐将爬取到的公众号文章保存为 chm 文件,方便阅读。

    展开全文
  • 之前考虑过使用搜狗微信来爬取微信公众号信息,不过搜狗提供的数据有诸多弊端,比如文章链接是临时的,文章没有阅读量等指标,所以考虑通过手机客户端利用 Python 爬微信公众号文章。
  • 我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史...话不多说,下面我就介绍如何使用 Python 爬取微信公众号所有文章的。 主要有以下步骤: 1 使用 Fiddler 抓取公众号...
    展开全文
  • 利用微信公众号的接口来爬取公众号历史文章记录,并存储到MySql数据库,默认45秒休眠一次,以防爬取太频繁接口被封,不过即使被封了,貌似两个小时到一天之内就会解封
  • python爬取微信公众号图片并生成word文档        由于微信公众号中,有些推文是以图片的形式推送,若想提取图片,需要先下载下来。如果图片数量多,就需要更多的时间,降低效率...

    python爬取微信公众号图片并生成word文档

           由于微信公众号中,有些推文是以图片的形式推送,若想提取图片,需要先下载下来。如果图片数量多,就需要更多的时间,降低效率。因此写下此代码,可以将推文图片提取并插入word中生成文档,以提高提取效率。
     

    一、代码

    # -*- coding = utf-8 -*-
    # @Time : 2021/7/10 21:07
    # @Author : 陈良兴
    # @File : python爬取微信公众号图片并生成word.py
    # @Software : PyCharm
    
    import requests
    from bs4 import BeautifulSoup
    import datetime
    import os
    from docx import Document                      # 导入docx包
    from docx.shared import Cm                    # 设置页面边距
    
    # 获取微信公众号图片
    def get_picture(url):
        headers = {
            'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
        }
        # 获取系统时间
        curr_time = datetime.datetime.now()
        # 将时间格式化为字符生成时间戳到时候给文件夹命名用
        path = datetime.datetime.strftime(curr_time, '%Y%m%d%H%M')
    
        # 检查是否存在这个文件夹
        if os.path.exists(path):
            print("属于这个时间点的文件夹已经创建好")
        else:
            # 不存在则创建
            os.mkdir(path)
            print("创建成功!!!!正在保存图片")
        # 获取当前工作目录并加上之前的时间生成文件夹路径
        dirname = os.getcwd() + '\\' + path + '\\'
        # 向刚才输入的公众号链接里面发送请求
        req = requests.get(url=url, headers=headers).content.decode()
        # 用BeautifulSoup解析网页
        soup = BeautifulSoup(req, 'lxml')
        res = soup.select('img')                # 获取该网页中所有的图片标签
        a = 0
        # 遍历所有的图片标签
        for i in res:
            if i.get("data-src") == None:           # 如果这个标签内的data-src等于空的时候直接跳过
                pass
            else:                                   # 否则获取data-src里面的内容获取图片链接
                print(f'链接:{i.get("data-src")}类型为:{i.get("data-type")}')
                # 尝试去保存图片 如果保存图片错误则抛出异常
                try:
                    # 拼接路径+a.jpg a是等于数字 每添加一个 a自增一 相当于是给图片命名 并且以二进制的形式写入
                    with open(dirname + f'{a}.{i.get("data-type")}', 'wb') as f:
                        # 向这个图片发送请求 并将图片的二进制写入
                        f.write(requests.get(url=i.get("data-src"), headers=headers).content)
                        f.close()                   # 关闭写入
                        a = a + 1                   # a自增一
                except Exception as e:              # 抛出异常 增加程序强壮性
                    print("该链接为空自动跳过!")
        print(f"此次一共成功保存图片{a}张")
    
    # 生成word文档
    def Generate_word():
        Doc = Document()
    
        # 设置页面边距
        sec = Doc.sections[0]  # sections对应文档中的“节”
        sec.left_margin = Cm(0)  # 以下依次设置左、右、上、下页面边距
        sec.right_margin = Cm(0)
        sec.top_margin = Cm(0)
        sec.bottom_margin = Cm(0)
    
        # 插入图片
        for i in range(1, 128):
            Doc.add_picture(r'G:\python_demo\python爬取微信公众号图片\202107102104\{}.png'.format(i), width=Cm(21.88), height=Cm(29))    # Cm是厘米
            i += 1
    
        Doc.save(r'./二年级语文(上册).docx')
    
    if __name__ == '__main__':
        url = input("请输入url:")
        get_picture(url)
        print("Saving......")
        Generate_word()
        print("文档创建成功!")
    
    

     

    二、实例

    1、复制公众号推文链接: 2020部编版二年级语文上册电子课本【提前预习】
    在这里插入图片描述
    2、运行程序,在交互窗口输入推文链接,运行。
    在这里插入图片描述

    展开全文
  • 爬取微信公众号,一般有几种方式: 1、通过登录微信公众号平台,在里面去搜索要爬取的公众号,通过抓包等方式获取相应的接口; 2、通过安卓模拟器的方式去抓包; 3、通过搜狗的微信模块...
    爬取微信公众号,一般有几种方式:
      1、通过登录微信公众号平台,在里面去搜索要爬取的公众号,然后抓包;
      2、通过安卓模拟器的方式去抓包; 
      3、通过搜狗的微信模块(https://weixin.sogou.com/)
      4、其他等方式...
    
    这里使用第一种方式去爬取数据,当然了,首先你要有一个微信公众号账号。
    
    目标公众号:******
    工具: pycharm、fiddler
    
    微信公众号 : https://mp.weixin.qq.com
    
    1.登录微信公众号
    2.进入创作管理 
    3.图文素材
    4.图文模板
    5.[新建]-编辑
    6.添加引用 (见下图)
    7.查找公众号文章

    3.打开fiddler抓包
      可以在fiddler种设置过滤,只抓微信公众号

    4.这里看下抓到的url :
       https://mp.weixin.qq.com/cgi-bin/appmsg? 
    action=list_ex&fakeid=************&query=&begin=0&count=4&type=9&need_author_name=1&token=*********&lang=zh_CN&f=json&ajax=1
    
    这是公众号起始url,其中:
        fakeid : 目标公众号的id
        begin : 起始页,另外注意上图中得页码数
    
    5.上图是返回的json串,这里需要以下几个字段:
        
        aid,
        cover:图片链接
        digest:简介
        title:标题
        link:详情页url
        crate_time
    
    
    
    剩下的就是写代码了
    # -*- coding: utf-8 -*-  
    import requests
    import json
    import time
    
    
    '''
    爬取微信公众号 
        1. 通过 抓取 web版的微信公众号页面接口方式实现
        2. 目标 :
            a. 将文章的标题、发布时间、url地址、标题图片等信息保存
            b. 以html的格式保存每一篇文章内容
            c. 下载html中的图片,并修改为本地路径
    '''
    
    
    class weixin:
    
        def __init__(self):
            self.start_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&fakeid=*******&query=&begin={}&count=4&type=9&need_author_name=1&token=********&lang=zh_CN&f=json&ajax=1'
            self.headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
                'Cookie': '略'
            }
    
        # 获取所有文章列表的url
        def get_url_list(self):
            totalPage = 87  # 修改为总页数
            url_list = []
            for page_num in range(totalPage):
                page_num = page_num * 4
                tmp_url = self.start_url.format(page_num)
                url_list.append(tmp_url)
            return url_list
    
        # 请求列表页
        def parse_article_list(self,url):
            res = requests.get(url, headers=self.headers)
            article_list = json.loads(res.text).get('app_msg_list')
            return article_list
    
        # 解析列表页
        def get_article_info(self,article_list):
            # 判断当前页是否有数据
            if len(article_list) > 0 :
                item_list = []
                for article in article_list:
                    item = {}
                    item['aid'] = article.get('aid')
                    item['title'] = article.get('title')
                    item['digest'] = article.get('digest')
                    item['link'] = article.get('link')
                    item['cover'] = article.get('cover')
                    item['create_time'] = article.get('create_time')
                    self.saveAlist(item)
                    item_list.append(item)
                return  item_list
    
        # 保存文章列表的信息
        def saveAlist(self,item):
            path = './改成你要的名字.txt'
            with open(path,'a+',encoding='utf-8') as f:
                f.write(str(item)+'\n')
    
        # 请求详情页并保存到本地
        def parse_article(self,url,title):
                res = requests.get(url, headers=self.headers)
                title = self.filter_erro_name(title)
                file_path = './{}.html'.format(title)
                with open(file_path,'w',encoding='utf-8') as f:
                    f.write(res.text)
    
        # 处理文件名中的特殊字符
        def filter_erro_name(self,title):
            error_set = ['/', '\\', ':', '*', '?', '"', '|', '<', '>']
            for x in title:
                if x in error_set:
                    title = title.replace(x, '')
            return title
    
        def run(self):
            print("入口")
            # 获取所有文章列表页的url
            url_list = self.get_url_list()
            # 请求每一页的url
            for url in url_list:
                time.sleep(3)
                # 请求每一页的数据
                article_list = self.parse_article_list(url)
                # 解析每一页的数据
                item_list = self.get_article_info(article_list)
          
    
    
    if __name__ == '__main__':
        wx = weixin()
        wx.run()
    
    
    
    上面的没写完,获取详情页还没写,有时间再写
    

     

    展开全文
  • python爬取微信公众号文章(包含文章内容和图片)

    千次阅读 多人点赞 2019-07-21 16:55:47
    既然可以通过网页进微信公众平台,那么爬取微信公众号文章就流程上就没太多难度了。 自己在网上找的一些python爬虫文章不太好用,就亲自写了一套,包括详细的页面附图和代码注释,代码复制下来后可以直接运行,供...
  • python爬取微信公众号

    2018-08-09 15:31:00
    爬取策略 1.需要安装python selenium模块包,通过selenium中的webdriver驱动浏览器获取Cookie的方法、来达到登录的效果 pip3 install selenium chromedriver: 下载地址:...
  • 爬取微信公众号文章思路 目前来说我知道的是三个方法: 1、手机写按键精灵脚本 2、Fiddler 设置代理和抓包 3、通过 cookies 的时效性获取数据 4、其他方法没试过、也有很多 思路 1、通过模拟浏览器的方法...
  • 使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)
  • python爬取微信公众号文章

    万次阅读 多人点赞 2017-07-23 13:31:30
    本文通过微信提供的公众号文章调用接口,实现爬取公众号文章的功能。
  • 我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有...话不多说,下面我就介绍如何使用 Python 爬取微信公众号所有文章的。主要有以下步骤:1 使用 Fiddler 抓取公众号接口数据...
  • Python爬取微信公众号文章、点赞数

    万次阅读 热门讨论 2019-05-14 14:44:41
    使用Fiddler抓取微信公众号数据, 获取阅读数 通过cookie请求公众号获取文章,再使用Fiddler抓取的数据获取阅读数 整理数据写入到数据库 效果 平均20s可爬取一篇文章。为了微信号、订阅号的安全 时间间隔长一点 可...
  • 分享原创python爬取微信公众号,并分享GITHUB地址
  • Python 爬取微信公众号文章

    千次阅读 2019-07-10 21:21:53
    获取任何你想爬取微信公众号文章 本程序通过输入关键字(如CSDN)就会获取到所有包含关键字(如CSDN)的公众号。在逐一获取所有公众号下所有文章。当然,这只是理想情况,腾讯的反爬不是一般的厉害,他会直接封掉你...
  • 通过搜狗搜索中的微信搜索入口爬取微信公众号文章(selenium) """ import re import os import json import time import requests from pyquery import PyQuery from urllib.parse import quote from...
  • 目的:使用python的requests模块爬取微信公众号历史消息 工具:微信桌面版、Fiddler 首先选择目标公众号,通过以下方式进入公众号历史消息 该页面在chrome是打不开的,需要手动设置user agent和cookies。这就需要...
  • 【爬虫】python爬取微信公众号文章

    千次阅读 2018-07-21 15:27:07
    背景:利用代理池爬取微信公众号文章并保存 架构: 巨坑:实例的名不可于类的名重复。 第一:请求及请求队列 1、为什么要创建weixinrequest()?  因为Sogou微信搜索反爬虫能力强,response.status_code...
  • 本文实例为大家分享了python爬取微信公众号文章的具体代码,供大家参考,具体内容如下 该方法是依赖于urllib2库来完成的,首先你需要安装好你的python环境,然后安装urllib2库 程序的起始方法(返回值是公众号文章...
  • 爬取微信公众号文章(使用wechatsogou)1.安装pip install wechatsogou --upgradewechatsogou是一个基于搜狗微信搜索的微信公众号爬虫接口2.使用方法使用方法如下所示import data数据结构:{ 'gzh': { 'wechat_...
  • 本期我们想要爬取微信公众号的文章内容。首先你想要有自己的微信公众号来登录平台。在个人编辑发布文章的界面,我们能使用上方的超链接功能来搜索文章,可以按关键字,也可以按照公众号,我们选择后者。   我给...
  • 前言 本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题...2,爬取所有关于python公众号文章 爬取青灯编程公众号所有的文章 1,登陆公众号之后点击图文 2,打开开发者工具 ..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,955
精华内容 1,982
关键字:

python爬取微信公众号

python 订阅