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重新引入被覆盖的自带function
Jul 16 Python
python之wxPython菜单使用详解
Sep 28 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
解决python 输出是省略号的问题
Apr 19 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
python 生成器和迭代器的原理解析
Oct 12 Python
Python如何使用函数做字典的值
Nov 30 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
Python进度条的使用
May 17 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
PHP+ajax 无刷新删除数据
2010/02/20 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
推荐dojo学习笔记
2007/03/24 Javascript
XML的代替者----JSON
2007/07/21 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
Python处理中文标点符号大集合
2018/05/14 Python
python事件驱动event实现详解
2018/11/21 Python
python pandas时序处理相关功能详解
2019/07/03 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
商场活动策划方案
2014/01/24 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
人民调解员培训方案
2014/06/05 职场文书
护士实习求职信
2014/06/22 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
大学班长竞选稿
2015/11/20 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
python如何获取网络数据
2021/04/11 Python
MySQL sql_mode的使用详解
2021/05/08 MySQL
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript