1. 程式人生 > >Python 爬蟲爬取指定微信公眾號文章

Python 爬蟲爬取指定微信公眾號文章

該方法是依賴於urllib2庫來完成的,首先你需要安裝好你的python環境,然後安裝urllib2庫

程式的起始方法(返回值是公眾號文章列表):

def openUrl():
    print("啟動爬蟲,開啟搜狗搜尋微信介面")
    # 載入頁面
    url = 'http://weixin.sogou.com/weixin?type=1&s_from=input&query=要爬取的公眾號名稱'
    htmlContentObj = urllib2.urlopen(url)
    # 將頁面轉化為文字
    html = htmlContentObj.read()
    # 正則匹配
    str = re.findall(r"http://mp.weixin.qq.com/profile.+==",html)
    # 替換轉義符得到可訪問的連結地址
    tempHref = re.sub(r"&","&",str[0])
    return tempHref

根據獲取到的文章列表的頁的連結地址(注意是文章列表頁面的得連結地址,不是文章的地址)將頁面讀取為文字

# 獲取頁面文字方法
def getHtmlStr(conurl):
    # 相當於把頁面轉化為文字
    response = urllib2.urlopen(conurl)
    # 讀取文字的字串
    htmlStr = response.read()
    return htmlStr

對讀取為文字的頁面進行分析並利用正則匹配獲得公眾號裡面文章的標題,連結地址等內容得json物件

# 文字轉換為所需要的json物件
def htmlToJsonObj(htmlStr):
    # 正則匹配並得到需要的json字串
    jsonObjstr = re.findall(r"{\"list\":\[.+\]\}", htmlStr)
    # 字串轉json
    jsonObj = json.loads(jsonObjstr[len(jsonObjstr)-1])
    return jsonObj

然後從json物件中取出title,拼接url等(我這裡只是獲取了連結地址和標題),將兩個內容分別存在兩個陣列,以json物件的方式返回出去(注意拼接url的時候要替換掉轉義符(&))

# 從json物件中取出所需要的url
def jsonObjToArray(jsonObj):
    hrefs = []
    titles = []
    # url中的&在html中是& ,故需要替換,下面為正則
    patten = re.compile(r"&")
    # 陣列
    arr = jsonObj["list"]
    # 迴圈新增
    for i in range(len(arr)):
        # 每次替換字串
        fixHref = re.sub(patten,"&",arr[i]["app_msg_ext_info"]["content_url"])
        # 新增到陣列
        titles.append(arr[i]["app_msg_ext_info"]["title"])
        hrefs.append("https://mp.weixin.qq.com"+fixHref)
    jsons = {"hrefs":hrefs,"titles":titles}
    return jsons

最後通過啟動程式的方法啟動爬蟲並列印爬取到的資訊

if __name__=='__main__': 
    try:
        hrefs = start()
        count = len(hrefs["hrefs"])
        for i in range(count):
            print("標題:"+hrefs["titles"][i].encode("utf-8"))
            print("爬取到的路徑:"+hrefs["hrefs"][i].encode("utf-8"))
        print("------------->>爬取並列印完畢")
    except Exception as e:
        print(str(e))

程式需要匯入的包

import urllib2
import json
import re

依次賦值以上程式碼,填寫要爬取的公眾號,執行即可