解密:python批量爬取公眾號文章
優(yōu)采云 發(fā)布時(shí)間: 2020-09-06 17:45Python批量抓取公共帳戶(hù)文章
轉載:
Python檢索官方帳戶(hù)文章
PS:如果您需要Python學(xué)習資料,可以單擊下面的鏈接自行獲得/ A6Zvjdun
有多種爬網(wǎng)方式。今天,我將與您分享一個(gè)更簡(jiǎn)單的方法,即通過(guò)微信公眾號背景的“超鏈接”功能進(jìn)行爬網(wǎng)。也許有些朋友沒(méi)有聯(lián)系到微信公眾號的后臺,這是一張供大家理解的圖片
這里的一些朋友可能會(huì )說(shuō),我無(wú)法登錄到正式帳戶(hù),該怎么辦? ? ?
沒(méi)關(guān)系,盡管每個(gè)爬蟲(chóng)的目的都是為了獲得我們想要的結果,但這并不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)在于抓取過(guò)程,如何獲取目標數據,因此我們無(wú)法登錄到公眾文章閱讀此內容文章之后,后臺的朋友可能無(wú)法獲得最終的抓取結果,但閱讀此文章后,您也會(huì )有所收獲。
一、初步準備
選擇要爬網(wǎng)的目標官方帳戶(hù)
單擊超鏈接-進(jìn)入編輯超鏈接界面-進(jìn)入我們需要抓取的搜索目標官方帳戶(hù)
今天我們將以“數據分析”官方帳戶(hù)的抓取為例,供大家介紹
單擊官方帳戶(hù)以查看每個(gè)文章對應的標題信息
這次抓取工具的目標是獲得文章標題和相應的鏈接。
二、開(kāi)始抓取
爬行的三個(gè)步驟:
1、請求頁(yè)面
首先導入我們需要使用此采集器的第三方庫
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
找到我們抓取的目標數據的位置,單擊通過(guò)搜索獲得的包,然后獲取目標URL和請求標頭信息
請求網(wǎng)頁(yè)
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url='https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin=0&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
此處的請求標頭信息必須添加cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
網(wǎng)頁(yè)的請求結果如下圖所示。紅色框標記了我們需要的文章標題和文章鏈接。
2、分析網(wǎng)頁(yè)
從網(wǎng)頁(yè)響應結果中我們可以看到,每個(gè)文章的標題和鏈接都位于“ title”標簽和“ cover”標簽的后面,因此我們可以使用正則表達式直接對其進(jìn)行解析
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
解析后的結果如下
3、保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open('C:\Users\Administrator\Desktop\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
到目前為止,該抓取工具已經(jīng)完成,讓我們看一下最終結果
完整代碼