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实现设置windows桌面壁纸代码分享
Mar 28 Python
python自动zip压缩目录的方法
Jun 28 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
Python for循环中的陷阱详解
Jul 13 Python
详解Python函数式编程—高阶函数
Mar 29 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
python计算n的阶乘的方法代码
Oct 25 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
基于python实现音乐播放器代码实例
Jul 01 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 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
php获取数组中重复数据的两种方法
2013/06/28 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
php中in_array函数用法探究
2014/11/25 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
php+mysql实现无限级分类
2015/11/11 PHP
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
javascript计时器详解
2015/02/28 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
django解决跨域请求的问题
2018/11/11 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
大码女装:Ulla Popken
2019/08/06 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
2014年乡镇植树节活动方案
2014/02/28 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
保险内勤岗位职责
2015/04/13 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL