python下载微信公众号相关文章


Posted in Python onFebruary 26, 2019

本文实例为大家分享了python下载微信公众号相关文章的具体代码,供大家参考,具体内容如下

目的:从零开始学自动化测试公众号中下载“pytest"一系列文档

1、搜索微信号文章关键字搜索

2、对搜索结果前N页进行解析,获取文章标题和对应URL

主要使用的是requests和bs4中的Beautifulsoup

Weixin.py

import requests
from urllib.parse import quote
from bs4 import BeautifulSoup
import re
from WeixinSpider.HTML2doc import MyHTMLParser
 
class WeixinSpider(object):
 
 def __init__(self, gzh_name, pageno,keyword):
  self.GZH_Name = gzh_name
  self.pageno = pageno
  self.keyword = keyword.lower()
  self.page_url = []
  self.article_list = []
  self.headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
  self.timeout = 5
  # [...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
  # re+ 匹配1个或多个的表达式。
  self.pattern = r'[\\/:*?"<>|\r\n]+'
 
 def get_page_url(self):
  for i in range(1,self.pageno+1):
   # https://weixin.sogou.com/weixin?query=从零开始学自动化测试&_sug_type_=&s_from=input&_sug_=n&type=2&page=2&ie=utf8
   url = "https://weixin.sogou.com/weixin?query=%s&_sug_type_=&s_from=input&_sug_=n&type=2&page=%s&ie=utf8" \
     % (quote(self.GZH_Name),i)
   self.page_url.append(url)
 
 def get_article_url(self):
  article = {}
  for url in self.page_url:
   response = requests.get(url,headers=self.headers,timeout=self.timeout)
   result = BeautifulSoup(response.text, 'html.parser')
   articles = result.select('ul[class="news-list"] > li > div[class="txt-box"] > h3 > a ')
   for a in articles:
    # print(a.text)
    # print(a["href"])
    if self.keyword in a.text.lower():
      new_text=re.sub(self.pattern,"",a.text)
      article[new_text] = a["href"]
      self.article_list.append(article)
 
 
 
headers = {'User-Agent':
      'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
timeout = 5
gzh_name = 'pytest文档'
My_GZH = WeixinSpider(gzh_name,5,'pytest')
My_GZH.get_page_url()
# print(My_GZH.page_url)
My_GZH.get_article_url()
# print(My_GZH.article_list)
for article in My_GZH.article_list:
 for (key,value) in article.items():
  url=value
  html_response = requests.get(url,headers=headers,timeout=timeout)
  myHTMLParser = MyHTMLParser(key)
  myHTMLParser.feed(html_response.text)
  myHTMLParser.doc.save(myHTMLParser.docfile)

HTML2doc.py

from html.parser import HTMLParser
import requests
from docx import Document
import re
from docx.shared import RGBColor
import docx
 
 
class MyHTMLParser(HTMLParser):
 def __init__(self,docname):
  HTMLParser.__init__(self)
  self.docname=docname
  self.docfile = r"D:\pytest\%s.doc"%self.docname
  self.doc=Document()
  self.title = False
  self.code = False
  self.text=''
  self.processing =None
  self.codeprocessing =None
  self.picindex = 1
  self.headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
  self.timeout = 5
 
 def handle_startendtag(self, tag, attrs):
  # 图片的处理比较复杂,首先需要找到对应的图片的url,然后下载并写入doc中
  if tag == "img":
   if len(attrs) == 0:
    pass
   else:
    for (variable, value) in attrs:
     if variable == "data-type":
      picname = r"D:\pytest\%s%s.%s" % (self.docname, self.picindex, value)
      # print(picname)
     if variable == "data-src":
      picdata = requests.get(value, headers=self.headers, timeout=self.timeout)
      # print(value)
    self.picindex = self.picindex + 1
    # print(self.picindex)
    with open(picname, "wb") as pic:
     pic.write(picdata.content)
    try:
     self.doc.add_picture(picname)
    except docx.image.exceptions.UnexpectedEndOfFileError as e:
     print(e)
 
 def handle_starttag(self, tag, attrs):
  if re.match(r"h(\d)", tag):
   self.title = True
  if tag =="p":
   self.processing = tag
  if tag == "code":
   self.code = True
   self.codeprocessing = tag
 
 def handle_data(self, data):
   if self.title == True:
    self.doc.add_heading(data, level=2)
   # if self.in_div == True and self.tag == "p":
   if self.processing:
    self.text = self.text + data
   if self.code == True:
    p =self.doc.add_paragraph()
    run=p.add_run(data)
    run.font.color.rgb = RGBColor(111,111,111)
 
 def handle_endtag(self, tag):
  self.title = False
  # self.code = False
  if tag == self.processing:
   self.doc.add_paragraph(self.text)
 
   self.processing = None
   self.text=''
  if tag == self.codeprocessing:
   self.code =False

运行结果:

python下载微信公众号相关文章

缺少部分文档,如pytest文档4,是因为搜狗微信文章搜索结果中就没有

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 命令行参数sys.argv
Sep 06 Python
Python随机生成数模块random使用实例
Apr 13 Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
python 日期排序的实例代码
Jul 11 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 Python
python处理DICOM并计算三维模型体积
Feb 26 #Python
学习python可以干什么
Feb 26 #Python
Python3几个常见问题的处理方法
Feb 26 #Python
django 自定义过滤器的实现
Feb 26 #Python
使用Python将Mysql的查询数据导出到文件的方法
Feb 25 #Python
Python-ElasticSearch搜索查询的讲解
Feb 25 #Python
Python2 Selenium元素定位的实现(8种)
Feb 25 #Python
You might like
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
php中使用redis队列操作实例代码
2013/02/07 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
python与idea的集成的实现
2020/11/20 Python
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
少先队学雷锋活动总结范文
2014/03/09 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
公关活动策划方案
2014/05/25 职场文书
学校百日安全活动总结
2015/05/07 职场文书
《实心球》教学反思
2016/02/23 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL