python爬取微信公众号文章

2023-11-05

爬取微信公众号文章

获取微信公众号的url

在这里插入图片描述
在这里插入图片描述

获取每一篇文章的url

​ 选择一个公众号进入,选择一个目录进入后点复制链接,然后去浏览器打开。按F12打开检查的模式,在Console中输入$x(‘标签路径’)找到子文章的目录xpath,然后分离出每篇文章的url,标题。代码如下:

url_xpath_list = response.xpath('//section[@style="margin-left: -20px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important;"]/p//span')
for r in url_xpath_list:
	url = r.xpath('./a/@href').extract()[0]
	title_text = r.xpath('./a/text()').extract()[0]
    index1 = r.xpath('./text()').extract()[0]
    index2 = r.xpath('./text()').extract()[1]
    title = index1 + title_text + index2 + ".html"

    yield scrapy.Request(url, callback=self.get_context,meta={'title': title})

注意:需要在标题后面加.html,不然格式不对,打不开。

获取每一篇文章的html

通过xpath,获取到每篇文章的html,代码如下:

html = "".join(response.xpath('//html').extract())    

将获取到的每篇文章的标题作为每篇文章的文件名,保存到本地:

file_path = f'/home/jingliu/hupu/{title}.html'
with open(file_path, 'a+', encoding='utf-8') as fp:
	fp.write(html)

下面是每篇文章的html文件:

在这里插入图片描述

html转换为pdf

这个部分比较麻烦,开始的时候没有经验我是抓取的文字出来,发现格式乱七八糟,根本不能看,后来想着直接将html转换为pdf,格式也原封不动,这样就方便阅读了。

准备工作

1.pip安装pdfkit

​ pip install pdfkit

2.下载wkhtmltox工具

​ 下载路径: https://wkhtmltopdf.org/

3.环境变量的添加

​ 添加wkhtmltox的bin路径到系统环境变量path中

在这里插入图片描述

转换的操作

1.必须要将wkhtmltopdf.exe的路径配置好,不然会出错。
config_pdf = pdfkit.configuration(wkhtmltopdf=r'E:\downloads\wkhtmltox-0.12.6-1.mxe-cross-win64\wkhtmltox\bin\wkhtmltopdf.exe')
2.用pdfkit将html格式的文件转换为pdf

​ pdfkit可以有3种转换的格式,分别是文件、字符串、url,它们的使用方法类似,只是第一个参数不同,file的要放文件的路径,string的放字符串,url放一个url链接:

​ pdfkit.from_file

​ pdfkit.from_string

​ pdfkit.from_url

这里我使用的是file的方式。

(1)首先获取所有file的路径,放在list中

import os
files = os.listdir(r'E:\work\natural_language\自然语言学习微信文章')

(2)读取html文件,转换成pdf格式

wkhtmltopdf_options = {
    '--enable-local-file-access': None
}
for file in files:
    name = re.sub('.html','',file)
    try:
        pdfkit.from_url(rf'E:\work\natural_language\自然语言学习微信文章\{file}',rf'E:\{name}.pdf',configuration=config_pdf,options=wkhtmltopdf_options)
    except:
        print("error")

这里文件名用正则表达式处理了一下,直接保存为原文件的名字加.pdf。

有个点需要注意,直接运行转换pdf代码是会有错误抛出的,网上说的是因为html中有css,或者链接之类的杂七杂八的东西,就会转换抛出错误。这错误不好修正,并且发现其实pdf文件已经生成好了的,其实就是可以略过这个错误。如果不加try-except,运行一条循环后就会中断,加上后就可以继续执行。

到这一步已经能够转换出格式和原网页一样的pdf文档了,但是有一个问题,原网页中的图片一张都没有显示。

3.图片的加载(有点麻烦,不知道有没有更简单的办法)
3.1抓取图片保存到本地

在抓取的html中找到图片的url,然后抓取并保存,注意名字中给特殊符号去掉

url_list = re.findall(r'<img.+?data-src="(.+?)"', html)
for url in url_list:
    yield scrapy.Request(url, callback=self.get_img)
def get_img(self,response):
    res = response.body
    url = response.request.url
    p = re.sub(r"[//:.?]", '', url)
    path = r"/home/jingliu/hupu/img/" + p + r".jpg"

    with open(path, 'wb') as f:
        f.write(res)

在这里插入图片描述

3.2图片路径换成本地路径

首先获取到所有的html的文件路径,读取内容,匹配出图片路径替换成本地图片路径(注意一点,data-src要替换成src,不然加载不出图片),然后新的html文件保存在一个新的文件夹“洗好的html”里。

import os
import re

files = os.listdir(r'E:\微信爬取文章\html')
for file in files:
    f = open(rf'E:\微信爬取文章\html\{file}','r',encoding='utf-8')
    #以字符串的形式读取
    content = f.read()

    img_url = re.findall(r'<img.*?data-src="(http.+?)"',content,re.S)
    for img in img_url:
        img_path_tail = re.sub(r"[//:.?=]",'',img)
        img_path = r'E:\微信爬取文章\img\\' + img_path_tail + ".jpg"
        img = re.sub(r'\?', '\?', img)
        content = re.sub(img,img_path,content)
    content = re.sub('<img data-src','<img src',content)
    print(content)
    f.close()
    fp = open(rf'E:\微信爬取文章\洗好的html\{file}','w',encoding='utf-8')
    fp.write(content)
    fp.close()
3.3将新的html转化为pdf
wkhtmltopdf_options = {
    '--enable-local-file-access': None
}
config_pdf = pdfkit.configuration(wkhtmltopdf=r'E:\downloads\wkhtmltox-0.12.6-1.mxe-cross-win64\wkhtmltox\bin\wkhtmltopdf.exe')
files = os.listdir(r'E:\微信爬取文章\洗好的html')
for file in files:
    #将文件扩展名.html去掉
    name = re.sub('.html','',file)
    try:
        pdfkit.from_url(rf'E:\微信爬取文章\洗好的html\{file}',rf'E:\微信爬取文章\pdf\{name}.pdf',configuration=config_pdf,options=wkhtmltopdf_options)
    except:
        print("error")

这样一批文章就正确转化为pdf了,下面是部分截图,格式很规整,和页面一模一样。

在这里插入图片描述

这是转换好的pdf,现在正在学习自然语言处理,直接下载到本地学习,方便很多。

在这里插入图片描述

我也是在不断学习中,这篇文章断断续续写了好多天,今天终于完成了,期间遇到了很多问题,后来都自己一一解决了,这就是进步吧。第一次发文章,不足之处请大家不吝赐教,愿大家一起进步!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取微信公众号文章 的相关文章

