前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python轻松抓取微信公众号文章

Python轻松抓取微信公众号文章

原创
作者头像
程序员皮克
修改2021-12-14 11:24:55
1.9K0
修改2021-12-14 11:24:55
举报
文章被收录于专栏:Python2

今天继续向 Python 头条添加数据信息,完成了微信公号的爬虫,接下来会继续通过搜狗的知乎搜索抓取知乎上与 Python 相关的文章、问答。微信公众号的文章链接有些是具有时效性的,过一段时间会变成参数错误而无法访问,但是我们发现从公众号后台点击过去得到的链接却是永久链接,其参数不会改变链接也不会失效,也就是说只要能够获得这些参数就可以得到永久链接。通过观察发现即使从搜狗搜索入口的有时效性的链接访问网页,其源码中也带有这些参数:

所以只要解析这几个参数,就可以构造出永久链接。

首先通过搜狗搜索入口,可以获取 Python 关键词搜索的结果,地址为:

代码语言:javascript
复制
HOST = 'http://weixin.sogou.com/'
entry = HOST + "weixin?type=2&query=Python&page={}"

提取链接、标题和摘要信息:

代码语言:javascript
复制
import requests as req
import re
rInfo = r'<h4[\s\S]*?href="([\s\S]*?)".*?>([\s\S]*?)<\/a>[\s\S]*?<\/h4>\s*<p[\s\S]*?>([\s\S]*?)<\/p>'
​
html  = req.get(entry.format(1)) # 第一页
infos = re.findall(rInfo, html)

由于关键词搜索会在标题或摘要中产生特定格式的标签,需要过滤:

代码语言:javascript
复制
def remove_tags(s):
  return re.sub(r'<.*?>', '', s)

然后根据时效性链接获取文章内容,并从中提取参数信息:

代码语言:javascript
复制
from html import unescape
from urllib.parse import urlencode
​
def weixin_params(link):
  html = req.get(link)
  rParams = r'var (biz =.*?".*?");\s*var (sn =.*?".*?");\s*var (mid =.*?".*?");\s*var (idx =.*?".*?");'
  params = re.findall(rParams, html)
  if len(params) == 0:
    return None
  return {i.split('=')[0].strip(): i.split('=', 1)[1].strip('|" ') for i in params[0]}
​
for (link, title, abstract) in infos:
  title    = unescape(self.remove_tag(title))
  abstract = unescape(self.remove_tag(abstract))
  params   = weixin_params(link)  
  if params is not None:
    link = "http://mp.weixin.qq.com/s?" + urlencode(params)
    print(link, title, abstract)

看到文章最后,如果觉得此篇文章对您有帮助的话,麻烦点个赞再走哦~谢谢阅读

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档