>  기사  >  위챗 애플릿  >  WeChat 공개 계정 기사를 크롤링하여 PDF 파일로 저장(Python 방식)

WeChat 공개 계정 기사를 크롤링하여 PDF 파일로 저장(Python 방식)

coldplay.xixi
coldplay.xixi앞으로
2020-08-29 17:14:485490검색

WeChat 공개 계정 기사를 크롤링하여 PDF 파일로 저장(Python 방식)

【관련 학습 권장사항: WeChat 공개 계정 개발 튜토리얼

머리말

블로그를 처음 작성합니다. 주요 콘텐츠는 WeChat 공개 계정의 기사를 크롤링하는 것입니다. 기사를 PDF 형식으로 변환하여 로컬에 저장하세요.

Wechatsogou 기사 크롤링(wechatsogou 사용)

1. 설치

pip install wechatsogou --upgrade

wechatsogou는 Sogou WeChat 검색을 기반으로 하는 Wechat 공용 계정 크롤러 인터페이스입니다.

2 사용 방법

사용 방법은 다음과 같습니다

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 구조 :

{
    '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

pip install pdfkit

설치 방법

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')

3. 위의 URL을 직접 사용하여 PDF를 생성할 경우 PDF 파일에 기사 이미지가 표시되지 않는 문제가 발생합니다.

해결책:

# 该方法根据文章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 파일로 표시되는 것을 확인할 수 있습니다.

전체 코드

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)

관련 학습 권장 사항: python 튜토리얼

위 내용은 WeChat 공개 계정 기사를 크롤링하여 PDF 파일로 저장(Python 방식)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제