Python 抓取微信公众号账号信息的方法


Posted in Python onJune 14, 2019

Python 抓取微信公众号账号信息的方法

搜狗微信搜索提供两种类型的关键词搜索,一种是搜索公众号文章内容,另一种是直接搜索微信公众号。通过微信公众号搜索可以获取公众号的基本信息及最近发布的10条文章,今天来抓取一下微信公众号的账号信息

爬虫

首先通过首页进入,可以按照类别抓取,通过“查看更多”可以找出页面链接规则:

Python 抓取微信公众号账号信息的方法

import requests as req
import re
reTypes = r'id="pc_\d*" uigs="(pc_\d*)">([\s\S]*?)</a>'
Entry = "http://weixin.sogou.com/"
entryPage = req.get(Entry)
allTypes = re.findall(reTypes, getUTF8(entryPage))
for (pcid, category) in allTypes:
  for page in range(1, 100):
    url = 'http://weixin.sogou.com/pcindex/pc/{}/{}.html'.format(pcid, page)
    print(url)
    categoryList = req.get(url)
    if categoryList.status_code != 200:
      break

上面代码通过加载更多页面获取加载列表,进而从其中抓取微信公众号详情页面:

reProfile = r'<li id[\s\S]*?<a href="([\s\S]*?)" rel="external nofollow" '
allProfiles = re.findall(reOAProfile, getUTF8(categoryList))
for profile in allProfiles:
  profilePage = req.get(profile)
  if profilePage.status_code != 200:
    continue

进入详情页面可以获取公众号的 名称/ID/功能介绍/账号主体/头像/二维码/最近10篇文章 等信息:

Python 抓取微信公众号账号信息的方法 

注意事项

详情页面链接: http://mp.weixin.qq.com/profile?src=3×tamp=1477208282&ver=1&signature=8rYJ4QV2w5FXSOy6vGn37sUdcSLa8uoyHv3Ft7CrhZhB4wO-bbWG94aUCNexyB7lqRNSazua-2MROwkV835ilg==

1. 验证码

访问详情页面时有可能需要验证码,自动识别验证码还是很有难度的,因此要做好爬虫的伪装工作。

2. 未保存详情页面链接

详情页面的链接中有两个重要参数: timestamp & signature ,这说明页面链接是有时效性的,所以保存下来应该也没用;

3. 二维码

二维码图片链接同样具有时效性,因此如需要最好将图片下载下来。

用 Flask 展示结果

最近 Python 社区出现了一款异步增强版的 Flask 框架: Sanic ,基于 uvloop 和 httptools ,可以达到异步、更快的效果,但保持了与 Flask 一致的简洁语法。虽然项目刚起步,还有很多基本功能为实现,但已经获得了很多关注( 2,222 Star )。这次本打算用抓取的微信公众号信息基于 Sanic 做一个简单的交互应用,但无奈目前还没有加入模板功能,异步的 redis 驱动也还有 BUG 没解决,所以简单尝试了一下之后还是切换回 Flask + SQLite,先把抓取结果呈现出来,后续有机会再做更新。

安装 Sanic

Python 抓取微信公众号账号信息的方法

Debug Sanic

Python 抓取微信公众号账号信息的方法 

Flask + SQLite App

from flask import g, Flask, render_template
import sqlite3
app = Flask(__name__)
DATABASE = "./db/wx.db"
def get_db():
  db = getattr(g, '_database', None)
  if db is None:
    db = g._database = sqlite3.connect(DATABASE)
  return db
@app.teardown_appcontext
def close_connection(exception):
  db = getattr(g, '_database', None)
  if db is not None:
    db.close()
@app.route("/<int:page>")
@app.route("/")
def hello(page=0):
  cur = get_db().cursor()
  cur.execute("SELECT * FROM wxoa LIMIT 30 OFFSET ?", (page*30, ))
  rows = []
  for row in cur.fetchall():
    rows.append(row)
  return render_template("app.html", wx=rows, cp=page)
if __name__ == "__main__":
  app.run(debug=True, port=8000)

总结

以上所述是小编给大家介绍的Python 抓取微信公众号账号信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python中shutil模块的学习笔记教程
Apr 04 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
python框架中flask知识点总结
Aug 17 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
python config文件的读写操作示例
Sep 27 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
django跳转页面传参的实现
Sep 17 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
python字典一键多值实例代码分享
Jun 14 #Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 #Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 #Python
python tkinter canvas 显示图片的示例
Jun 13 #Python
Python通用函数实现数组计算的方法
Jun 13 #Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 #Python
Pycharm如何打断点的方法步骤
Jun 13 #Python
You might like
30个php操作redis常用方法代码例子
2014/07/05 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
给ECShop添加最新评论
2015/01/07 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
php中序列化与反序列化详解
2017/02/13 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Python如何定义有可选参数的元类
2020/07/31 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
汇源肾宝广告词
2014/03/20 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
材料物理专业求职信
2014/09/01 职场文书
企业务虚会发言材料
2014/10/20 职场文书
关于 Python json中load和loads区别
2021/11/07 Python