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多线程实例教程
Sep 06 Python
用map函数来完成Python并行任务的简单示例
Apr 02 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
简单了解python关系(比较)运算符
Jul 08 Python
python文件读写代码实例
Oct 21 Python
python3 pillow模块实现简单验证码
Oct 31 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
python statsmodel的使用
Dec 21 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
js 事件小结 表格区别
2007/08/13 Javascript
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python使用sorted排序的方法小结
2017/07/28 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python使用tornado实现登录和登出
2018/07/28 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
linux面试相关问题
2012/08/11 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
教师应聘自荐信范文
2014/03/14 职场文书
银行内勤岗位职责
2014/04/09 职场文书
房租涨价通知
2015/04/23 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
消防宣传语大全
2015/07/13 职场文书