随机推荐

  • 重磅报告

    过去5年 是中国互联网创新飞跃的五年 中国从具有先天人口优势的网络大国逐步迈向技术创新驱动的网络强国 我国互联网产业在5年里究竟发生了哪些变化 阿里研究院发布报告 创新飞跃的五年 10大关键词解读中国互联网 报告基于丰富的数据 以及鲜活的案
  • ArcGis10.2详细安装步骤

    目录 1 安装License Manager10 2 2 复制试用文件 3 安装ArcGis Desktop10 2中文版 4 更新本地许可 提供arcgis下载地址 暂时评论区留邮箱吧 下载之后会得到以下3个目录 按顺序进行操作或者安装
  • QT笔记- 队列信号槽绑定与自定义类型

    说明 使用Qt QueuedConnection队列绑定时 某些默认非队列绑定时可用的自定义类型此时会不可用 如自定义枚举类型 此错误Qt不会报错和提示 解决 在绑定前使用qRegisterMetaType
  • http、websocket、长连接、短连接(一)

    http websocket 长连接 短连接 一 http websocket 长连接 短连接 二 这一篇先讲一下http的长短连接的问题 1 HTTP协议与TCP IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接 HT
  • NetMonitor抓不到网卡

    在powershell 或Dos下输入命令 bcdedit set testsigning on 操作目的 打开系统的testSigning模式 使得非权威CA发放的签名可以使用
  • Type string trivially inferred from a string literal, remove type annotation (no-inferrable-types)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt TypeScript代码 private goY string www baidu com 会导致tslint报错 Type string trivially inferr
  • 华为OD机试 - 观看文艺汇演问题(Java)

    题目描述 为了庆祝中国共产党成立100周年 某公园将举行多场文艺表演 很多演出都是同时进行 一个人只能同时观看一场演出 且不能迟到早退 由于演出分布在不同的演出场地 所以连续观看的演出最少有15分钟的时间间隔 小明是一个狂热的文艺迷 想观看
  • 自动单选题批改程序C语言,标准单选题考试系统,又出问题了,求指教,怎么就串行了呢?...

    include include cls include toupper include time include malloctypedef struct char question 200 A 100 B 100 C 100 D 100
  • 拒绝后门程序-Alibabaprotect和AliPaladin

    详细参考帖子及评论区 流氓进程AlibabaProtect的删除 程序员吧 百度贴吧 首先打开服务找到AlibabaProtect 然后找到他的位置 C Program Files x86 AlibabaProtect 这个目录下有个uni
  • 巧解高并发之福利抽奖

    随着互联网的发展 高并发问题几乎是每个企业都会面临的问题 而目前解决高并发最受欢迎的便是微服务 通过类似于增加服务器数量而达到一种 人多力量大的 效果 但是 类似方法均需要技术及资本的支持 而当现有技术和资本不达标时 一切都是空谈 那么当技
  • mysql 数据多表join

    0 索引 JOIN语句的执行顺序 INNER LEFT RIGHT FULL JOIN的区别 ON和WHERE的区别 1 概述 一个完整的SQL语句中会被拆分成多个子句 子句的执行过程中会产生虚拟表 vt 但是结果只返回最后一张虚拟表 从这
  • 在cmd/bat脚本中获取当前脚本文件所在目录

    Q 在Win7 Win10中以管理员身份运行在cmd bat脚本时 如何获取当前脚本文件所在目录 当我们在Win7 Win10中使用鼠标右键的 以管理员身份运行 以管理员身份运行cmd bat脚本时 系统默认进入的目录是C Windows
  • 【Burp Suite】配置FireFox火狐浏览器burpsuite https抓包

    配置FireFox火狐浏览器burpsuite https抓包 配置火狐浏览器代理 Firefox配置证书 FireFox再配置代理 抓包 成功
  • centos7 安装mysql8.0

    1 官方文档 http dev mysql com doc mysql yum repo quick guide en 2 下载 Mysql yum包 http dev mysql com downloads repo yum 或者直接 w
  • VMware虚拟机安装+Ubuntu下载+VMware虚拟机配置运行

    一 安装虚拟机VMware 1 下载地址 下载 VMware Workstation Pro CN 2 进入官网 点击Window 16 Pro for Windows即可立即下载 3 下载好后 如图所示 4 运行exe文件 进入VMwar
  • Klipper seria.c 文件代码分析

    一 前言 Klipper 底层硬件的串口模块程序写的是否正确是决定下位机与上位机能否正常通信的前提 如果这个文件的驱动没写好 那上位机控制下位机就无从谈起 更无法通过上位机去验证下位机程序的正确性 本篇博文将详细解析 Klipper src
  • ORA-00933: SQL命令未正确结束 解决办法

    1 报错内容 Cause java sql SQLSyntaxErrorException ORA 00933 SQL 命令未正确结束 bad SQL grammar nested exception is java sql SQLSynt
  • SpringBoot原理解析(超详细)

    SpringBoot原理解析 1 SpringBootApplication原理解析 首先 我们直接追踪 SpringBootApplication的源码 Target ElementType TYPE Retention Retentio
  • JMeter获取数据库数据作为接口参数

    1 既然是操作数据库肯定具备需要对数据库的配置 2 在接口测试的过程中有OA需要进行账号切换 因此在这里利用sql直接查询数据 3 且看配置 variables names设置为A C 那么如下变量会被设置为 A 2 总行数 A 1 第1列
  • python爬取微信公众号文章

    爬取微信公众号文章 获取微信公众号的url 获取每一篇文章的url 选择一个公众号进入 选择一个目录进入后点复制链接 然后去浏览器打开 按F12打开检查的模式 在Console中输入 x 标签路径 找到子文章的目录xpath 然后分离出每篇