爬蟲---爬取公眾號內容


  前面寫都是抓取一些網站上的數據,今天工作提前完成了,閑來無事寫一篇如何抓取公眾號數據。

 

爬取公眾號

常見的爬取公眾號有3種方法

1、通過抓包獲取公眾號數據(app端)

2、通過抓包獲取公眾號數據(PC端)

3、通過搜狗搜索公眾號(目前只能顯示前10篇文章)

今天寫的是通過抓取PC端數據獲取公眾號內容。

 

抓取思路

1、選擇需要抓取的公眾號鏈接

通過PC端微信選擇需要抓取的公眾號

 

2、分析公眾號數據格式

通過fiddler查看請求信息

發現我們請求的地址為:https://mp.weixin.qq.com/mp/profile_ext? 后面的為參數

這里會引入一個新的知識點Ajax。

通過分析數據得到(如何分析Ajax方法,下一篇單獨寫)

__biz : 用戶和公眾號之間的唯一id,

uin :用戶的私密id

key :請求的秘鑰,一段時候只會就會失效。

offset :數量

count :每次請求的條數

 

3、通過requests請求獲取數據

import requests
# 請求地址
url = 'https://mp.weixin.qq.com/mp/profile_ext?'
# 添加請求頭
headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
# 請求參數
params={
  '__biz': 'MjM5NDAwMTA2MA==',
        'uin': 'MTczODIyNzg3Nw==',
        'key': 'f0a7c0779e79e92b25b1a3f8779ec559b50f247ff4dd1ece070c17dd08d9dbdc602bbd8c5837e4b68c252507ac45796c2f928b87d1cdfdbd2852c1b48f9e019806524a1c8d633b8886c30d48f6a82a8c',
        'offset': 0,
        'count': 10,
        'action': 'getmsg',
        'f': 'json'
}
# 獲取請求的json格式
r = requests.get(url,headers=headers,params=params,verify = False).json()

 

4、解析請求數據獲取我們想要內容

下圖為我們想要的數據公眾號的名稱,鏈接,圖片等

 通過json格式解析返回的json數據,拿到我們想要的數據

msg_list = json.loads(r['general_msg_list'])
list = msg_list.get('list')
for i in list:
    info_list = i['app_msg_ext_info']
    # 獲取標題
    title = info_list['title']
    print(title)
    # 鏈接
    content_url = info_list['content_url']
    print(content_url)
    #發布時間
    datetime_list = i['comm_msg_info']['datetime']
    datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime_list))
    print(datetime)

請求結果:獲取到了公眾號的標題,公眾號好的鏈接,公眾號號的發布時間

這個地方也可以通過模擬url鏈接信息,然后獲取全部數據,也可以再次請求公眾號詳情數據獲取公眾號發布的內容

 5、分析分頁規律,獲取全部公眾號全部文章信息

通過分析發現控制分頁的的是 offset 和 count 兩個參數,通過觀察發現規律,獲取全部連接數據

# 這里模擬抓取5頁的數據
for i in range(0,5):
    print('開始抓取第%s頁數據'%(i+1))
    params={
      '__biz': 'MjM5NDAwMTA2MA==',
            'uin': 'MTczODIyNzg3Nw==',
            'key': 'f0a7c0779e79e92b25b1a3f8779ec559b50f247ff4dd1ece070c17dd08d9dbdc602bbd8c5837e4b68c252507ac45796c2f928b87d1cdfdbd2852c1b48f9e019806524a1c8d633b8886c30d48f6a82a8c',
            'offset': (i*10)+122,
            'count': (i*10)+10,
            'action': 'getmsg',
            'f': 'json'
    }

 

 

實例代碼

# coding:utf-8
import requests
import json
import urllib3
import time
urllib3.disable_warnings()
# 請求地址
url = 'https://mp.weixin.qq.com/mp/profile_ext?'
# 添加請求頭
headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
# 請求參數
for i in range(0,5):
    print('開始抓取第%s頁數據'%(i+1))
    params={
      '__biz': 'MjM5NDAwMTA2MA==',
            'uin': 'MTczODIyNzg3Nw==',
            'key': 'f0a7c0779e79e92b25b1a3f8779ec559b50f247ff4dd1ece070c17dd08d9dbdc602bbd8c5837e4b68c252507ac45796c2f928b87d1cdfdbd2852c1b48f9e019806524a1c8d633b8886c30d48f6a82a8c',
            'offset': (i*10)+122,
            'count': (i*10)+10,
            'action': 'getmsg',
            'f': 'json'
    }
    # 獲取請求的json格式
    r = requests.get(url,headers=headers,params=params,verify = False).json()
    msg_list = json.loads(r['general_msg_list'])
    list = msg_list.get('list')
    for i in list:
        info_list = i['app_msg_ext_info']
        # 獲取標題
        title = info_list['title']
        print(title)
        # 鏈接
        content_url = info_list['content_url']
        print(content_url)
        #發布時間
        datetime_list = i['comm_msg_info']['datetime']
        datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime_list))
        print(datetime)

 

 

感覺寫的對您有幫助的話,點個關注,持續更新中~~~~堅持每天學習2小時

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM