爬取微信公众号文章获取每一篇文章的url获取
优采云 发布时间: 2021-08-23 04:47爬取微信公众号文章获取每一篇文章的url获取
爬取微信公众号文章获取微信公众号网址
获取每个文章的url
选择公众号进入,选择目录进入,点击复制链接,然后到浏览器打开。按F12打开检查模式,在Console中输入$x('tag path')找到sub文章的目录xpath,然后把每个文章的url和title分开。代码如下:
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())
将得到的每个文章的title保存为每个文章的文件名,并保存到本地:
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 install pdfkit
pip install pdfkit
2.下载 wkhtmltox 工具
下载路径:
3.添加环境变量
将wkhtmltox的bin路径加入系统环境变量路径
转换操作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。它们的使用方法类似,只是第一个参数不同,分别是文件中要放置的文件的路径,字符串中的字符串,以及url。放一个网址链接:
pdfkit.from_file
pdfkit.from_string
pdfkit.from_url
我在这里使用文件方法。
(1)首先获取所有文件的路径并放入列表
import os
files = os.listdir(r'E:\work\natural_language\自然语言学习微信文章')
(2)read 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,然后抓取保存,注意去掉名字中的特殊符号
<p>url_list = re.findall(r'