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实现数值积分的Simpson方法实例分析
Jun 05 Python
python实现画一颗树和一片森林
Jun 25 Python
对Python中数组的几种使用方法总结
Jun 28 Python
python 中字典嵌套列表的方法
Jul 03 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
Python删除n行后的其他行方法
Jan 28 Python
关于numpy数组轴的使用详解
Dec 05 Python
python3 简单实现组合设计模式
Jul 02 Python
简述python&amp;pytorch 随机种子的实现
Oct 07 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 Python
python tkinter Entry控件的焦点移动操作
May 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
PHP实现HTML页面静态化的方法
2015/11/04 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
python itchat实现微信自动回复的示例代码
2017/08/14 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
空中乘务员岗位职责
2014/03/08 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
店长岗位职责
2015/02/11 职场文书