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的身份证号码自动生成程序
Aug 15 Python
python操作mysql代码总结
Jun 01 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
使用Python实现跳帧截取视频帧
May 31 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
python实现关闭第三方窗口的方法
Jun 28 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
Django3中的自定义用户模型实例详解
Aug 23 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
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
php微信开发之谷歌测距
2018/06/14 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
JavaScript实现省市联动效果
2019/11/22 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
django-csrf使用和禁用方式
2020/03/13 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
校友回访母校寄语
2015/02/26 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
2016春季运动会前导词
2015/11/25 职场文书
mysql 带多个条件的查询方式
2021/06/05 MySQL
Python实现排序方法常见的四种
2021/07/15 Python
关于MySQL中explain工具的使用
2023/05/08 MySQL