在如何爬取微信公众号(一)中完成了将爬取公众号文章的元数据存入数据库,其中包括文章的连接、标题、发布时间、摘要和封面图片等信息。下面介绍如何根据文章链接来爬取文章内容。

开发环境

  • windows 7 x64
  • python3.7 (Anaconda)
  • vscode 编辑器
  • mongodb4.0 数据库
  • Nosqlbooster mongodb数据库的可视化管理工具

mongodb数据库中以文档格式来存储数据,如一条文章数据是这样存储的。

//Copy from NoSQLBooster for MongoDB free edition. This message does not appear if you are using a registered version.{"_id": "5e134903dd371d087640065b","aid": "2247518136_1","appmsgid": 2247518136,"cover": "https://mmbiz.qlogo.cn/mmbiz_jpg/DCftNYRGoKWG0USHVfs1FG2pGKfz0BMUI3FLibHTrYe1a7WMKzZnazCKDJ9OUfuibGbewFqIiakic8MEqDkNiaXHH7w/0?wx_fmt=jpeg","create_time": 1578235906,"digest": "三不管地带容易出问题","is_pay_subscribe": 0,"item_show_type": 0,"itemidx": 1,"link": "http://mp.weixin.qq.com/s?__biz=MzI1ODUzNjQ1Mw==&mid=2247518136&idx=1&sn=812ec79199ae793f28770287969d0f2b&chksm=ea0462d2dd73ebc40f6ecc4f1f52fb2a3e0c798ca152aa89cc42b8e77ef6e54234695ad43025#rd","post_date": "2020-01-05","tagid": [],"title": "肆虐非洲的“博科圣地”究竟是什么?","update_time": 1578235905
}

里面的link字段为文章的url。
下面我们根据这个url来爬取文章的内容。
爬取文章内容,主要包括文章的html页面,引用的js和css,以及页面中的图片。微信公众号的js和css都是内嵌在页面当中,没有引用的外部文件,所以只需爬取页面中的图片,并将公网的url替换成本地的相对uri即可。
下面看代码。

代码实现

# -*- coding:utf-8 -*-
# written by wlj @2020-1-7 13:52:34
#功能:从数据库读取文章url,将公众号文章爬取到本地
#用法:python get_article.py [本地存储路径] 如python get_article.py wx_articles
import time
import json
import requests,re,sys,os
from requests.packages import urllib3
from bs4 import BeautifulSoup
import hashlib
from pymongo import MongoClient
urllib3.disable_warnings()#全局变量
#存储路径,去掉前后的连接符
path = sys.argv[1].strip('/').strip('\\')
#静态文件的存储路径
static_path = ''
#HTTP请求的headers
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"
}#计算x的md5()
def md5(x):m = hashlib.md5()m.update(x.encode('utf-8'))return m.hexdigest()#根据url爬取文章,article_filename要保存的html文件名
def get_article(url,article_filename):global static_path#requests会话对象s = requests.Session()#主页文章页面res = s.get(url,headers = headers,verify=False)if res.status_code == 200:#html文档content = res.text#使用bs库解析文档结构soup = BeautifulSoup(res.text,'lxml')#找出html中的图片for img in soup.find_all('img'):#找到图片的url,有的img的图片源在data-src字段中img_url = img.attrs.get('src','').strip()img_url = img_url if img_url else img.attrs.get('data-src','').strip()if img_url:#处理img_url是 //xxx.xxx.xx.jpg的情况if img_url.startswith('//'):img_url = 'http:'+img_url#图片在本地的存储路径,文件名为img_url的md5值img_filename = '%s/%s' % (static_path,md5(img_url))#图片在本地的相对urilocal_img_uri = 'static/%s' % md5(img_url)#若该图片本地不存在,对其进行下载if  not os.path.isfile(img_filename):#请求图片res = s.get(img_url,headers = headers,verify=False)if res.status_code == 200:#保存图片open(img_filename,'wb').write(res.content)#将html文档中的互联网url替换成本地的相对uricontent = content.replace(img_url,local_img_uri)#将img标签的data-src替换为src,因为data-src属性不会显示出来content = content.replace('data-src','src')#保存html文档open('%s/%s.html'% (path,article_filename),'w',encoding='utf-8').write(content)print(article_filename,'下载完毕!')#主函数
def main():#声明全局变量global static_path#静态文件的存储路径static_path = '%s/static' % path#若该路径不存在,将其创建if not os.path.isdir(static_path):os.makedirs(static_path)#mongodb数据库,存储有文章的元数据mongo = MongoClient('localhost',27017).wx.gzh#作为示例,返回前10条文章数据for item in mongo.find({},limit=10,skip=0):#爬取文章,并以"[发布时间]标题.html"保存为本地文件get_article(item['link'],'[%s]%s' % (item['post_date'],item['title']))main()

结果



参考资料

  • What are all the differences between src and data-src attributes?

如何爬取微信公众号文章(二)相关推荐

  1. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章

    下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...

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

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

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

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

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

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

  5. 记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗与新榜等第三方平台)

    首先表示抱歉,年底大家都懂的,又涉及SupportYun系统V1.0上线.故而第四篇文章来的有点晚了些~~~对关注的朋友说声sorry! SupportYun系统当前一览: 首先说一下,文章的进度一直 ...

  6. 记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗与新榜等第三方平台)...

    首先表示抱歉,年底大家都懂的,又涉及SupportYun系统V1.0上线.故而第四篇文章来的有点晚了些~~~对关注的朋友说声sorry! SupportYun系统当前一览: 首先说一下,文章的进度一直 ...

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

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

  8. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...

    本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...

  9. 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...

    9.5 使用代理爬取微信公众号文章 前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 1. 本节目标 我们的主要目标是利用代理爬取微信公众号 ...

  10. python爬取微信公众号文章

    爬取微信公众号文章 获取微信公众号的url 获取每一篇文章的url ​ 选择一个公众号进入,选择一个目录进入后点复制链接,然后去浏览器打开.按F12打开检查的模式,在Console中输入$x('标签路 ...

最新文章

  1. unity 关闭自己脚本_Unity3D 挂载的脚本取消勾选居然还会运行!!
  2. UIBezierPath使用
  3. 很酷的一套 Flex/AIR 皮肤 (KingnareStyle)
  4. 汇付 支付,痛苦的接入过程
  5. 使用序列化反序列化实现学生管理系统
  6. 谈判失败:Oracle 杀死 Java EE
  7. 【2019杭电多校第七场1001=HDU6646】A+B=C(思维+多细节)
  8. Linux指令:top
  9. 搭载rtmp直播服务器
  10. Amplify Shader Editor手册 Unity ASE(中文版)
  11. 计算机中的文档地址怎么填写,电脑中我的文档属性中没有位置选项如何修改存储位置...
  12. 熊去氧胆酸的药物行业调研报告 - 市场现状分析与发展前景预测
  13. 二叉树的遍历——层序遍历
  14. 计算机组成原理 — GPU 图形处理器
  15. 《ClickHouse原理解析与应用实践》读书笔记(1)
  16. 你说的等保3.0,是不是等保三级测评
  17. 院士给自己博士生写的一封信:博士生每天工作12小时只是一个下限
  18. mysql 备份命令行_mysql命令行备份方法
  19. P315 static关键字
  20. C语言多线程求和并比较时间

热门文章

  1. Python 自动交替排班
  2. KT148A语音芯片音频的生成和压缩以及简单修音_合成方法介绍_V3
  3. 欧盟gmp中的计算机系统验证,欧盟GMP中的计算机系统验证.doc
  4. 关于贫穷和拖延的天才发现
  5. 鲁大师智慧电动车排行:小牛“高光”不再,产品力下降是主因?
  6. day 01 - 1-2-Python 猜数字游戏
  7. 系统引导管理 之 系统引导过程及硬盘分区结构论述
  8. python怎么提交作业_coursera怎么提交编程作业
  9. 软件测试自学吉他和弦,吉他和弦识别algorithm?
  10. 分布式事务的核心思想