爬取微信公众号文章

获取微信公众号的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.bodyurl = response.request.urlp = 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 refiles = 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,现在正在学习自然语言处理,直接下载到本地学习,方便很多。

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

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

  1. html如何获取请求头变量的值。_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  2. python爬取微信公众号文章(包含文章内容和图片)

    之前虽然做过网页爬取,但微信爬取一直没做过,因为我一直不知道网页可以进微信公众平台,只用过微信客户端进微信公众号.既然可以通过网页进微信公众平台,那么爬取微信公众号文章就流程上就没太多难度了. 自己在 ...

  3. python 微信公众号发文章_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  4. Python爬取微信公众号文章、点赞数

    代码还是热乎的,只要你细心一步步的慢慢调试,绝壁没问题 前期准备 订阅号: Python: Fiddler: 微信账号: 流程 使用用微信公众号生成cookie 使用Fiddler抓取微信公众号数据, ...

  5. 如何用python爬取公众号文章_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  6. python爬虫爬取微信_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  7. 如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  8. python爬取正确但不出文件_使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  9. python 爬取微信公众号文章(selenium+webdriver)

    """通过搜狗搜索中的微信搜索入口爬取微信公众号文章(selenium) """ import re import os import js ...

最新文章

  1. 设计模式复习-职责链模式
  2. 使用 Boost.MPI 的 reduce() 连接字符串的示例
  3. mac mysql php_Mac搭建php开发环境:Apache+php+MySql
  4. CodeDom六--实体类生成示例
  5. tomcat部署web应用的三种方式(转)
  6. SNMP学习(2)——SNMP实战
  7. 计算机内存的基本储存单元,计算机信息存储单元的结构解析
  8. 火爆全球的区块链到底是怎么一回事?一文带你看懂
  9. python实现常见的整数进制、字符进制、ASCII码进制之间的转换
  10. RSLogix 5000下载程序方法
  11. canvas实现flybird小游戏
  12. 计算机网络由通讯子网和什么组成,计算机网络由通信子网和什么子网组成
  13. MySQL报错:The server quit without updating PID file 我的解决思路和方法
  14. Android人脸支付功能,android支付宝上刷脸支付的人脸识别技术
  15. win7 安装IE11 教程
  16. iPhone的2D/3D游戏引擎
  17. Win10 中文输入法关闭 Ctrl+Shift+B 快捷键
  18. 6款数据库管理工具推荐,设计简单、功能丰富,还与阿里云兼容哦!
  19. 爬取双色球的历史记录
  20. 设计师超爱用的六款软件

热门文章

  1. 国内投资者投资港股的四种方法和港股必知25件事
  2. 吴军 阅读与写作50讲 02 如何读懂作者的内心 读后感
  3. BaseAdataer基本设配器
  4. php订阅号发送消息,关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题,_PHP教程...
  5. 小节标题不跟着章节变化,教你彻底解决
  6. js 根据时区转换日期格式
  7. html 拉伸幕,html 对 div 进行 拉伸 拖拽
  8. Unirech阿里云国际版云服务器代充-使用Python批量创建实例
  9. vdi转vmdk VirtualBox与VMware硬盘格式转换及使用方法
  10. 程序员们一个一个的都挺神的,堪称 35 岁毕业之后再就业的标兵,不服不行