本文在網上找到有三種爬取方法
1.使用訂閱號功能里的查詢鏈接 , (此鏈接現在反扒措施嚴重,爬取幾十頁會封訂閱號,僅供參考,)
詳情請訪問此鏈接:https://cuiqingcai.com/4652.html
2.使用搜狗搜索的微信搜索(此方法只能查看每個微信公眾號的前10條文章)
詳情請訪問此鏈接:https://blog.csdn.net/qiqiyingse/article/details/70050113
3.先抓取公眾號的接口,訪問接口獲取全部文章連接(詳細講解此方法,如下:)
1> 使用抓包工具Charles抓取公眾號接口:
下載Charles請訪問:https://www.charlesproxy.com/download/
使用方法 百度 一大堆
廢話少說,進入正題:
首先登陸微信(電腦,手機端都可以,Charles也可以抓取手機端的接口,不過需要設置,推薦登陸電腦客戶端微信)點擊訂閱號,點進去需要爬取的微信公眾號。
點擊右上角,有一個歷史文章查看
,准備好點擊此處
運行裝好的charles。 然后點擊查看歷史文章的按鈕,此時charles出現一個
,
此接口就是此公眾號的接口,復制此接口,在瀏覽器中打開此網址如圖:
如果提示請在微信中打開此鏈接,有兩個原因:
001 。需設置headers為微信瀏覽器的headers
002 。 鏈接有效時間為半個小時,超過半小時 鏈接里的key值過期,重新獲取一下鏈接即可
谷歌瀏覽器設置headers:
按F12打開開發者選項 , 點擊此處
點擊
點擊
點擊
再次沖輸入微信瀏覽器的headers
微信headers : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.884.400 QQBrowser/9.0.2524.400
.到此,可以進行第二部 selenuim+chromdriver,因為使用的是js加載,
2 。selenuim+chromdriver , 打開上文找到的接口,模擬瀏覽器翻頁,一直翻頁到最下邊,獲取整個文章的鏈接,並保存。
不多贅述,直接上代碼!
1 from selenium import webdriver 2 import time , requests 3 from lxml import etree 4 from pyquery import PyQuery as pq 5 import re 6 7 8 9 url = "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MjM5MTUyNTE3Mg==&scene=124&#wechat_redirect" 10 11 # Chromedriver 12 opt = webdriver.ChromeOptions() 13 # prefs = {'profile.default_content_setting_values': {'images': 2}} 14 # opt.add_experimental_option('prefs', prefs)#這兩行是關閉圖片加載 15 opt.add_argument('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.884.400 QQBrowser/9.0.2524.400')#設置headers 16 # # opt.add_argument('--headless')#此行打開無界面 17 driver = webdriver.Chrome(options=opt) 18 19 driver.get(url) 20 21 top = 1 22 while 1: 23 html = etree.HTML(driver.page_source) 24 downss = html.xpath('//*[@id="js_nomore"]/div/span[1]/@style') 25 if downss[0] == "display: none;": 26 time.sleep(0.5) 27 js = "var q=document.documentElement.scrollTop="+str(top*2000) 28 driver.execute_script(js)#模擬下滑操作 29 top += 1 30 time.sleep(1) 31 else: 32 break 33 html = etree.HTML(driver.page_source) 34 bodyContent = html.xpath('//*[@id="js_history_list"]/div/div/div/div/h4/@hrefs')#獲取文章的所有鏈接 35 36 #保存本地 37 fp = open("./aother.txt", "w+") 38 for i in bodyContent: 39 fp.write(str(i) + "\n") 40 driver.close() 41 fp.close()
接下來就可以挨個爬取文章鏈接,為所欲為了
,到此,歐了。