爬取微信公众号文章获取每一篇文章的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&#39;

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线