前言
本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。
作者: 舴艋的舟
PS:如有需要Python學習資料的小夥伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun
爬取的方法多種多樣,今天和大家分享一種較爲簡單的方法,即通過微信公衆號後臺的“超鏈接”功能進行爬取。可能有些小夥伴沒有接觸過微信公衆號的後臺,這裏貼張圖讓大家瞭解一下
到這裏有些小夥伴可能會說,我不能登錄公衆號後臺怎麼辦???
沒關係,雖然我們每次爬蟲目的是爲了得到我們想要的結果,但這並不是我們學習的重點,我們學習的重點是爬蟲的過程,是我們如何去得到目標數據,所以不能登錄公衆號後臺的小夥伴看完這篇文章可能無法獲取到最終的爬取結果,但是看完這篇文章你同樣會有所收穫。
一、前期準備
選擇爬取的目標公衆號
點擊超鏈接–進入編輯超鏈接界面–輸入搜索我們需要爬取的目標公衆號
今天我們就以爬取“數據分析”這個公衆號爲例爲大家進行介紹
點擊公衆號可以看到每篇文章對應的標題信息
我們這次爬蟲的目標就是得到文章標題以及對應的鏈接。
二、開始爬蟲
爬蟲三步曲:
- 請求網頁
- 解析網頁
- 保存數據
1、請求網頁
首先導入我們本次爬蟲需要用到的第三方庫
import re#用來解析網頁
import requests#用來請求網頁
import csv#用來保存數據
import time#用來設置每次爬取間隔的時間
查找我們爬取的目標數據所在位置,點擊通過查找得到的包,得到目標網址以及請求頭信息
請求網頁
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信息必須添加,否則得不到網頁信息
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#得到網頁的文本形式
print(html)
這裏的請求頭信息必須添加上cookie的信息,否則無法得到網頁信息
網頁的請求結果如下圖所示,紅色框標出的爲我們需要的文章標題以及文章鏈接
2、解析網頁
從得到的網頁響應結果中我們可以看到,每篇文章的標題和鏈接都分別在"title"標籤和"cover"標籤後面,所以我們可以採用正則表達式直接對其進行解析
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進行解壓
解析後結果如下
3、保存數據
for data in all:#for循環遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公衆號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
到此本次的爬蟲就已經完成,我們來看一下最終結果
完整代碼
import re#用來解析網頁
import requests#用來請求網頁
import csv#用來保存數據
import time#用來設置每次爬取間隔的時間
# 請求網頁
index=0
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信息必須添加,否則得不到網頁信息
for i in range(2):#設置for循環實現翻頁,爬取多頁內容,這裏range括號內的參數可以更改
url='https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin='+str(index)+'&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#得到網頁的文本形式
# 解析網頁
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個列表中的數據一一對應
# print(list(all))#list是對zip方法得到的數據進行解壓
# 保存數據
for data in all:#for循環遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防出發反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公衆號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5