Python 抓取微信公眾號文章

jsic9405 8年前發布 | 13K 次閱讀 Python Python開發

今天繼續向 Python 頭條添加數據信息,完成了微信公號的爬蟲,接下來會繼續通過搜狗的知乎搜索抓取知乎上與 Python 相關的文章、問答。

微信公眾號的文章鏈接有些是具有時效性的,過一段時間會變成參數錯誤而無法訪問,但是我們發現從公眾號后臺點擊過去得到的鏈接卻是永久鏈接,其參數不會改變鏈接也不會失效,也就是說只要能夠獲得這些參數就可以得到永久鏈接。通過觀察發現即使從搜狗搜索入口的有時效性的鏈接訪問網頁,其源碼中也帶有這些參數:

所以只要解析這幾個參數,就可以構造出永久鏈接。

首先通過搜狗搜索入口,可以獲取 Python 關鍵詞搜索的結果,地址為:

HOST = 'http://weixin.sogou.com/'
entry = HOST + "weixin?type=2&query=Python&page={}"

提取鏈接、標題和摘要信息:

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)

由于關鍵詞搜索會在標題或摘要中產生特定格式的標簽,需要過濾:

def remove_tags(s):
  return re.sub(r'<.*?>', '', s)

然后根據時效性鏈接獲取文章內容,并從中提取參數信息:

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)

由此可以收集到以 Python 為關鍵詞的微信公眾號文章,包括鏈接、標題和摘要。如需文章內容也可以隨時通過鏈接提取,但是為了尊重創作者,請在抓取文章正文的時候請檢查原創信息并合理標注作者及引用信息。

 

來自:http://mp.weixin.qq.com/s?__biz=MzI0NjIxMzE5OQ==&mid=2656697797&idx=1&sn=a8e93bbc960c7564c2054a24e2414145#rd

 

 本文由用戶 jsic9405 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!