利用 Python 实现爬取微信公众号文章并保存为 PDF 文件的流程

why 1151 2024-07-08

爬取微信公众号文章并保存为PDF文件(Python方法)

前言

第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地。

爬取微信公众号文章(使用wechatsogou)

1.安装

1

pip install wechatsogou --upgrade

wechatsogou是一个基于搜狗微信搜索的微信公众号爬虫接口

2.使用方法

使用方法如下所示:

1

2

3

4

5

6

7

import wechatsogou

# captcha_break_time为验证码输入错误的重试次数,默认为1

ws_api = wechatsogou.WechatSogouAPI(captcha_break_time=3)

# 公众号名称

gzh_name = ''

# 将该公众号最近10篇文章信息以字典形式返回

data = ws_api.get_gzh_article_by_history(gzh_name)

data数据结构:

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

{

    'gzh': {

        'wechat_name': '',  # 名称

        'wechat_id': '',  # 微信id

        'introduction': '',  # 简介

        'authentication': '',  # 认证

        'headimage': ''  # 头像

    },

    'article': [

        {

            'send_id': int,  # 群发id,注意不唯一,因为同一次群发多个消息,而群发id一致

            'datetime': int,  # 群发datatime 10位时间戳

            'type': '',  # 消息类型,均是49(在手机端历史消息页有其他类型,网页端最近10条消息页只有49),表示图文

            'main': int,  # 是否是一次群发的第一次消息 1 or 0

            'title': '',  # 文章标题

            'abstract': '',  # 摘要

            'fileid': int,  #

            'content_url': '',  # 文章链接

            'source_url': '',  # 阅读原文的链接

            'cover': '',  # 封面图

            'author': '',  # 作者

            'copyright_stat': int,  # 文章类型,例如:原创啊

        },

        ...

    ]

}

这里需要得到两个信息:文章标题,文章url。

得到文章url以后,就可以根据url将html页面转换成pdf文件了。

生成PDF文件

1.安装wkhtmltopdf

-:https://wkhtmltopdf.org/downloads.html

2.安装pdfkit

1

pip install pdfkit

3.使用方法

1

2

3

4

5

6

7

import pdfkit

# 根据url生成pdf

pdfkit.from_url('http://baidu.com','out.pdf')

# 根据html文件生成pdf

pdfkit.from_file('test.html','out.pdf')

# 根据html代码生成pdf

pdfkit.from_string('Hello!','out.pdf')

如果直接用上面得到的文章url去生成pdf,会出现pdf文件不显示文章图片的问题。

解决办法:

1

2

3

4

# 该方法根据文章url对html进行处理,使图片显示

content_info = ws_api.get_article_content(url)

# 得到html代码(代码不完整,需要加入head、body等标签)

html_code = content_info['content_html']

然后根据html_code构造完整的html代码,调用pdfkit.from_string()方法生成pdf文件,这时候会发现文章中的图片在pdf文件中显示出来了。

完整代码

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

import os

import pdfkit

import datetime

import wechatsogou

 

# 初始化API

ws_api = wechatsogou.WechatSogouAPI(captcha_break_time=3)

 

 

def url2pdf(url, title, targetPath):

    '''

    使用pdfkit生成pdf文件

    :param url: 文章url

    :param title: 文章标题

    :param targetPath: 存储pdf文件的路径

    '''

    try:

        content_info = ws_api.get_article_content(url)

    except:

        return False

    # 处理后的html

    html = f'''

    <!DOCTYPE html>

    <html lang="en">

    <head>

        <meta charset="UTF-8">

        <title>{title}</title>

    </head>

    <body>

    <h2 style="text-align: center;font-weight: 400;">{title}</h2>

    {content_info[&#39;content_html&#39;]}

    </body>

    </html>

    &#39;&#39;&#39;

    try:

        pdfkit.from_string(html, targetPath + os.path.sep + f&#39;{title}.pdf&#39;)

    except:

        # 部分文章标题含特殊字符,不能作为文件名

        filename = datetime.datetime.now().strftime(&#39;%Y%m%d%H%M%S&#39;) + &#39;.pdf&#39;

        pdfkit.from_string(html, targetPath + os.path.sep + filename)

 

 

if __name__ == &#39;__main__&#39;:

    # 此处为要爬取公众号的名称

    gzh_name = &#39;&#39;

    targetPath = os.getcwd() + os.path.sep + gzh_name

    # 如果不存在目标文件夹就进行创建

    if not os.path.exists(targetPath):

        os.makedirs(targetPath)

    # 将该公众号最近10篇文章信息以字典形式返回

    data = ws_api.get_gzh_article_by_history(gzh_name)

    article_list = data[&#39;article&#39;]

    for article in article_list:

        url = article[&#39;content_url&#39;]

        title = article[&#39;title&#39;]

        url2pdf(url, title, targetPath)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:将小程序添加至公众号文章的方法与步骤
下一篇:在 Ubuntu 18.04 中搭建微信小程序与公众号应用开发环境的学习方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~