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实现读取并显示图片的两种方法
Jan 13 Python
python取代netcat过程分析
Feb 10 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
python多线程并发实例及其优化
Jun 27 Python
python celery分布式任务队列的使用详解
Jul 08 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
python实现用户名密码校验
Mar 18 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
python实现将中文日期转换为数字日期
Jul 14 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
php实现encode64编码类实例
2015/03/24 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
js查找父节点的简单方法
2008/06/28 Javascript
jQuery 使用个人心得
2009/02/26 Javascript
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
Python的高级Git库 Gittle
2014/09/22 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python 线程的五个状态
2020/09/22 Python
美国在线工具商店:Acme Tools
2018/06/26 全球购物
学生自我评价范文
2014/02/02 职场文书
客服部班长工作责任制
2014/02/25 职场文书
就业协议书范本
2014/04/11 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL