亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

querylist采集微信公眾號文章

querylist采集微信公眾號文章

querylist采集微信公眾號文章(querylist采集微信公眾號文章列表url,不能傳遞給其他用戶(hù))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2022-02-19 11:01 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章列表url,不能傳遞給其他用戶(hù))
  querylist采集微信公眾號文章列表url,如果是公眾號文章的話(huà),采集下一篇文章,
  這是一篇微信公眾號文章的下一篇文章,即不能傳遞給其他用戶(hù),也不能傳遞給群發(fā)外鏈的用戶(hù),如果不想發(fā)給群發(fā)外鏈的朋友,
  基本上常用的方法還是爬蟲(chóng),爬公眾號文章內容。webservice什么的,
  這個(gè)爬蟲(chóng)還行,不過(guò)一般不會(huì )用,因為流量來(lái)源沒(méi)準,有很大可能找不到真正的爬蟲(chóng)。
  你可以把文章列表分段遍歷
  這個(gè)還是有點(diǎn)不錯的,可以采集公眾號內容,
  可以考慮用pythonflask框架寫(xiě)爬蟲(chóng).用beautifulsoup庫,基本可以滿(mǎn)足你的需求.beautifulsoup不是為爬蟲(chóng)服務(wù)的,他是做api/xpath解析或xml解析用的.你這個(gè)是轉換列表文章,讓別人來(lái)爬你的吧.
  beautifulsoup寫(xiě)爬蟲(chóng)還行吧
  這個(gè)好像不能,
  先要弄清楚一個(gè)事情,網(wǎng)站內容都是微信公眾號服務(wù)號提供的,不能像知乎這樣存。
  可以用知乎采集
  你有兩個(gè)選擇一個(gè)是用爬蟲(chóng),一個(gè)是用思科的機器人軟件。兩個(gè)都是工具沒(méi)有內容抽取這個(gè)功能。
  拿爬蟲(chóng)去爬微信公眾號文章或者qq空間文章或者百度新聞看看有沒(méi)有給文章貼鏈接。 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章列表url,不能傳遞給其他用戶(hù))
  querylist采集微信公眾號文章列表url,如果是公眾號文章的話(huà),采集下一篇文章,
  這是一篇微信公眾號文章的下一篇文章,即不能傳遞給其他用戶(hù),也不能傳遞給群發(fā)外鏈的用戶(hù),如果不想發(fā)給群發(fā)外鏈的朋友,
  基本上常用的方法還是爬蟲(chóng),爬公眾號文章內容。webservice什么的,
  這個(gè)爬蟲(chóng)還行,不過(guò)一般不會(huì )用,因為流量來(lái)源沒(méi)準,有很大可能找不到真正的爬蟲(chóng)。
  你可以把文章列表分段遍歷
  這個(gè)還是有點(diǎn)不錯的,可以采集公眾號內容,
  可以考慮用pythonflask框架寫(xiě)爬蟲(chóng).用beautifulsoup庫,基本可以滿(mǎn)足你的需求.beautifulsoup不是為爬蟲(chóng)服務(wù)的,他是做api/xpath解析或xml解析用的.你這個(gè)是轉換列表文章,讓別人來(lái)爬你的吧.
  beautifulsoup寫(xiě)爬蟲(chóng)還行吧
  這個(gè)好像不能,
  先要弄清楚一個(gè)事情,網(wǎng)站內容都是微信公眾號服務(wù)號提供的,不能像知乎這樣存。
  可以用知乎采集
  你有兩個(gè)選擇一個(gè)是用爬蟲(chóng),一個(gè)是用思科的機器人軟件。兩個(gè)都是工具沒(méi)有內容抽取這個(gè)功能。
  拿爬蟲(chóng)去爬微信公眾號文章或者qq空間文章或者百度新聞看看有沒(méi)有給文章貼鏈接。

querylist采集微信公眾號文章(querylist采集微信公眾號文章存儲格式接口介紹參考資料)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 146 次瀏覽 ? 2022-02-18 10:01 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章存儲格式接口介紹參考資料)
  querylist采集微信公眾號文章,發(fā)布到一個(gè)querylist文件,
  一、querylist接口:1.
  1、文章行接口#{0}即文章的標題#{1}即文章的作者#{2}即文章的標簽。
  2、文章列表接口2.
  1、文章列表類(lèi):#{1}#{2}即文章的標題:#{2}#{3}即文章的標簽:#{3}#{4}即分享鏈接:#{4}2.
  2、圖文消息類(lèi):#{1}#{2}#{3}即圖文消息的標題:#{2}#{3}#{4}即分享鏈接:#{4}2.
  3、公眾號文章列表接口#{0}接口介紹#{1}接口介紹#{2}接口介紹#{3}接口介紹參考資料:對于文章列表,每一個(gè)標題后面都需要加#{0},以下是圖文消息的二維碼。
  二、存儲格式querylist接口中的string字符串存儲格式如下:order+*,即***的序列。
  java對象,可以讓querylist支持索引并存儲二級索引:在mybatis中,或者在rabbitmq中,索引可以支持一個(gè)或多個(gè),但是如果接收的是二級索引的話(huà),需要提供一個(gè)名稱(chēng)實(shí)體:@mapped(mappedinfo,mappedname)publicclassorderedescription{@value("id")privateintid;@value("name")privatestringname;}2。
  可以建立多個(gè)查詢(xún),但是有時(shí)候,并不能滿(mǎn)足查詢(xún)的很多需求@mapped(mappedinfo,mappedname)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){returnnull;}//。
  1)建立一個(gè)新的查詢(xún)@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){try{newquerylist();}catch(exceptione){e。printstacktrace();}}//。
  2)對查詢(xún)結果進(jìn)行修改update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。printstacktrace();2。2??梢圆榭床煌念?lèi)型的文章,endpoint=null不代表不能查詢(xún),代表建立新的查詢(xún)@mapped(mappedinfo。
  id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。
  printstacktrace();}}}2。3??梢詫Ψ祷亟Y果集進(jìn)行排序@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)。 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章存儲格式接口介紹參考資料)
  querylist采集微信公眾號文章,發(fā)布到一個(gè)querylist文件,
  一、querylist接口:1.
  1、文章行接口#{0}即文章的標題#{1}即文章的作者#{2}即文章的標簽。
  2、文章列表接口2.
  1、文章列表類(lèi):#{1}#{2}即文章的標題:#{2}#{3}即文章的標簽:#{3}#{4}即分享鏈接:#{4}2.
  2、圖文消息類(lèi):#{1}#{2}#{3}即圖文消息的標題:#{2}#{3}#{4}即分享鏈接:#{4}2.
  3、公眾號文章列表接口#{0}接口介紹#{1}接口介紹#{2}接口介紹#{3}接口介紹參考資料:對于文章列表,每一個(gè)標題后面都需要加#{0},以下是圖文消息的二維碼。
  二、存儲格式querylist接口中的string字符串存儲格式如下:order+*,即***的序列。
  java對象,可以讓querylist支持索引并存儲二級索引:在mybatis中,或者在rabbitmq中,索引可以支持一個(gè)或多個(gè),但是如果接收的是二級索引的話(huà),需要提供一個(gè)名稱(chēng)實(shí)體:@mapped(mappedinfo,mappedname)publicclassorderedescription{@value("id")privateintid;@value("name")privatestringname;}2。
  可以建立多個(gè)查詢(xún),但是有時(shí)候,并不能滿(mǎn)足查詢(xún)的很多需求@mapped(mappedinfo,mappedname)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){returnnull;}//。
  1)建立一個(gè)新的查詢(xún)@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){try{newquerylist();}catch(exceptione){e。printstacktrace();}}//。
  2)對查詢(xún)結果進(jìn)行修改update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。printstacktrace();2。2??梢圆榭床煌念?lèi)型的文章,endpoint=null不代表不能查詢(xún),代表建立新的查詢(xún)@mapped(mappedinfo。
  id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。
  printstacktrace();}}}2。3??梢詫Ψ祷亟Y果集進(jìn)行排序@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 183 次瀏覽 ? 2022-02-15 18:00 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本,直接安裝即可。安裝后直接運行C:\Program Files\nodejs\npm.cmd會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  只要把一個(gè)安卓模擬器放到網(wǎng)上,有很多。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ----------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )使用這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的web界面,用來(lái)顯示http傳輸數據。
  
  點(diǎn)擊上方紅框內的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)公眾號文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框內是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部暢通了,就可以往下走。
  這里我們是靠代理服務(wù)抓取微信數據,但是不能自己抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順理成章理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require('http');
11 http.get('http://xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on('data', function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \'(.*?)\';/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require('http');
36 http.get('xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on('data', function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require('http');
65 http.get('http://xxx/getWxPost', function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on('data', function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。有需要的可以試試。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本,直接安裝即可。安裝后直接運行C:\Program Files\nodejs\npm.cmd會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  只要把一個(gè)安卓模擬器放到網(wǎng)上,有很多。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ----------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )使用這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的web界面,用來(lái)顯示http傳輸數據。
  
  點(diǎn)擊上方紅框內的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)公眾號文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框內是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部暢通了,就可以往下走。
  這里我們是靠代理服務(wù)抓取微信數據,但是不能自己抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順理成章理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require('http');
11 http.get('http://xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on('data', function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \'(.*?)\';/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require('http');
36 http.get('xxx/getWxHis', function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on('data', function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require('http');
65 http.get('http://xxx/getWxPost', function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on('data', function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。有需要的可以試試。

querylist采集微信公眾號文章(搜狗搜索有個(gè)不足實(shí)現公眾號的爬蟲(chóng)需要安裝 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2022-02-14 04:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(搜狗搜索有個(gè)不足實(shí)現公眾號的爬蟲(chóng)需要安裝
)
  因為搜狗搜索有微信公眾號搜索的接口,所以可以通過(guò)這個(gè)接口實(shí)現公眾號的爬蟲(chóng)。
  
  需要安裝幾個(gè)python庫:selenium、pyquery
  我們也用到了phantomjs.exe,需要自己下載,然后放到我們自己的python項目下。
  在輸入框中輸入你要爬取的公眾號的微信號,然后搜索公眾號,
  
  可以出現搜索結果,進(jìn)入首頁(yè)可以看到公眾號最近發(fā)布的文章,點(diǎn)擊標題查看文章的內容
  
  這種思路,可以在網(wǎng)頁(yè)上查看微信公眾號的推送,實(shí)現公眾號爬蟲(chóng);但搜狗搜索有個(gè)缺點(diǎn),只能查看公眾號最近發(fā)布的10條推送,無(wú)法查看過(guò)去的歷史記錄。
  有了爬蟲(chóng)思路后,就開(kāi)始執行流程,先拿到搜狗搜索的接口
  通過(guò)這個(gè)接口可以得到公眾號首頁(yè)的入口,文章列表,文章內容,用python寫(xiě)爬蟲(chóng)的實(shí)現,下面是運行結果,得到< @文章 標題、文章 鏈接、文章 簡(jiǎn)要說(shuō)明、發(fā)表時(shí)間、封面圖片鏈接、文章 內容,并將抓取的信息保存到文本文檔中,文章@ > 公眾號爬取結束。
  廢話(huà)不多說(shuō),代碼如下:
  
from pyquery import PyQuery as pq
from selenium import webdriver
import os
import re
import requests
import time
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
browser = webdriver.PhantomJS(executable_path=r'phantomjs.exe')
browser.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = browser.execute_script("return document.documentElement.outerHTML")
browser.close()
return html
def log(msg):
print('%s: %s' % (time.strftime('%Y-%m-%d %H:%M:%S'), msg))
# 創(chuàng )建公眾號命名的文件夾
def create_dir():
if not os.path.exists(keyword):
os.makedirs(keyword)
# 將獲取到的文章轉換為字典
def switch_articles_to_list(articles):
articles_list = []
i = 1
if articles:
for article in articles.items():
log(u'開(kāi)始整合(%d/%d)' % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article, i))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article, i):
article_dict = {}
# 獲取標題
title = article('h4[class="weui_media_title"]').text().strip()
log(u'標題是: %s' % title)
# 獲取標題對應的地址
url = 'http://mp.weixin.qq.com' + article('h4[class="weui_media_title"]').attr('hrefs')
log(u'地址為: %s' % url)
# 獲取概要內容
summary = article('.weui_media_desc').text()
log(u'文章簡(jiǎn)述: %s' % summary)
# 獲取文章發(fā)表時(shí)間
date = article('.weui_media_extra_info').text().strip()
log(u'發(fā)表時(shí)間為: %s' % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 獲取文章內容(pyQuery.text / html)
#log('content是')
#log(parse_content_by_url(url))
content = parse_content_by_url(url).text()
log('獲取到content')
# 存儲文章到本地
#content_file_title = keyword + '/' + str(i) + '_' + title + '_' + date + '.html'
#with open(content_file_title, 'w', encoding='utf-8') as f:
# f.write(content)
content_title = keyword + '/' + keyword + '.txt'
with open(content_title, 'a', encoding='utf-8') as f:
print('第', i, '條', file=f)
print('title:', title, file=f)
print('url:', url, file=f)
print('summary:', summary, file=f)
print('date:', date, file=f)
print('pic:', pic, file=f)
print('content:', content, file=f)
print(file=f)
log('寫(xiě)入content')
article_dict = {
'title': title,
'url': url,
'summary': summary,
'date': date,
'pic': pic,
'content': content
}
return article_dict
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article('.weui_media_hd').attr('style')
p = re.compile(r'background-image:url\((.*?)\)')
rs = p.findall(pic)
log(u'封面圖片是:%s ' % rs[0] if len(rs) > 0 else '')
return rs[0] if len(rs) > 0 else ''
# 獲取文章頁(yè)面詳情
def parse_content_by_url(url):
page_html = get_selenium_js_html(url)
return pq(page_html)('#js_content')
'''程序入口'''
keyword = 'python'
create_dir()
url = 'http://weixin.sogou.com/weixin?query=%s' % keyword
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
try:
log(u'開(kāi)始調用sougou搜索引擎')
r = requests.get(url, headers=headers)
r.raise_for_status()
print(r.status_code)
print(r.request.url)
print(len(r.text))
#print(r.text)
#print(re.Session().get(url).text)
except:
print('爬取失敗')
# 獲得公眾號主頁(yè)地址
doc = pq(r.text)
log(u'獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url')
home_url = doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
log(u'獲取wx_url成功,%s' % home_url)
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
log(u'開(kāi)始調用selenium渲染公眾號主頁(yè)html')
html = get_selenium_js_html(home_url)
#有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試
if pq(html)('#verify_change').text() != '':
log(u'爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試')
else:
log(u'調用selenium渲染html完成,開(kāi)始解析公眾號文章')
doc = pq(html)
articles = doc('div[class="weui_media_box appmsg"]')
#print(articles)
log(u'抓取到微信文章%d篇' % len(articles))
article_list = switch_articles_to_list(articles)
print(article_list)
log('程序結束') 查看全部

  querylist采集微信公眾號文章(搜狗搜索有個(gè)不足實(shí)現公眾號的爬蟲(chóng)需要安裝
)
  因為搜狗搜索有微信公眾號搜索的接口,所以可以通過(guò)這個(gè)接口實(shí)現公眾號的爬蟲(chóng)。
  
  需要安裝幾個(gè)python庫:selenium、pyquery
  我們也用到了phantomjs.exe,需要自己下載,然后放到我們自己的python項目下。
  在輸入框中輸入你要爬取的公眾號的微信號,然后搜索公眾號,
  
  可以出現搜索結果,進(jìn)入首頁(yè)可以看到公眾號最近發(fā)布的文章,點(diǎn)擊標題查看文章的內容
  
  這種思路,可以在網(wǎng)頁(yè)上查看微信公眾號的推送,實(shí)現公眾號爬蟲(chóng);但搜狗搜索有個(gè)缺點(diǎn),只能查看公眾號最近發(fā)布的10條推送,無(wú)法查看過(guò)去的歷史記錄。
  有了爬蟲(chóng)思路后,就開(kāi)始執行流程,先拿到搜狗搜索的接口
  通過(guò)這個(gè)接口可以得到公眾號首頁(yè)的入口,文章列表,文章內容,用python寫(xiě)爬蟲(chóng)的實(shí)現,下面是運行結果,得到< @文章 標題、文章 鏈接、文章 簡(jiǎn)要說(shuō)明、發(fā)表時(shí)間、封面圖片鏈接、文章 內容,并將抓取的信息保存到文本文檔中,文章@ > 公眾號爬取結束。
  廢話(huà)不多說(shuō),代碼如下:
  
from pyquery import PyQuery as pq
from selenium import webdriver
import os
import re
import requests
import time
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
browser = webdriver.PhantomJS(executable_path=r'phantomjs.exe')
browser.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = browser.execute_script("return document.documentElement.outerHTML")
browser.close()
return html
def log(msg):
print('%s: %s' % (time.strftime('%Y-%m-%d %H:%M:%S'), msg))
# 創(chuàng )建公眾號命名的文件夾
def create_dir():
if not os.path.exists(keyword):
os.makedirs(keyword)
# 將獲取到的文章轉換為字典
def switch_articles_to_list(articles):
articles_list = []
i = 1
if articles:
for article in articles.items():
log(u'開(kāi)始整合(%d/%d)' % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article, i))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article, i):
article_dict = {}
# 獲取標題
title = article('h4[class="weui_media_title"]').text().strip()
log(u'標題是: %s' % title)
# 獲取標題對應的地址
url = 'http://mp.weixin.qq.com' + article('h4[class="weui_media_title"]').attr('hrefs')
log(u'地址為: %s' % url)
# 獲取概要內容
summary = article('.weui_media_desc').text()
log(u'文章簡(jiǎn)述: %s' % summary)
# 獲取文章發(fā)表時(shí)間
date = article('.weui_media_extra_info').text().strip()
log(u'發(fā)表時(shí)間為: %s' % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 獲取文章內容(pyQuery.text / html)
#log('content是')
#log(parse_content_by_url(url))
content = parse_content_by_url(url).text()
log('獲取到content')
# 存儲文章到本地
#content_file_title = keyword + '/' + str(i) + '_' + title + '_' + date + '.html'
#with open(content_file_title, 'w', encoding='utf-8') as f:
# f.write(content)
content_title = keyword + '/' + keyword + '.txt'
with open(content_title, 'a', encoding='utf-8') as f:
print('第', i, '條', file=f)
print('title:', title, file=f)
print('url:', url, file=f)
print('summary:', summary, file=f)
print('date:', date, file=f)
print('pic:', pic, file=f)
print('content:', content, file=f)
print(file=f)
log('寫(xiě)入content')
article_dict = {
'title': title,
'url': url,
'summary': summary,
'date': date,
'pic': pic,
'content': content
}
return article_dict
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article('.weui_media_hd').attr('style')
p = re.compile(r'background-image:url\((.*?)\)')
rs = p.findall(pic)
log(u'封面圖片是:%s ' % rs[0] if len(rs) > 0 else '')
return rs[0] if len(rs) > 0 else ''
# 獲取文章頁(yè)面詳情
def parse_content_by_url(url):
page_html = get_selenium_js_html(url)
return pq(page_html)('#js_content')
'''程序入口'''
keyword = 'python'
create_dir()
url = 'http://weixin.sogou.com/weixin?query=%s' % keyword
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
try:
log(u'開(kāi)始調用sougou搜索引擎')
r = requests.get(url, headers=headers)
r.raise_for_status()
print(r.status_code)
print(r.request.url)
print(len(r.text))
#print(r.text)
#print(re.Session().get(url).text)
except:
print('爬取失敗')
# 獲得公眾號主頁(yè)地址
doc = pq(r.text)
log(u'獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url')
home_url = doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
log(u'獲取wx_url成功,%s' % home_url)
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
log(u'開(kāi)始調用selenium渲染公眾號主頁(yè)html')
html = get_selenium_js_html(home_url)
#有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試
if pq(html)('#verify_change').text() != '':
log(u'爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試')
else:
log(u'調用selenium渲染html完成,開(kāi)始解析公眾號文章')
doc = pq(html)
articles = doc('div[class="weui_media_box appmsg"]')
#print(articles)
log(u'抓取到微信文章%d篇' % len(articles))
article_list = switch_articles_to_list(articles)
print(article_list)
log('程序結束')

querylist采集微信公眾號文章(excel添加索引就行的兩種解決方法:)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2022-02-12 02:02 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(excel添加索引就行的兩種解決方法:)
  querylist采集微信公眾號文章鏈接,轉換為excel格式,用rust實(shí)現中間轉換器。定義excel轉換器對象publicstaticlistexceltransform.newarray(nextnext,exceltype.literal,prev){prev.add(nextnext);returnprev;}定義prev對象:rust>>>arr:=newrust()>>>arr[5]:=prev>>>arr[5]list.newarray(nextnext,exceltype.pointer).add_many_numbers(nextnext,。
  1)>>>arr[5]:=newrust()>>>arr[1]:=prev>>>arr[1]newarray
  5).add_many_numbers
  0)轉換后為:tarray:=prevrust>>>arr:=arr[5]newarray
  0)>>>arr[1]:=prevlist.newarray
  1)>>>arr[5]:=arr[5]
  excel添加索引就行。
  說(shuō)下這個(gè)問(wèn)題的兩種解決方法:1.每一個(gè)excel文件作為一個(gè)字典。每一個(gè)字符對應一個(gè)key。每一個(gè)key值對應一個(gè)value。對于輸入的value,可以一次生成多列,int或者long變量??梢员容^多個(gè)一行輸入的excel文件,實(shí)時(shí)添加到字典,把所有輸入的value組合成一個(gè)詞典。也可以根據string輸入的唯一標識+某個(gè)trait定義出來(lái)的對應關(guān)系。
  2.對于excel數據量更多的話(huà),可以采用用string和property機制來(lái)處理,可以自定義各個(gè)headerdeleteheaderint等。 查看全部

  querylist采集微信公眾號文章(excel添加索引就行的兩種解決方法:)
  querylist采集微信公眾號文章鏈接,轉換為excel格式,用rust實(shí)現中間轉換器。定義excel轉換器對象publicstaticlistexceltransform.newarray(nextnext,exceltype.literal,prev){prev.add(nextnext);returnprev;}定義prev對象:rust>>>arr:=newrust()>>>arr[5]:=prev>>>arr[5]list.newarray(nextnext,exceltype.pointer).add_many_numbers(nextnext,。
  1)>>>arr[5]:=newrust()>>>arr[1]:=prev>>>arr[1]newarray
  5).add_many_numbers
  0)轉換后為:tarray:=prevrust>>>arr:=arr[5]newarray
  0)>>>arr[1]:=prevlist.newarray
  1)>>>arr[5]:=arr[5]
  excel添加索引就行。
  說(shuō)下這個(gè)問(wèn)題的兩種解決方法:1.每一個(gè)excel文件作為一個(gè)字典。每一個(gè)字符對應一個(gè)key。每一個(gè)key值對應一個(gè)value。對于輸入的value,可以一次生成多列,int或者long變量??梢员容^多個(gè)一行輸入的excel文件,實(shí)時(shí)添加到字典,把所有輸入的value組合成一個(gè)詞典。也可以根據string輸入的唯一標識+某個(gè)trait定義出來(lái)的對應關(guān)系。
  2.對于excel數據量更多的話(huà),可以采用用string和property機制來(lái)處理,可以自定義各個(gè)headerdeleteheaderint等。

querylist采集微信公眾號文章( 一種微信公眾號是否有敏感詞匯的檢測方法及裝置)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 208 次瀏覽 ? 2022-02-10 22:22 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
一種微信公眾號是否有敏感詞匯的檢測方法及裝置)
  
  本發(fā)明屬于微信公眾號廣告投放領(lǐng)域,具體涉及一種微信公眾號是否存在敏感詞的檢測方法及裝置。
  背景技術(shù):
  微信公眾平臺主要面向名人、政府、媒體、企業(yè)等機構發(fā)起的合作推廣業(yè)務(wù)。在這里,品牌可以通過(guò)渠道推廣到線(xiàn)上平臺。微信公眾號廣告是一種常見(jiàn)的廣告推廣方式。
  但微信公眾號是否帶有政治色彩是企業(yè)在投放廣告時(shí)需要考慮的,以免出現不必要的問(wèn)題,影響企業(yè)的投資回報。投資回報是指應該通過(guò)投資獲得回報的價(jià)值,即企業(yè)從一項投資活動(dòng)中獲得的經(jīng)濟回報,需要能夠判斷微信公眾號是否有敏感詞的技術(shù)。
  技術(shù)實(shí)施要素:
  本發(fā)明提供一種檢測微信公眾號是否有敏感詞的方法及裝置,旨在解決無(wú)法判斷微信公眾號是否有敏感詞的問(wèn)題。
  本發(fā)明是這樣實(shí)現的,一種檢測微信公眾號是否有敏感詞的方法,包括以下步驟:
  s1、提取微信公眾號歷史文章數據,手動(dòng)標注文章是否有敏感詞;
  s2、清洗文章數據,訓練word2vec模型作為訓練數據,分割文章詞得到embedding,最后訓練雙向bilstm深度學(xué)習模型;
  s3、獲取微信公眾號預設數量的待預測歷史文章數據,清洗數據,獲取embedding,使用訓練好的雙向bilstm深度學(xué)習模型進(jìn)行預測,每< @文章是否有敏感詞匯的預測結果;
<p>s4、根據預設個(gè)數文章中有??敏感詞的文章個(gè)數,計算出有敏感詞的文章個(gè)數占所有 查看全部

  querylist采集微信公眾號文章(
一種微信公眾號是否有敏感詞匯的檢測方法及裝置)
  
  本發(fā)明屬于微信公眾號廣告投放領(lǐng)域,具體涉及一種微信公眾號是否存在敏感詞的檢測方法及裝置。
  背景技術(shù):
  微信公眾平臺主要面向名人、政府、媒體、企業(yè)等機構發(fā)起的合作推廣業(yè)務(wù)。在這里,品牌可以通過(guò)渠道推廣到線(xiàn)上平臺。微信公眾號廣告是一種常見(jiàn)的廣告推廣方式。
  但微信公眾號是否帶有政治色彩是企業(yè)在投放廣告時(shí)需要考慮的,以免出現不必要的問(wèn)題,影響企業(yè)的投資回報。投資回報是指應該通過(guò)投資獲得回報的價(jià)值,即企業(yè)從一項投資活動(dòng)中獲得的經(jīng)濟回報,需要能夠判斷微信公眾號是否有敏感詞的技術(shù)。
  技術(shù)實(shí)施要素:
  本發(fā)明提供一種檢測微信公眾號是否有敏感詞的方法及裝置,旨在解決無(wú)法判斷微信公眾號是否有敏感詞的問(wèn)題。
  本發(fā)明是這樣實(shí)現的,一種檢測微信公眾號是否有敏感詞的方法,包括以下步驟:
  s1、提取微信公眾號歷史文章數據,手動(dòng)標注文章是否有敏感詞;
  s2、清洗文章數據,訓練word2vec模型作為訓練數據,分割文章詞得到embedding,最后訓練雙向bilstm深度學(xué)習模型;
  s3、獲取微信公眾號預設數量的待預測歷史文章數據,清洗數據,獲取embedding,使用訓練好的雙向bilstm深度學(xué)習模型進(jìn)行預測,每&lt; @文章是否有敏感詞匯的預測結果;
<p>s4、根據預設個(gè)數文章中有??敏感詞的文章個(gè)數,計算出有敏感詞的文章個(gè)數占所有

querylist采集微信公眾號文章(每天更新視頻:熊孩子和萌寵搞笑視頻,笑聲不斷快樂(lè )常伴 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 159 次瀏覽 ? 2022-02-08 22:10 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(每天更新視頻:熊孩子和萌寵搞笑視頻,笑聲不斷快樂(lè )常伴
)
  每天更新視頻:熊孩子的日常生活,萌寵的日常生活,熊孩子和萌寵的搞笑視頻,笑聲不斷伴隨著(zhù)快樂(lè )!
  獲取公眾號信息
  標題、摘要、封面、文章URL
  腳步:
  1、先申請公眾號
  2、登錄您的帳戶(hù),創(chuàng )建一個(gè)新的文章 圖形,然后單擊超鏈接
  
  3、彈出搜索框,搜索你需要的公眾號,查看歷史記錄文章
  
  
  4、通過(guò)抓包獲取信息,定位到請求的url
  
  通過(guò)查看信息,我們找到了我們需要的關(guān)鍵內容:title、abstract、cover 和 文章 URL,并確定這就是我們需要的 URL。通過(guò)點(diǎn)擊下一頁(yè),多次獲取url,發(fā)現只有random和bengin的參數變化
  
  所以主要信息URL是可以的。
  那么讓我們開(kāi)始吧:
  原來(lái)我們需要修改的參數是:token、random、cookie
  這兩個(gè)值的來(lái)源,可以得到url
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline=&#39;&#39;) as f:
f.write(scvStr)
  得到結果(成功):
  
  獲取 文章 里面的視頻
  實(shí)現批量下載通過(guò)分??析單個(gè)視頻文章,找到了這個(gè)鏈接:
  
  打開(kāi)網(wǎng)頁(yè)找到,也就是視頻的網(wǎng)頁(yè)下載鏈接:
  
  
  嘿嘿,好像有點(diǎn)意思。找到了視頻網(wǎng)頁(yè)的純下載鏈接,開(kāi)始吧。
  我發(fā)現鏈接中有一個(gè)關(guān)鍵參數vid。我不知道它是從哪里來(lái)的?
  與獲取的其他信息無(wú)關(guān),只能強制。
  該參數在單文章的url請求信息中找到,然后獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = &#39;./videoFiles/&#39; + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, &#39;wb&#39;) as f:
f.write(html)
  然后所有的信息都完成了,代碼就組裝好了。
  一個(gè)。獲取公眾號信息
  灣。篩選單個(gè)文章信息
  C。獲取視頻信息
  d。拼接視頻頁(yè)面下載地址
  e. 下載視頻并保存
  代碼實(shí)驗結果:
  
  
   查看全部

  querylist采集微信公眾號文章(每天更新視頻:熊孩子和萌寵搞笑視頻,笑聲不斷快樂(lè )常伴
)
  每天更新視頻:熊孩子的日常生活,萌寵的日常生活,熊孩子和萌寵的搞笑視頻,笑聲不斷伴隨著(zhù)快樂(lè )!
  獲取公眾號信息
  標題、摘要、封面、文章URL
  腳步:
  1、先申請公眾號
  2、登錄您的帳戶(hù),創(chuàng )建一個(gè)新的文章 圖形,然后單擊超鏈接
  
  3、彈出搜索框,搜索你需要的公眾號,查看歷史記錄文章
  
  
  4、通過(guò)抓包獲取信息,定位到請求的url
  
  通過(guò)查看信息,我們找到了我們需要的關(guān)鍵內容:title、abstract、cover 和 文章 URL,并確定這就是我們需要的 URL。通過(guò)點(diǎn)擊下一頁(yè),多次獲取url,發(fā)現只有random和bengin的參數變化
  
  所以主要信息URL是可以的。
  那么讓我們開(kāi)始吧:
  原來(lái)我們需要修改的參數是:token、random、cookie
  這兩個(gè)值的來(lái)源,可以得到url
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline=&#39;&#39;) as f:
f.write(scvStr)
  得到結果(成功):
  
  獲取 文章 里面的視頻
  實(shí)現批量下載通過(guò)分??析單個(gè)視頻文章,找到了這個(gè)鏈接:
  
  打開(kāi)網(wǎng)頁(yè)找到,也就是視頻的網(wǎng)頁(yè)下載鏈接:
  
  
  嘿嘿,好像有點(diǎn)意思。找到了視頻網(wǎng)頁(yè)的純下載鏈接,開(kāi)始吧。
  我發(fā)現鏈接中有一個(gè)關(guān)鍵參數vid。我不知道它是從哪里來(lái)的?
  與獲取的其他信息無(wú)關(guān),只能強制。
  該參數在單文章的url請求信息中找到,然后獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = &#39;./videoFiles/&#39; + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, &#39;wb&#39;) as f:
f.write(html)
  然后所有的信息都完成了,代碼就組裝好了。
  一個(gè)。獲取公眾號信息
  灣。篩選單個(gè)文章信息
  C。獲取視頻信息
  d。拼接視頻頁(yè)面下載地址
  e. 下載視頻并保存
  代碼實(shí)驗結果:
  
  
  

querylist采集微信公眾號文章(微信公眾號后臺編輯素材界面的程序利用程序 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 186 次瀏覽 ? 2022-02-07 13:10 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號后臺編輯素材界面的程序利用程序
)
  準備階段
  為了實(shí)現這個(gè)爬蟲(chóng),我們需要用到以下工具
  另外,本爬蟲(chóng)使用微信公眾號后臺編輯素材界面。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要一個(gè)公眾號。
  
  fig1正式開(kāi)始
  我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
  
  圖2
  接下來(lái),按 F12 打開(kāi) Chrome 的開(kāi)發(fā)者工具并選擇 Network
  
  圖3
  此時(shí),在之前的超鏈接界面,點(diǎn)擊“選擇其他公眾號”,輸入需要抓取的公眾號(如中國移動(dòng))
  
  圖4
  此時(shí)之前的Network會(huì )刷新一些鏈接,而以“appmsg”開(kāi)頭的就是我們需要分析的內容。
  
  圖5
  我們解析請求的 URL
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  它分為三個(gè)部分
  通過(guò)不斷的瀏覽下一頁(yè),我們發(fā)現只有begin每次都會(huì )變化,每次增加5,也就是count的值。
  接下來(lái)我們使用Python獲取同樣的資源,但是直接運行下面的代碼無(wú)法獲取資源
  import requestsurl = "https://mp.weixin.qq.com/cgi-b ... s.get(url).json() # {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求是無(wú)效的。我們需要在requests中設置headers參數,傳入Cookie和User-Agent,模擬登錄
  由于header信息的內容每次都在變化,所以我把這些內容放在了一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
  cookie: ua_id=wuzWM9FKE14...user_agent: Mozilla/5.0...
  然后就讀
  # 讀取cookie和user_agentimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
  ?
  appmsgid 是每次推送的唯一標識符,aid 是每條推文的唯一標識符。
  ?
  
  圖6?
  其實(shí)除了cookies,URL中的token參數也是用來(lái)限制爬蟲(chóng)的,所以上面的代碼很可能會(huì )輸出{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token' } }
  ?
  然后我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取 文章 的所有 JSON 并保存。
  import jsonimport requestsimport timeimport randomimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }# 請求參數url = "https://mp.weixin.qq.com/cgi-bin/appmsg"begin = "0"params = { "action": "list_ex", "begin": begin, "count": "5", "fakeid": config[&#39;fakeid&#39;], "type": "9", "token": config[&#39;token&#39;], "lang": "zh_CN", "f": "json", "ajax": "1"}# 存放結果app_msg_list = []# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句# 也方便重新運行時(shí)設置頁(yè)數i = 0while True: begin = i * 5 params["begin"] = str(begin) # 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到 time.sleep(random.randint(1,10)) resp = requests.get(url, headers=headers, params = params, verify=False) # 微信流量控制, 退出 if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013: print("frequencey control, stop at {}".format(str(begin))) break # 如果返回的內容中為空則結束 if len(resp.json()[&#39;app_msg_list&#39;]) == 0: print("all ariticle parsed") break app_msg_list.append(resp.json()) # 翻頁(yè) i += 1
  在上面的代碼中,我也在“wechat.yaml”文件中存儲了fakeid和token,這是因為fakeid是每個(gè)公眾號的唯一標識,并且token經(jīng)常變化,這個(gè)信息可以通過(guò)解析URL來(lái)獲取,也可以從開(kāi)發(fā)者工具中查看
  圖7
  爬取一段時(shí)間后會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  此時(shí),當你嘗試在公眾號后臺插入超鏈接時(shí),會(huì )遇到如下提示
  
  圖8
  這是公眾號的流量限制,一般需要30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,可能需要申請多個(gè)公眾號,可能需要與微信公眾號登錄系統競爭,可能需要設置代理池。
  但是我不需要工業(yè)級爬蟲(chóng),我只是想爬取我公眾號的信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,然后運行。我不想用自己的興趣去挑戰別人的工作。
  最后將結果保存為 JSON 格式。
  # 保存結果為JSONjson_name = "mp_data_{}.json".format(str(begin))with open(json_name, "w") as file: file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符、標題、URL、發(fā)布時(shí)間四列信息,保存為CSV。
  info_list = []for msg in app_msg_list: if "app_msg_list" in msg: for item in msg["app_msg_list"]: info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;])) info_list.append(info)# save as csvwith open("app_msg_list.csv", "w") as file: file.writelines("\n".join(info_list)) 查看全部

  querylist采集微信公眾號文章(微信公眾號后臺編輯素材界面的程序利用程序
)
  準備階段
  為了實(shí)現這個(gè)爬蟲(chóng),我們需要用到以下工具
  另外,本爬蟲(chóng)使用微信公眾號后臺編輯素材界面。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要一個(gè)公眾號。
  
  fig1正式開(kāi)始
  我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
  
  圖2
  接下來(lái),按 F12 打開(kāi) Chrome 的開(kāi)發(fā)者工具并選擇 Network
  
  圖3
  此時(shí),在之前的超鏈接界面,點(diǎn)擊“選擇其他公眾號”,輸入需要抓取的公眾號(如中國移動(dòng))
  
  圖4
  此時(shí)之前的Network會(huì )刷新一些鏈接,而以“appmsg”開(kāi)頭的就是我們需要分析的內容。
  
  圖5
  我們解析請求的 URL
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  它分為三個(gè)部分
  通過(guò)不斷的瀏覽下一頁(yè),我們發(fā)現只有begin每次都會(huì )變化,每次增加5,也就是count的值。
  接下來(lái)我們使用Python獲取同樣的資源,但是直接運行下面的代碼無(wú)法獲取資源
  import requestsurl = "https://mp.weixin.qq.com/cgi-b ... s.get(url).json() # {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求是無(wú)效的。我們需要在requests中設置headers參數,傳入Cookie和User-Agent,模擬登錄
  由于header信息的內容每次都在變化,所以我把這些內容放在了一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
  cookie: ua_id=wuzWM9FKE14...user_agent: Mozilla/5.0...
  然后就讀
  # 讀取cookie和user_agentimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
  ?
  appmsgid 是每次推送的唯一標識符,aid 是每條推文的唯一標識符。
  ?
  
  圖6?
  其實(shí)除了cookies,URL中的token參數也是用來(lái)限制爬蟲(chóng)的,所以上面的代碼很可能會(huì )輸出{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token' } }
  ?
  然后我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取 文章 的所有 JSON 并保存。
  import jsonimport requestsimport timeimport randomimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }# 請求參數url = "https://mp.weixin.qq.com/cgi-bin/appmsg"begin = "0"params = { "action": "list_ex", "begin": begin, "count": "5", "fakeid": config[&#39;fakeid&#39;], "type": "9", "token": config[&#39;token&#39;], "lang": "zh_CN", "f": "json", "ajax": "1"}# 存放結果app_msg_list = []# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句# 也方便重新運行時(shí)設置頁(yè)數i = 0while True: begin = i * 5 params["begin"] = str(begin) # 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到 time.sleep(random.randint(1,10)) resp = requests.get(url, headers=headers, params = params, verify=False) # 微信流量控制, 退出 if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013: print("frequencey control, stop at {}".format(str(begin))) break # 如果返回的內容中為空則結束 if len(resp.json()[&#39;app_msg_list&#39;]) == 0: print("all ariticle parsed") break app_msg_list.append(resp.json()) # 翻頁(yè) i += 1
  在上面的代碼中,我也在“wechat.yaml”文件中存儲了fakeid和token,這是因為fakeid是每個(gè)公眾號的唯一標識,并且token經(jīng)常變化,這個(gè)信息可以通過(guò)解析URL來(lái)獲取,也可以從開(kāi)發(fā)者工具中查看
  圖7
  爬取一段時(shí)間后會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  此時(shí),當你嘗試在公眾號后臺插入超鏈接時(shí),會(huì )遇到如下提示
  
  圖8
  這是公眾號的流量限制,一般需要30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,可能需要申請多個(gè)公眾號,可能需要與微信公眾號登錄系統競爭,可能需要設置代理池。
  但是我不需要工業(yè)級爬蟲(chóng),我只是想爬取我公眾號的信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,然后運行。我不想用自己的興趣去挑戰別人的工作。
  最后將結果保存為 JSON 格式。
  # 保存結果為JSONjson_name = "mp_data_{}.json".format(str(begin))with open(json_name, "w") as file: file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符、標題、URL、發(fā)布時(shí)間四列信息,保存為CSV。
  info_list = []for msg in app_msg_list: if "app_msg_list" in msg: for item in msg["app_msg_list"]: info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;])) info_list.append(info)# save as csvwith open("app_msg_list.csv", "w") as file: file.writelines("\n".join(info_list))

querylist采集微信公眾號文章(querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 128 次瀏覽 ? 2022-02-07 01:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞)
  querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞。這個(gè)過(guò)程主要有2個(gè)東西需要去查。1.微信公眾號是無(wú)法被搜索引擎識別的,不對應的搜索結果都屬于污點(diǎn)。2.微信公眾號是匿名的,由個(gè)人微信號綁定來(lái)實(shí)現。本案例是第二種情況。querylist匹配出所有公眾號。文章就都顯示出來(lái)了。
  樓上已經(jīng)說(shuō)得很清楚了,這就是一個(gè)querylist加上allfollower來(lái)搜索文章關(guān)鍵詞的機制。我第一次聽(tīng)說(shuō)還有這么簡(jiǎn)單的算法,這里做個(gè)簡(jiǎn)單的總結吧:dataeditor與dontmatch的區別是editor可以一次性只發(fā)一個(gè)all-follower查詢(xún)詞,如果你在開(kāi)發(fā)自己的查詢(xún)引擎,這種查詢(xún)方式尤其方便,因為你要確定目標關(guān)鍵詞,用戶(hù)要查詢(xún)什么詞才需要把所有關(guān)鍵詞展示出來(lái),用dontmatch的話(huà),系統可以只有allfollower來(lái)排序查詢(xún)詞(請注意querylist包含all-follower)。
  一樣的好處是,editor一次性就給一個(gè)查詢(xún)詞把所有關(guān)鍵詞顯示出來(lái),沒(méi)有展示少量的all-follower和cachesomefollowers。
  具體就是給query加入all-follower變量。
  額,最近分析過(guò)。這個(gè)就是微信公眾號文章標題和摘要出現的詞匹配。就是把query加到一個(gè)entity{{all_follower}}。然后要排序的時(shí)候,先對大量query進(jìn)行排序,然后根據相應的entity去匹配,這樣就排序完成了。不過(guò)我這只是基本原理, 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞)
  querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞。這個(gè)過(guò)程主要有2個(gè)東西需要去查。1.微信公眾號是無(wú)法被搜索引擎識別的,不對應的搜索結果都屬于污點(diǎn)。2.微信公眾號是匿名的,由個(gè)人微信號綁定來(lái)實(shí)現。本案例是第二種情況。querylist匹配出所有公眾號。文章就都顯示出來(lái)了。
  樓上已經(jīng)說(shuō)得很清楚了,這就是一個(gè)querylist加上allfollower來(lái)搜索文章關(guān)鍵詞的機制。我第一次聽(tīng)說(shuō)還有這么簡(jiǎn)單的算法,這里做個(gè)簡(jiǎn)單的總結吧:dataeditor與dontmatch的區別是editor可以一次性只發(fā)一個(gè)all-follower查詢(xún)詞,如果你在開(kāi)發(fā)自己的查詢(xún)引擎,這種查詢(xún)方式尤其方便,因為你要確定目標關(guān)鍵詞,用戶(hù)要查詢(xún)什么詞才需要把所有關(guān)鍵詞展示出來(lái),用dontmatch的話(huà),系統可以只有allfollower來(lái)排序查詢(xún)詞(請注意querylist包含all-follower)。
  一樣的好處是,editor一次性就給一個(gè)查詢(xún)詞把所有關(guān)鍵詞顯示出來(lái),沒(méi)有展示少量的all-follower和cachesomefollowers。
  具體就是給query加入all-follower變量。
  額,最近分析過(guò)。這個(gè)就是微信公眾號文章標題和摘要出現的詞匹配。就是把query加到一個(gè)entity{{all_follower}}。然后要排序的時(shí)候,先對大量query進(jìn)行排序,然后根據相應的entity去匹配,這樣就排序完成了。不過(guò)我這只是基本原理,

querylist采集微信公眾號文章(Python微信公眾號文章爬取一.思路我們通過(guò)網(wǎng)頁(yè)版)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2022-02-04 15:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(Python微信公眾號文章爬取一.思路我們通過(guò)網(wǎng)頁(yè)版)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)web鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(\'https://mp.weixin.qq.com/\')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=\'login__type__container__select-type\']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=\'account\']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=\'password\']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=\'btn_login\']").click()
sleep(2)
# 微信登錄驗證
print(\'請掃描二維碼\')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(\'https://mp.weixin.qq.com/\')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[\'name\']] = item[\'value\']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(\'cookie.txt\', \'w+\', encoding=\'utf-8\') as f:
f.write(cookie_str)
print(\'cookie保存到本地成功\')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(\'?\')[1].split(\'&\')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(\'=\')[0]] = item.split(\'=\')[1]
# 返回token
return paramdict[\'token\']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = \'https://mp.weixin.qq.com\'
headers = {
\'HOST\': \'mp.weixin.qq.com\',
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63\'
}
with open(\'cookie.txt\', \'r\', encoding=\'utf-8\') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = \'https://mp.weixin.qq.com/cgi-bin/searchbiz?\'
params = {
\'action\': \'search_biz\',
\'begin\': \'0\',
\'count\': \'5\',
\'query\': \'搜索的公眾號名稱(chēng)\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get(\'list\')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get(\'fakeid\')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = \'https://mp.weixin.qq.com/cgi-bin/appmsg?\'
params_data = {
\'action\': \'list_ex\',
\'begin\': \'0\',
\'count\': \'5\',
\'fakeid\': fakeid,
\'type\': \'9\',
\'query\': \'\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。 查看全部

  querylist采集微信公眾號文章(Python微信公眾號文章爬取一.思路我們通過(guò)網(wǎng)頁(yè)版)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)web鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(\'https://mp.weixin.qq.com/\')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=\'login__type__container__select-type\']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=\'account\']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=\'password\']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=\'btn_login\']").click()
sleep(2)
# 微信登錄驗證
print(\'請掃描二維碼\')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(\'https://mp.weixin.qq.com/\')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[\'name\']] = item[\'value\']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(\'cookie.txt\', \'w+\', encoding=\'utf-8\') as f:
f.write(cookie_str)
print(\'cookie保存到本地成功\')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(\'?\')[1].split(\'&\')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(\'=\')[0]] = item.split(\'=\')[1]
# 返回token
return paramdict[\'token\']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = \'https://mp.weixin.qq.com\'
headers = {
\'HOST\': \'mp.weixin.qq.com\',
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63\'
}
with open(\'cookie.txt\', \'r\', encoding=\'utf-8\') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = \'https://mp.weixin.qq.com/cgi-bin/searchbiz?\'
params = {
\'action\': \'search_biz\',
\'begin\': \'0\',
\'count\': \'5\',
\'query\': \'搜索的公眾號名稱(chēng)\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get(\'list\')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get(\'fakeid\')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = \'https://mp.weixin.qq.com/cgi-bin/appmsg?\'
params_data = {
\'action\': \'list_ex\',
\'begin\': \'0\',
\'count\': \'5\',
\'fakeid\': fakeid,
\'type\': \'9\',
\'query\': \'\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。

querylist采集微信公眾號文章( 微信公眾號文章的GET及方法(二)-)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-02-04 15:12 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
微信公眾號文章的GET及方法(二)-)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后通過(guò)web鏈接即可獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。 查看全部

  querylist采集微信公眾號文章(
微信公眾號文章的GET及方法(二)-)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后通過(guò)web鏈接即可獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。

querylist采集微信公眾號文章(快速推廣小程序的方法,希望這些能夠幫到大家!)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 142 次瀏覽 ? 2022-02-02 02:02 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(快速推廣小程序的方法,希望這些能夠幫到大家!)
  小程序的火爆帶動(dòng)了很多企業(yè)和公司開(kāi)發(fā)小程序。但是小程序開(kāi)發(fā)出來(lái)之后,很重要的一個(gè)環(huán)節就是推廣。下面,小編為大家整理了小程序快速推廣的方法,希望對大家有所幫助。
  相關(guān)公眾號推廣
  目前微信支持公眾號與小程序的互聯(lián)互通。微信公眾號可以快速關(guān)聯(lián)和創(chuàng )建小程序,小程序也可以展示公眾號的內容。關(guān)聯(lián)小程序可用于短信、自定義菜單、模板消息、附近小程序等場(chǎng)景。
  
  公眾號關(guān)聯(lián)小程序也會(huì )通過(guò)推送消息通知用戶(hù)。公眾號關(guān)聯(lián),對于已經(jīng)擁有公眾號并積累一定粉絲數的企業(yè),可以快速將流量導入小程序。關(guān)聯(lián)后,您還可以在公眾號的推文中插入小程序卡片或鏈接。
  如果你的公眾號能產(chǎn)出優(yōu)質(zhì)內容,獲得大量閱讀量,也是小程序推廣快速有效的方法。
  小程序搜索優(yōu)化
  現在微信小程序由系統自動(dòng)分配關(guān)鍵詞,商家和創(chuàng )業(yè)公司可以根據規則合理設置名稱(chēng)和功能介紹字段,在名稱(chēng)關(guān)鍵詞中合理體現相關(guān)字段,并將功能介紹中的品牌名稱(chēng)。定位、功能描述、產(chǎn)品分類(lèi)等內容展示簡(jiǎn)潔有效。
  對于關(guān)鍵詞的優(yōu)化,一定要遵循規律,合理適當。如果添加太多名稱(chēng)和描述,可能會(huì )受到官方微信小程序的懲罰。
  微信表示,未來(lái)將對小程序進(jìn)行一系列升級,包括開(kāi)放品牌和品牌搜索,很可能會(huì )再次開(kāi)放自定義關(guān)鍵詞功能,并推出一系列規范。大推動(dòng)。
  小程序二維碼推廣
  小程序還可以生成二維碼。目前小程序已經(jīng)支持采集功能。采集的小程序會(huì )顯示在微信聊天界面頂部的下拉菜單中。通過(guò)二維碼在不同場(chǎng)景下的推廣使用,可以有效達到推廣目的。
  線(xiàn)上推廣可以通過(guò)朋友圈、微信群轉發(fā)、網(wǎng)站、app圖片廣告、軟文植入等方式進(jìn)行分享。在推廣中,要根據不同場(chǎng)景下推廣的特點(diǎn)和規律,有針對性地進(jìn)行和優(yōu)化推廣。 查看全部

  querylist采集微信公眾號文章(快速推廣小程序的方法,希望這些能夠幫到大家!)
  小程序的火爆帶動(dòng)了很多企業(yè)和公司開(kāi)發(fā)小程序。但是小程序開(kāi)發(fā)出來(lái)之后,很重要的一個(gè)環(huán)節就是推廣。下面,小編為大家整理了小程序快速推廣的方法,希望對大家有所幫助。
  相關(guān)公眾號推廣
  目前微信支持公眾號與小程序的互聯(lián)互通。微信公眾號可以快速關(guān)聯(lián)和創(chuàng )建小程序,小程序也可以展示公眾號的內容。關(guān)聯(lián)小程序可用于短信、自定義菜單、模板消息、附近小程序等場(chǎng)景。
  
  公眾號關(guān)聯(lián)小程序也會(huì )通過(guò)推送消息通知用戶(hù)。公眾號關(guān)聯(lián),對于已經(jīng)擁有公眾號并積累一定粉絲數的企業(yè),可以快速將流量導入小程序。關(guān)聯(lián)后,您還可以在公眾號的推文中插入小程序卡片或鏈接。
  如果你的公眾號能產(chǎn)出優(yōu)質(zhì)內容,獲得大量閱讀量,也是小程序推廣快速有效的方法。
  小程序搜索優(yōu)化
  現在微信小程序由系統自動(dòng)分配關(guān)鍵詞,商家和創(chuàng )業(yè)公司可以根據規則合理設置名稱(chēng)和功能介紹字段,在名稱(chēng)關(guān)鍵詞中合理體現相關(guān)字段,并將功能介紹中的品牌名稱(chēng)。定位、功能描述、產(chǎn)品分類(lèi)等內容展示簡(jiǎn)潔有效。
  對于關(guān)鍵詞的優(yōu)化,一定要遵循規律,合理適當。如果添加太多名稱(chēng)和描述,可能會(huì )受到官方微信小程序的懲罰。
  微信表示,未來(lái)將對小程序進(jìn)行一系列升級,包括開(kāi)放品牌和品牌搜索,很可能會(huì )再次開(kāi)放自定義關(guān)鍵詞功能,并推出一系列規范。大推動(dòng)。
  小程序二維碼推廣
  小程序還可以生成二維碼。目前小程序已經(jīng)支持采集功能。采集的小程序會(huì )顯示在微信聊天界面頂部的下拉菜單中。通過(guò)二維碼在不同場(chǎng)景下的推廣使用,可以有效達到推廣目的。
  線(xiàn)上推廣可以通過(guò)朋友圈、微信群轉發(fā)、網(wǎng)站、app圖片廣告、軟文植入等方式進(jìn)行分享。在推廣中,要根據不同場(chǎng)景下推廣的特點(diǎn)和規律,有針對性地進(jìn)行和優(yōu)化推廣。

querylist采集微信公眾號文章(微信公眾號文章的每一篇文章所對應的key-value數據)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2022-01-28 07:04 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號文章的每一篇文章所對應的key-value數據)
  querylist采集微信公眾號文章的每一篇文章所對應的key-value數據。文章的所有信息都采集完之后按照header的順序,匯總信息給開(kāi)發(fā)者,開(kāi)發(fā)者可以將對應的key發(fā)給需要看文章的人。
  實(shí)現過(guò)一個(gè)小的搜索引擎需要對接微信的搜索接口,之前在用路由庫的時(shí)候一直比較麻煩。importrequestsurl=''r=requests.get(url)headers={'user-agent':'mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/55.0.2704.85safari/537.36'}defget_content(url):page=requests.post(url,data={'host':url}).textpage.raise_for_status_code()urls=page.request('')#有重復字符的地方用空格代替urls.encode('gbk').decode('utf-8')html=urls.json()print("encoded:{0}'.format(html))more_content=requests.get(url,data={'results':[x,y]}).textmore_content.decode('utf-8')print("more_content:{0}".format(more_content))print("title",html)returnquerylist.fetch(more_content)但是換言之如果我有兩個(gè)相同的url,上一個(gè)就去掉復制這個(gè)鏈接,而我只是想查找一個(gè)query,下一個(gè)就直接拿到這個(gè)query的title?那就只能用urlencode轉換數據了。
  ?_id=="a"python實(shí)現輸入地址query_list_content="{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(query_list_content)text=query_list_content[-1]#print(text)print("title:{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(text))print("foriinrange({3,7}):”{1:“{2:“{3:“{4:“{5:“{6:“{7:”}”}”}”}”}”}”}".format(text))query_list_content=[iforiinrange(1,8)]text=get_content(。 查看全部

  querylist采集微信公眾號文章(微信公眾號文章的每一篇文章所對應的key-value數據)
  querylist采集微信公眾號文章的每一篇文章所對應的key-value數據。文章的所有信息都采集完之后按照header的順序,匯總信息給開(kāi)發(fā)者,開(kāi)發(fā)者可以將對應的key發(fā)給需要看文章的人。
  實(shí)現過(guò)一個(gè)小的搜索引擎需要對接微信的搜索接口,之前在用路由庫的時(shí)候一直比較麻煩。importrequestsurl=''r=requests.get(url)headers={'user-agent':'mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/55.0.2704.85safari/537.36'}defget_content(url):page=requests.post(url,data={'host':url}).textpage.raise_for_status_code()urls=page.request('')#有重復字符的地方用空格代替urls.encode('gbk').decode('utf-8')html=urls.json()print("encoded:{0}'.format(html))more_content=requests.get(url,data={'results':[x,y]}).textmore_content.decode('utf-8')print("more_content:{0}".format(more_content))print("title",html)returnquerylist.fetch(more_content)但是換言之如果我有兩個(gè)相同的url,上一個(gè)就去掉復制這個(gè)鏈接,而我只是想查找一個(gè)query,下一個(gè)就直接拿到這個(gè)query的title?那就只能用urlencode轉換數據了。
  ?_id=="a"python實(shí)現輸入地址query_list_content="{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(query_list_content)text=query_list_content[-1]#print(text)print("title:{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(text))print("foriinrange({3,7}):”{1:“{2:“{3:“{4:“{5:“{6:“{7:”}”}”}”}”}”}”}".format(text))query_list_content=[iforiinrange(1,8)]text=get_content(。

querylist采集微信公眾號文章(《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-01-22 17:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求)
  querylist采集微信公眾號文章列表,還可以返回給我們一個(gè)完整的網(wǎng)頁(yè)鏈接。比如這個(gè)就是我們預先畫(huà)出來(lái)的token,這個(gè)post就是發(fā)送。如果有不懂得,就可以看這個(gè)博客,對你有用。
  截圖中的post連接實(shí)際上是一個(gè)session;將截圖中的網(wǎng)址直接post給微信公眾號助手,等待微信小助手的解析即可,注意必須是響應的,否則將導致發(fā)送失敗或者不返回json數據。
  建議看看我的這篇文章不會(huì )post的正確姿勢:《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求
  可以用post方式發(fā)送,有截圖的。
  上面的答案都是用微信的網(wǎng)頁(yè)版發(fā)送參數,確實(shí)是可以的,但是有一點(diǎn)不好的就是上傳參數存在時(shí)間限制,過(guò)期之后不會(huì )收到消息。
  現在公眾號沒(méi)有webdav這個(gè)功能,
  我們專(zhuān)業(yè)課老師強調了,
  當然可以!微信也支持直接用post方式推送給文章打開(kāi)頁(yè)啊。對于比較偏門(mén)的篇章,文章都是可以post的,前提是需要特殊情況判斷下,不然有可能會(huì )封號啊什么的。
  很簡(jiǎn)單,post發(fā)過(guò)去就好了。其實(shí)關(guān)鍵就是,post要及時(shí)到達,否則會(huì )被post原文拉到二維碼頁(yè),或者全部丟失。其實(shí)現在的文章都是壓縮的,發(fā)過(guò)去實(shí)際就很多了,然后post就可以發(fā)特定的文章,就不會(huì )丟失了。 查看全部

  querylist采集微信公眾號文章(《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求)
  querylist采集微信公眾號文章列表,還可以返回給我們一個(gè)完整的網(wǎng)頁(yè)鏈接。比如這個(gè)就是我們預先畫(huà)出來(lái)的token,這個(gè)post就是發(fā)送。如果有不懂得,就可以看這個(gè)博客,對你有用。
  截圖中的post連接實(shí)際上是一個(gè)session;將截圖中的網(wǎng)址直接post給微信公眾號助手,等待微信小助手的解析即可,注意必須是響應的,否則將導致發(fā)送失敗或者不返回json數據。
  建議看看我的這篇文章不會(huì )post的正確姿勢:《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求
  可以用post方式發(fā)送,有截圖的。
  上面的答案都是用微信的網(wǎng)頁(yè)版發(fā)送參數,確實(shí)是可以的,但是有一點(diǎn)不好的就是上傳參數存在時(shí)間限制,過(guò)期之后不會(huì )收到消息。
  現在公眾號沒(méi)有webdav這個(gè)功能,
  我們專(zhuān)業(yè)課老師強調了,
  當然可以!微信也支持直接用post方式推送給文章打開(kāi)頁(yè)啊。對于比較偏門(mén)的篇章,文章都是可以post的,前提是需要特殊情況判斷下,不然有可能會(huì )封號啊什么的。
  很簡(jiǎn)單,post發(fā)過(guò)去就好了。其實(shí)關(guān)鍵就是,post要及時(shí)到達,否則會(huì )被post原文拉到二維碼頁(yè),或者全部丟失。其實(shí)現在的文章都是壓縮的,發(fā)過(guò)去實(shí)際就很多了,然后post就可以發(fā)特定的文章,就不會(huì )丟失了。

querylist采集微信公眾號文章(如何爬取公眾號所有文章(一)(1)_光明網(wǎng)(組圖))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 167 次瀏覽 ? 2022-01-22 11:06 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(如何爬取公眾號所有文章(一)(1)_光明網(wǎng)(組圖))
  文章目錄
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.在后臺插入其他公眾號推送超鏈接的原理微信公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現已經(jīng)刷新了一個(gè)網(wǎng)絡(luò )啟動(dòng)以“appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&amp;begin=0&amp;count=5&amp;fakeid=MjM5NDY3ODI4OA==&amp;type=9&amp;query=&amp;token= 1983840068&amp;lang=zh_CN&amp;f =json&amp;ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  在爬取大約 50 個(gè)頁(yè)面時(shí),我遇到了以下錯誤:
  {'base_resp':{'err_msg':'頻率控制','ret':200013}}
  這是因為微信公眾號有流量限制,所以你可以等一個(gè)小時(shí)。我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("python小屋.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
&#39;&#39;&#39;
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
&#39;&#39;&#39;
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding=&#39;utf-8&#39;) as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二) 爬取每次推送并提取需要的信息1. 遍歷并爬取每次推送
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?) 查看全部

  querylist采集微信公眾號文章(如何爬取公眾號所有文章(一)(1)_光明網(wǎng)(組圖))
  文章目錄
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.在后臺插入其他公眾號推送超鏈接的原理微信公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現已經(jīng)刷新了一個(gè)網(wǎng)絡(luò )啟動(dòng)以“appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&amp;begin=0&amp;count=5&amp;fakeid=MjM5NDY3ODI4OA==&amp;type=9&amp;query=&amp;token= 1983840068&amp;lang=zh_CN&amp;f =json&amp;ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  在爬取大約 50 個(gè)頁(yè)面時(shí),我遇到了以下錯誤:
  {'base_resp':{'err_msg':'頻率控制','ret':200013}}
  這是因為微信公眾號有流量限制,所以你可以等一個(gè)小時(shí)。我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("python小屋.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
&#39;&#39;&#39;
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
&#39;&#39;&#39;
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding=&#39;utf-8&#39;) as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二) 爬取每次推送并提取需要的信息1. 遍歷并爬取每次推送
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?)

querylist采集微信公眾號文章(querylist采集微信公眾號文章或者querylist=cdfshowquerylists(二維碼))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 118 次瀏覽 ? 2022-01-21 13:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章或者querylist=cdfshowquerylists(二維碼))
  querylist采集微信公眾號文章或者querylist這個(gè)開(kāi)源模塊的詳細代碼;filename=cdfshowquerylists(二維碼)eggform,一個(gè)完整的ajax項目開(kāi)發(fā)的querylist編寫(xiě),表單提交接口,自定義表單提交樣式等等模塊eggmusic采集網(wǎng)易云音樂(lè )網(wǎng)頁(yè)歌曲列表列表封裝url提交接口;filename=cdfshowmusic(二維碼)詳細信息可以看這個(gè)頁(yè)面。querylist是一個(gè)cgi項目,您也可以關(guān)注我的公眾號獲取更多相關(guān)實(shí)用的文章。
  querylist接口就可以?;谖⑿欧?wù)號開(kāi)發(fā),一般是純node來(lái)寫(xiě),后續可以考慮nosql。querylist作者是微信游客,代碼有公開(kāi)。
  jslist的話(huà),現在java版本代碼網(wǎng)上可以找到。//function是app的代碼,java和php都是語(yǔ)言代碼,其中app是一個(gè)network服務(wù)。//代碼//server//if(this===theap){endinterfaceif(request.protocol_cnisready){server.addflags(nosslhttprequestrequest)work(newfetchserver(this))}//[cdns...]方法}}exportsexports.newslist=newslist;exports.alllist=exports.alllist;exports.alllistprototype=exports.alllistprototype;。
  最近一直在用querylist,很順手的、簡(jiǎn)單方便的接口。
  內部自己發(fā)電影文章在a標簽里,展示用微信link;外部轉發(fā), 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章或者querylist=cdfshowquerylists(二維碼))
  querylist采集微信公眾號文章或者querylist這個(gè)開(kāi)源模塊的詳細代碼;filename=cdfshowquerylists(二維碼)eggform,一個(gè)完整的ajax項目開(kāi)發(fā)的querylist編寫(xiě),表單提交接口,自定義表單提交樣式等等模塊eggmusic采集網(wǎng)易云音樂(lè )網(wǎng)頁(yè)歌曲列表列表封裝url提交接口;filename=cdfshowmusic(二維碼)詳細信息可以看這個(gè)頁(yè)面。querylist是一個(gè)cgi項目,您也可以關(guān)注我的公眾號獲取更多相關(guān)實(shí)用的文章。
  querylist接口就可以?;谖⑿欧?wù)號開(kāi)發(fā),一般是純node來(lái)寫(xiě),后續可以考慮nosql。querylist作者是微信游客,代碼有公開(kāi)。
  jslist的話(huà),現在java版本代碼網(wǎng)上可以找到。//function是app的代碼,java和php都是語(yǔ)言代碼,其中app是一個(gè)network服務(wù)。//代碼//server//if(this===theap){endinterfaceif(request.protocol_cnisready){server.addflags(nosslhttprequestrequest)work(newfetchserver(this))}//[cdns...]方法}}exportsexports.newslist=newslist;exports.alllist=exports.alllist;exports.alllistprototype=exports.alllistprototype;。
  最近一直在用querylist,很順手的、簡(jiǎn)單方便的接口。
  內部自己發(fā)電影文章在a標簽里,展示用微信link;外部轉發(fā),

querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 112 次瀏覽 ? 2022-01-21 12:09 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始做微信公眾號內容采集的批次,最初的目的是做一個(gè)html5垃圾郵件網(wǎng)站。當時(shí)垃圾站采集收到的微信公眾號內容很容易在公眾號中傳播。那個(gè)時(shí)候批量采集很容易做,采集入口就是公眾號的歷史新聞頁(yè)面。這個(gè)條目到今天還是一樣,只是越來(lái)越難了采集。采集 的方法也更新了很多版本。后來(lái)在2015年,html5垃圾站不再做,轉而將采集定位為本地新聞資訊公眾號,前端展示做成app。因此,一個(gè)可以自動(dòng)采集 公眾號內容形成。我曾經(jīng)擔心有一天,微信技術(shù)升級后,它無(wú)法采集內容,我的新聞應用程序會(huì )失敗。不過(guò)隨著(zhù)微信的不斷技術(shù)升級,采集方式也升級了,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到的時(shí)候可用。
  首先我們來(lái)看一個(gè)微信公眾號歷史新聞頁(yè)面的鏈接地址:
   http://mp.weixin.qq.com/mp/get ... irect
  =========2017 年 1 月 11 日更新==========
  現在,根據不同的微信個(gè)人號,會(huì )有兩個(gè)不同的歷史消息頁(yè)面地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一個(gè)地址的鏈接在anyproxy中會(huì )顯示302跳轉:
   https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  第二個(gè)鏈接地址的頁(yè)面樣式:
  根據目前掌握的信息,這兩種頁(yè)面形式在不同的微信賬號中不規則出現。有的微信賬號總是第一頁(yè)格式,有的總是第二頁(yè)格式。
  以上鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
   //第一種鏈接http://mp.weixin.qq.com/mp/get ... 3D1//第二種http://mp.weixin.qq.com/mp/pro ... r%3D1
  這個(gè)地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面,然后使用后面介紹的代理服務(wù)器軟件獲得的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=; 這四個(gè)參數。
  __biz 是公眾號的類(lèi)id參數。每個(gè)公眾號都有一個(gè)微信業(yè)務(wù)。目前公眾號的biz發(fā)生變化的概率很??;
  其余三個(gè)參數與用戶(hù)的 id 和 token 票證相關(guān)。這三個(gè)參數的值是微信客戶(hù)端生成后自動(dòng)添加到地址欄的。所以想要采集公眾號,必須通過(guò)微信客戶(hù)端。在微信之前的版本中,這三個(gè)參數也可以一次性獲取,在有效期內被多個(gè)公眾號使用。當前版本每次訪(fǎng)問(wèn)公共帳戶(hù)時(shí)都會(huì )更改參數值。
  我現在使用的方法只需要注意__biz參數即可。
  我的 采集 系統由以下部分組成:
  1、微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。經(jīng)測試,在批處理采集過(guò)程中,ios微信客戶(hù)端的崩潰率高于安卓系統。為了降低成本,我使用的是安卓模擬器。
  2、個(gè)人微信賬號:采集的內容,不僅需要微信客戶(hù)端,采集還需要個(gè)人微信賬號,因為這個(gè)微信賬號不能做其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾號歷史消息頁(yè)面中的文章列表發(fā)送到自己的服務(wù)器。具體的安裝和設置方法將在后面詳細介紹。
  4、文章列表分析與倉儲系統:我用php語(yǔ)言寫(xiě)的。后面會(huì )詳細介紹如何分析文章列表,建立采集隊列,實(shí)現批量采集內容。
  步
  一、安裝模擬器或者用手機安裝微信客戶(hù)端app,申請微信個(gè)人賬號并登錄app。這個(gè)我就不多說(shuō)了,大家都會(huì )的。
  二、代理服務(wù)器系統安裝
  目前我正在使用 Anyproxy,AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置將腳本代碼插入公眾號頁(yè)面。讓我們從安裝和配置過(guò)程開(kāi)始。
  1、安裝 NodeJS
  2、在命令行或者終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy并運行命令:sudo anyproxy -i; 參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器中安裝證書(shū):
  6、設置代理:Android模擬器的代理服務(wù)器地址是wifi鏈接的網(wǎng)關(guān)。將dhcp設置為static后可以看到網(wǎng)關(guān)地址。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器的默認端口是8001;
  現在打開(kāi)微信,點(diǎn)擊任意公眾號歷史消息或文章,可以在終端看到響應碼滾動(dòng)。如果沒(méi)有出現,請檢查您手機的代理設置是否正確。
  現在打開(kāi)瀏覽器地址:8002可以看到anyproxy的網(wǎng)頁(yè)界面。從微信點(diǎn)擊一個(gè)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  /mp/getmasssendmsg 開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示頁(yè)面是https加密的?,F在讓我們點(diǎn)擊這一行;
  =========2017 年 1 月 11 日更新==========
  一些以/mp/getmasssendmsg開(kāi)頭的微信網(wǎng)址會(huì )有302跳轉,跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址查看內容。
  如果右邊出現html文件的內容,則解密成功。如果沒(méi)有內容,請檢查anyproxy的運行模式是否有參數i,是否生成了ca證書(shū),手機上是否正確安裝了證書(shū)。
  現在我們手機上的所有內容都可以以明文形式通過(guò)代理服務(wù)器。接下來(lái),我們需要修改和配置代理服務(wù)器,以便獲取公眾號的內容。
  一、找到配置文件:
  mac系統中配置文件的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道的請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請詳細閱讀注釋?zhuān)@里只是原理介紹,了解后根據自己的情況修改內容):
  =========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面形式,而且同一個(gè)頁(yè)面形式總是顯示在不同的微信賬號中,但是為了兼容這兩種頁(yè)面形式,下面的代碼會(huì )保留兩種頁(yè)面形式的判斷,你也可以使用你的自己的頁(yè)面表單刪除li
   replaceServerResDataAsync:function(req,res,serverResData,callback){if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)if(serverResData.toString()!==""){try{//防止報錯退出程序varreg=/msgList = (.*?);/;//定義歷史消息正則匹配規則varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。try{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);//錯誤捕捉}callback(serverResData);//直接返回第二頁(yè)json內容}}}elseif(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)try{varreg=/var msgList = \&apos;(.*?)\&apos;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){callback(serverResData);}}elseif(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的jsontry{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);}callback(serverResData);}elseif(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)try{HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器}catch(e){}callback(serverResData);}elseif(/s\?__biz/i.test(req.url)||/mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)try{varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxPost.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);})});}catch(e){callback(serverResData);}}else{callback(serverResData);}},
  以上代碼使用anyproxy修改返回頁(yè)面內容的功能,將腳本注入頁(yè)面,將頁(yè)面內容發(fā)送給服務(wù)器。利用這個(gè)原理批量采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,下面詳細介紹:
  在 rule_default.js 文件的末尾添加以下代碼:
   functionHttpPost(str,url,path){//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名varhttp=require(&apos;http&apos;);vardata={str:encodeURIComponent(str),url:encodeURIComponent(url)};content=require(&apos;querystring&apos;).stringify(data);varoptions={method:"POST",host:"www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。port:80,path:path,//接收程序的路徑和文件名headers:{&apos;Content-Type&apos;:&apos;application/x-www-form-urlencoded; charset=UTF-8&apos;,"Content-Length":content.length}};varreq=http.request(options,function(res){res.setEncoding(&apos;utf8&apos;);res.on(&apos;data&apos;,function(chunk){console.log(&apos;BODY: &apos;+chunk);});});req.on(&apos;error&apos;,function(e){console.log(&apos;problem with request: &apos;+e.message);});req.write(content);req.end();}
  以上是規則修改的主要部分。需要將json內容發(fā)送到自己的服務(wù)器,并從服務(wù)器獲取跳轉到下一頁(yè)的地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低crash率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
   replaceRequestOption:function(req,option){varnewOption=option;if(/google/i.test(newOption.headers.host)){newOption.hostname="www.baidu.com";newOption.port="80";}returnnewOption;},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果啟動(dòng)報錯,程序可能無(wú)法干凈退出,端口被占用。此時(shí)輸入命令ps -a查看被占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺死進(jìn)程后,您可以啟動(dòng)anyproxy?;蛘遷indows的命令請原諒我不是很熟悉。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只是介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析后存入數據庫
<p> 查看全部

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始做微信公眾號內容采集的批次,最初的目的是做一個(gè)html5垃圾郵件網(wǎng)站。當時(shí)垃圾站采集收到的微信公眾號內容很容易在公眾號中傳播。那個(gè)時(shí)候批量采集很容易做,采集入口就是公眾號的歷史新聞頁(yè)面。這個(gè)條目到今天還是一樣,只是越來(lái)越難了采集。采集 的方法也更新了很多版本。后來(lái)在2015年,html5垃圾站不再做,轉而將采集定位為本地新聞資訊公眾號,前端展示做成app。因此,一個(gè)可以自動(dòng)采集 公眾號內容形成。我曾經(jīng)擔心有一天,微信技術(shù)升級后,它無(wú)法采集內容,我的新聞應用程序會(huì )失敗。不過(guò)隨著(zhù)微信的不斷技術(shù)升級,采集方式也升級了,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到的時(shí)候可用。
  首先我們來(lái)看一個(gè)微信公眾號歷史新聞頁(yè)面的鏈接地址:
   http://mp.weixin.qq.com/mp/get ... irect
  =========2017 年 1 月 11 日更新==========
  現在,根據不同的微信個(gè)人號,會(huì )有兩個(gè)不同的歷史消息頁(yè)面地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一個(gè)地址的鏈接在anyproxy中會(huì )顯示302跳轉:
   https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  第二個(gè)鏈接地址的頁(yè)面樣式:
  根據目前掌握的信息,這兩種頁(yè)面形式在不同的微信賬號中不規則出現。有的微信賬號總是第一頁(yè)格式,有的總是第二頁(yè)格式。
  以上鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
   //第一種鏈接http://mp.weixin.qq.com/mp/get ... 3D1//第二種http://mp.weixin.qq.com/mp/pro ... r%3D1
  這個(gè)地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面,然后使用后面介紹的代理服務(wù)器軟件獲得的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=; 這四個(gè)參數。
  __biz 是公眾號的類(lèi)id參數。每個(gè)公眾號都有一個(gè)微信業(yè)務(wù)。目前公眾號的biz發(fā)生變化的概率很??;
  其余三個(gè)參數與用戶(hù)的 id 和 token 票證相關(guān)。這三個(gè)參數的值是微信客戶(hù)端生成后自動(dòng)添加到地址欄的。所以想要采集公眾號,必須通過(guò)微信客戶(hù)端。在微信之前的版本中,這三個(gè)參數也可以一次性獲取,在有效期內被多個(gè)公眾號使用。當前版本每次訪(fǎng)問(wèn)公共帳戶(hù)時(shí)都會(huì )更改參數值。
  我現在使用的方法只需要注意__biz參數即可。
  我的 采集 系統由以下部分組成:
  1、微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。經(jīng)測試,在批處理采集過(guò)程中,ios微信客戶(hù)端的崩潰率高于安卓系統。為了降低成本,我使用的是安卓模擬器。
  2、個(gè)人微信賬號:采集的內容,不僅需要微信客戶(hù)端,采集還需要個(gè)人微信賬號,因為這個(gè)微信賬號不能做其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾號歷史消息頁(yè)面中的文章列表發(fā)送到自己的服務(wù)器。具體的安裝和設置方法將在后面詳細介紹。
  4、文章列表分析與倉儲系統:我用php語(yǔ)言寫(xiě)的。后面會(huì )詳細介紹如何分析文章列表,建立采集隊列,實(shí)現批量采集內容。
  步
  一、安裝模擬器或者用手機安裝微信客戶(hù)端app,申請微信個(gè)人賬號并登錄app。這個(gè)我就不多說(shuō)了,大家都會(huì )的。
  二、代理服務(wù)器系統安裝
  目前我正在使用 Anyproxy,AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置將腳本代碼插入公眾號頁(yè)面。讓我們從安裝和配置過(guò)程開(kāi)始。
  1、安裝 NodeJS
  2、在命令行或者終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy并運行命令:sudo anyproxy -i; 參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器中安裝證書(shū):
  6、設置代理:Android模擬器的代理服務(wù)器地址是wifi鏈接的網(wǎng)關(guān)。將dhcp設置為static后可以看到網(wǎng)關(guān)地址。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器的默認端口是8001;
  現在打開(kāi)微信,點(diǎn)擊任意公眾號歷史消息或文章,可以在終端看到響應碼滾動(dòng)。如果沒(méi)有出現,請檢查您手機的代理設置是否正確。
  現在打開(kāi)瀏覽器地址:8002可以看到anyproxy的網(wǎng)頁(yè)界面。從微信點(diǎn)擊一個(gè)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  /mp/getmasssendmsg 開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示頁(yè)面是https加密的?,F在讓我們點(diǎn)擊這一行;
  =========2017 年 1 月 11 日更新==========
  一些以/mp/getmasssendmsg開(kāi)頭的微信網(wǎng)址會(huì )有302跳轉,跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址查看內容。
  如果右邊出現html文件的內容,則解密成功。如果沒(méi)有內容,請檢查anyproxy的運行模式是否有參數i,是否生成了ca證書(shū),手機上是否正確安裝了證書(shū)。
  現在我們手機上的所有內容都可以以明文形式通過(guò)代理服務(wù)器。接下來(lái),我們需要修改和配置代理服務(wù)器,以便獲取公眾號的內容。
  一、找到配置文件:
  mac系統中配置文件的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道的請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請詳細閱讀注釋?zhuān)@里只是原理介紹,了解后根據自己的情況修改內容):
  =========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面形式,而且同一個(gè)頁(yè)面形式總是顯示在不同的微信賬號中,但是為了兼容這兩種頁(yè)面形式,下面的代碼會(huì )保留兩種頁(yè)面形式的判斷,你也可以使用你的自己的頁(yè)面表單刪除li
   replaceServerResDataAsync:function(req,res,serverResData,callback){if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)if(serverResData.toString()!==""){try{//防止報錯退出程序varreg=/msgList = (.*?);/;//定義歷史消息正則匹配規則varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。try{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);//錯誤捕捉}callback(serverResData);//直接返回第二頁(yè)json內容}}}elseif(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)try{varreg=/var msgList = \&apos;(.*?)\&apos;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){callback(serverResData);}}elseif(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的jsontry{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);}callback(serverResData);}elseif(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)try{HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器}catch(e){}callback(serverResData);}elseif(/s\?__biz/i.test(req.url)||/mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)try{varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxPost.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);})});}catch(e){callback(serverResData);}}else{callback(serverResData);}},
  以上代碼使用anyproxy修改返回頁(yè)面內容的功能,將腳本注入頁(yè)面,將頁(yè)面內容發(fā)送給服務(wù)器。利用這個(gè)原理批量采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,下面詳細介紹:
  在 rule_default.js 文件的末尾添加以下代碼:
   functionHttpPost(str,url,path){//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名varhttp=require(&apos;http&apos;);vardata={str:encodeURIComponent(str),url:encodeURIComponent(url)};content=require(&apos;querystring&apos;).stringify(data);varoptions={method:"POST",host:"www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。port:80,path:path,//接收程序的路徑和文件名headers:{&apos;Content-Type&apos;:&apos;application/x-www-form-urlencoded; charset=UTF-8&apos;,"Content-Length":content.length}};varreq=http.request(options,function(res){res.setEncoding(&apos;utf8&apos;);res.on(&apos;data&apos;,function(chunk){console.log(&apos;BODY: &apos;+chunk);});});req.on(&apos;error&apos;,function(e){console.log(&apos;problem with request: &apos;+e.message);});req.write(content);req.end();}
  以上是規則修改的主要部分。需要將json內容發(fā)送到自己的服務(wù)器,并從服務(wù)器獲取跳轉到下一頁(yè)的地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低crash率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
   replaceRequestOption:function(req,option){varnewOption=option;if(/google/i.test(newOption.headers.host)){newOption.hostname="www.baidu.com";newOption.port="80";}returnnewOption;},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果啟動(dòng)報錯,程序可能無(wú)法干凈退出,端口被占用。此時(shí)輸入命令ps -a查看被占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺死進(jìn)程后,您可以啟動(dòng)anyproxy?;蛘遷indows的命令請原諒我不是很熟悉。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只是介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析后存入數據庫
<p>

querylist采集微信公眾號文章(querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-01-21 04:05 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api)
  querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api,采集分類(lèi)里面所有的公眾號,最好是排在前面的。超級簡(jiǎn)單還有兩個(gè),就是微信登錄了,可以得到某一個(gè)人閱讀所有的文章,還有未閱讀所有的,然后一個(gè)一個(gè)篩選上傳。querylist采集微信公眾號文章原理解析,基于android自動(dòng)化api進(jìn)行采集前端接入admin-session。
  從過(guò)去到現在,在“996”的現狀下,很多同學(xué)們被焦慮干擾,工作不知道做到什么時(shí)候才好,也不知道現在的工作有什么意義,怎么才能擁有一份可靠且體面的工作。其實(shí)這是職場(chǎng)的低谷期,因為你不知道以后的工作要靠什么。在這樣的大背景下,老張在工作中雖然算比較努力,可還是要被“論資排輩”,作為部門(mén)老人,需要經(jīng)常出差加班和處理公司的一些事情,要接受老板的要求,承擔公司的一些不利的情況。
  老張已經(jīng)郁悶到將近夜不能寐,一個(gè)一個(gè)深夜刷知乎、朋友圈和公眾號,不管干什么,不管怎么才能讓自己不那么焦慮。在公司當中老張的老板是屬于典型的家族企業(yè),他從一開(kāi)始就對老板很尊敬,除了工作和團隊不管其他事情。公司經(jīng)營(yíng)順利,但員工一直留不住?,F在他很迷茫,老板就是不放權,覺(jué)得憑他的能力很難接觸到更高的層面,但是公司也沒(méi)有其他發(fā)展機會(huì ),那老板每次經(jīng)營(yíng)不好,經(jīng)常找老板的問(wèn)題,可能也是不想讓自己承擔責任,他覺(jué)得自己就是“無(wú)功不受祿”,也不能挑戰權威,就是接著(zhù)從基層做起來(lái)。
  部門(mén)經(jīng)理跳槽去了大公司,公司對他也開(kāi)始有新的要求。老張現在也很迷茫,我覺(jué)得現在的工作沒(méi)什么意義,除了工資,還是沒(méi)有特別充足的收入。最近買(mǎi)了本書(shū),給自己充電,不知道那本書(shū)對我有沒(méi)有幫助。老張該如何跳槽?希望各位大佬發(fā)表看法,給點(diǎn)建議。 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api)
  querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api,采集分類(lèi)里面所有的公眾號,最好是排在前面的。超級簡(jiǎn)單還有兩個(gè),就是微信登錄了,可以得到某一個(gè)人閱讀所有的文章,還有未閱讀所有的,然后一個(gè)一個(gè)篩選上傳。querylist采集微信公眾號文章原理解析,基于android自動(dòng)化api進(jìn)行采集前端接入admin-session。
  從過(guò)去到現在,在“996”的現狀下,很多同學(xué)們被焦慮干擾,工作不知道做到什么時(shí)候才好,也不知道現在的工作有什么意義,怎么才能擁有一份可靠且體面的工作。其實(shí)這是職場(chǎng)的低谷期,因為你不知道以后的工作要靠什么。在這樣的大背景下,老張在工作中雖然算比較努力,可還是要被“論資排輩”,作為部門(mén)老人,需要經(jīng)常出差加班和處理公司的一些事情,要接受老板的要求,承擔公司的一些不利的情況。
  老張已經(jīng)郁悶到將近夜不能寐,一個(gè)一個(gè)深夜刷知乎、朋友圈和公眾號,不管干什么,不管怎么才能讓自己不那么焦慮。在公司當中老張的老板是屬于典型的家族企業(yè),他從一開(kāi)始就對老板很尊敬,除了工作和團隊不管其他事情。公司經(jīng)營(yíng)順利,但員工一直留不住?,F在他很迷茫,老板就是不放權,覺(jué)得憑他的能力很難接觸到更高的層面,但是公司也沒(méi)有其他發(fā)展機會(huì ),那老板每次經(jīng)營(yíng)不好,經(jīng)常找老板的問(wèn)題,可能也是不想讓自己承擔責任,他覺(jué)得自己就是“無(wú)功不受祿”,也不能挑戰權威,就是接著(zhù)從基層做起來(lái)。
  部門(mén)經(jīng)理跳槽去了大公司,公司對他也開(kāi)始有新的要求。老張現在也很迷茫,我覺(jué)得現在的工作沒(méi)什么意義,除了工資,還是沒(méi)有特別充足的收入。最近買(mǎi)了本書(shū),給自己充電,不知道那本書(shū)對我有沒(méi)有幫助。老張該如何跳槽?希望各位大佬發(fā)表看法,給點(diǎn)建議。

querylist采集微信公眾號文章(querylist采集微信公眾號文章(只支持微信)效果預覽)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 145 次瀏覽 ? 2022-01-20 12:08 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章(只支持微信)效果預覽)
  querylist采集微信公眾號文章(只支持微信公眾號文章)效果預覽該插件可以整合百度等搜索引擎來(lái)爬取網(wǎng)頁(yè),最主要的是可以采集微信公眾號文章。
  看這篇文章。差不多了。覺(jué)得不夠詳細,我再補充一下。
  如果你是要采集同一個(gè)平臺微信公眾號文章的話(huà),python只能做到類(lèi)似條件格式提?。ú杉轿恼聵祟},封面圖,推薦人等),采集內容比較少。如果要是采集多個(gè)平臺的文章,那就需要用數據采集框架。推薦你一個(gè)好的采集框架,
  微信有接口可以爬取你這里的東西,這里面有兩個(gè)數據采集,
  根據你的需求,最好用以下方式:1,去電腦上,下載這個(gè)app:星辰數據2,電腦上,安裝excel3,進(jìn)入excel,文件-數據采集框架,按流程編輯。
  使用api進(jìn)行api接口請求比如是關(guān)注數統計uiwebview上下載服務(wù)器。
  1、專(zhuān)門(mén)的爬蟲(chóng)庫也有api。2、建議去學(xué)學(xué)scrapy等,文檔好、資料多,關(guān)鍵還有師徒社區。
  感覺(jué)開(kāi)頭貌似需要一個(gè)采集python源碼的環(huán)境支持,因為微信這方面規定比較嚴格, 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章(只支持微信)效果預覽)
  querylist采集微信公眾號文章(只支持微信公眾號文章)效果預覽該插件可以整合百度等搜索引擎來(lái)爬取網(wǎng)頁(yè),最主要的是可以采集微信公眾號文章。
  看這篇文章。差不多了。覺(jué)得不夠詳細,我再補充一下。
  如果你是要采集同一個(gè)平臺微信公眾號文章的話(huà),python只能做到類(lèi)似條件格式提?。ú杉轿恼聵祟},封面圖,推薦人等),采集內容比較少。如果要是采集多個(gè)平臺的文章,那就需要用數據采集框架。推薦你一個(gè)好的采集框架,
  微信有接口可以爬取你這里的東西,這里面有兩個(gè)數據采集,
  根據你的需求,最好用以下方式:1,去電腦上,下載這個(gè)app:星辰數據2,電腦上,安裝excel3,進(jìn)入excel,文件-數據采集框架,按流程編輯。
  使用api進(jìn)行api接口請求比如是關(guān)注數統計uiwebview上下載服務(wù)器。
  1、專(zhuān)門(mén)的爬蟲(chóng)庫也有api。2、建議去學(xué)學(xué)scrapy等,文檔好、資料多,關(guān)鍵還有師徒社區。
  感覺(jué)開(kāi)頭貌似需要一個(gè)采集python源碼的環(huán)境支持,因為微信這方面規定比較嚴格,

querylist采集微信公眾號文章(微信小程序調試工具知識兔調試工具分為6大功能模塊)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 142 次瀏覽 ? 2022-01-19 07:04 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信小程序調試工具知識兔調試工具分為6大功能模塊)
  微信小程序一直受到很多用戶(hù)的歡迎,今天正式上線(xiàn)。相信很多小伙伴都很感興趣。小編為大家帶來(lái)微信小程序調試工具,幫助大家更好的開(kāi)發(fā)制作小程序。程序,想要自己制作小程序的朋友,不妨下載體驗一下吧!
  微信小程序獲取方法知識兔
  線(xiàn)下掃碼:獲取小程序最基本的方式就是二維碼。您可以通過(guò)微信掃描離線(xiàn)二維碼打開(kāi)掃描進(jìn)入小程序。
  微信搜索:同時(shí)在微信客戶(hù)端頂部的搜索窗口,也可以通過(guò)搜索獲取??小程序。
  公眾號關(guān)聯(lián):同一主題的小程序和公眾號可以關(guān)聯(lián)和跳轉。該功能需要開(kāi)發(fā)者在使用前進(jìn)行設置。
  朋友推薦:一個(gè)公眾號可以綁定五個(gè)小程序,一個(gè)小程序只能綁定一個(gè)公眾號。您可以通過(guò)公眾號查看和進(jìn)入關(guān)聯(lián)的小程序,反之亦然,您也可以通過(guò)小程序查看和進(jìn)入關(guān)聯(lián)的公眾號。
  當您發(fā)現有趣或有用的小程序時(shí),您可以將該小程序或其頁(yè)面之一轉發(fā)給朋友或群聊。但請注意,小程序不能在朋友圈發(fā)布和分享。
  歷史記錄:使用過(guò)某個(gè)小程序后,可以在微信客戶(hù)端“發(fā)現-小程序”的列表中看到該小程序。當您想再次使用它時(shí),您可以使用列表中的歷史記錄。進(jìn)入。在“發(fā)現-小程序”中,您也可以通過(guò)搜索進(jìn)入小程序。
  微信小程序調試工具 知識兔
  調試工具分為6個(gè)功能模塊:Wxml、Console、Sources、Network、Appdata、Storage
  
  點(diǎn)擊下載 查看全部

  querylist采集微信公眾號文章(微信小程序調試工具知識兔調試工具分為6大功能模塊)
  微信小程序一直受到很多用戶(hù)的歡迎,今天正式上線(xiàn)。相信很多小伙伴都很感興趣。小編為大家帶來(lái)微信小程序調試工具,幫助大家更好的開(kāi)發(fā)制作小程序。程序,想要自己制作小程序的朋友,不妨下載體驗一下吧!
  微信小程序獲取方法知識兔
  線(xiàn)下掃碼:獲取小程序最基本的方式就是二維碼。您可以通過(guò)微信掃描離線(xiàn)二維碼打開(kāi)掃描進(jìn)入小程序。
  微信搜索:同時(shí)在微信客戶(hù)端頂部的搜索窗口,也可以通過(guò)搜索獲取??小程序。
  公眾號關(guān)聯(lián):同一主題的小程序和公眾號可以關(guān)聯(lián)和跳轉。該功能需要開(kāi)發(fā)者在使用前進(jìn)行設置。
  朋友推薦:一個(gè)公眾號可以綁定五個(gè)小程序,一個(gè)小程序只能綁定一個(gè)公眾號。您可以通過(guò)公眾號查看和進(jìn)入關(guān)聯(lián)的小程序,反之亦然,您也可以通過(guò)小程序查看和進(jìn)入關(guān)聯(lián)的公眾號。
  當您發(fā)現有趣或有用的小程序時(shí),您可以將該小程序或其頁(yè)面之一轉發(fā)給朋友或群聊。但請注意,小程序不能在朋友圈發(fā)布和分享。
  歷史記錄:使用過(guò)某個(gè)小程序后,可以在微信客戶(hù)端“發(fā)現-小程序”的列表中看到該小程序。當您想再次使用它時(shí),您可以使用列表中的歷史記錄。進(jìn)入。在“發(fā)現-小程序”中,您也可以通過(guò)搜索進(jìn)入小程序。
  微信小程序調試工具 知識兔
  調試工具分為6個(gè)功能模塊:Wxml、Console、Sources、Network、Appdata、Storage
  
  點(diǎn)擊下載

querylist采集微信公眾號文章(querylist采集微信公眾號文章列表url,不能傳遞給其他用戶(hù))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2022-02-19 11:01 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章列表url,不能傳遞給其他用戶(hù))
  querylist采集微信公眾號文章列表url,如果是公眾號文章的話(huà),采集下一篇文章,
  這是一篇微信公眾號文章的下一篇文章,即不能傳遞給其他用戶(hù),也不能傳遞給群發(fā)外鏈的用戶(hù),如果不想發(fā)給群發(fā)外鏈的朋友,
  基本上常用的方法還是爬蟲(chóng),爬公眾號文章內容。webservice什么的,
  這個(gè)爬蟲(chóng)還行,不過(guò)一般不會(huì )用,因為流量來(lái)源沒(méi)準,有很大可能找不到真正的爬蟲(chóng)。
  你可以把文章列表分段遍歷
  這個(gè)還是有點(diǎn)不錯的,可以采集公眾號內容,
  可以考慮用pythonflask框架寫(xiě)爬蟲(chóng).用beautifulsoup庫,基本可以滿(mǎn)足你的需求.beautifulsoup不是為爬蟲(chóng)服務(wù)的,他是做api/xpath解析或xml解析用的.你這個(gè)是轉換列表文章,讓別人來(lái)爬你的吧.
  beautifulsoup寫(xiě)爬蟲(chóng)還行吧
  這個(gè)好像不能,
  先要弄清楚一個(gè)事情,網(wǎng)站內容都是微信公眾號服務(wù)號提供的,不能像知乎這樣存。
  可以用知乎采集
  你有兩個(gè)選擇一個(gè)是用爬蟲(chóng),一個(gè)是用思科的機器人軟件。兩個(gè)都是工具沒(méi)有內容抽取這個(gè)功能。
  拿爬蟲(chóng)去爬微信公眾號文章或者qq空間文章或者百度新聞看看有沒(méi)有給文章貼鏈接。 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章列表url,不能傳遞給其他用戶(hù))
  querylist采集微信公眾號文章列表url,如果是公眾號文章的話(huà),采集下一篇文章,
  這是一篇微信公眾號文章的下一篇文章,即不能傳遞給其他用戶(hù),也不能傳遞給群發(fā)外鏈的用戶(hù),如果不想發(fā)給群發(fā)外鏈的朋友,
  基本上常用的方法還是爬蟲(chóng),爬公眾號文章內容。webservice什么的,
  這個(gè)爬蟲(chóng)還行,不過(guò)一般不會(huì )用,因為流量來(lái)源沒(méi)準,有很大可能找不到真正的爬蟲(chóng)。
  你可以把文章列表分段遍歷
  這個(gè)還是有點(diǎn)不錯的,可以采集公眾號內容,
  可以考慮用pythonflask框架寫(xiě)爬蟲(chóng).用beautifulsoup庫,基本可以滿(mǎn)足你的需求.beautifulsoup不是為爬蟲(chóng)服務(wù)的,他是做api/xpath解析或xml解析用的.你這個(gè)是轉換列表文章,讓別人來(lái)爬你的吧.
  beautifulsoup寫(xiě)爬蟲(chóng)還行吧
  這個(gè)好像不能,
  先要弄清楚一個(gè)事情,網(wǎng)站內容都是微信公眾號服務(wù)號提供的,不能像知乎這樣存。
  可以用知乎采集
  你有兩個(gè)選擇一個(gè)是用爬蟲(chóng),一個(gè)是用思科的機器人軟件。兩個(gè)都是工具沒(méi)有內容抽取這個(gè)功能。
  拿爬蟲(chóng)去爬微信公眾號文章或者qq空間文章或者百度新聞看看有沒(méi)有給文章貼鏈接。

querylist采集微信公眾號文章(querylist采集微信公眾號文章存儲格式接口介紹參考資料)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 146 次瀏覽 ? 2022-02-18 10:01 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章存儲格式接口介紹參考資料)
  querylist采集微信公眾號文章,發(fā)布到一個(gè)querylist文件,
  一、querylist接口:1.
  1、文章行接口#{0}即文章的標題#{1}即文章的作者#{2}即文章的標簽。
  2、文章列表接口2.
  1、文章列表類(lèi):#{1}#{2}即文章的標題:#{2}#{3}即文章的標簽:#{3}#{4}即分享鏈接:#{4}2.
  2、圖文消息類(lèi):#{1}#{2}#{3}即圖文消息的標題:#{2}#{3}#{4}即分享鏈接:#{4}2.
  3、公眾號文章列表接口#{0}接口介紹#{1}接口介紹#{2}接口介紹#{3}接口介紹參考資料:對于文章列表,每一個(gè)標題后面都需要加#{0},以下是圖文消息的二維碼。
  二、存儲格式querylist接口中的string字符串存儲格式如下:order+*,即***的序列。
  java對象,可以讓querylist支持索引并存儲二級索引:在mybatis中,或者在rabbitmq中,索引可以支持一個(gè)或多個(gè),但是如果接收的是二級索引的話(huà),需要提供一個(gè)名稱(chēng)實(shí)體:@mapped(mappedinfo,mappedname)publicclassorderedescription{@value("id")privateintid;@value("name")privatestringname;}2。
  可以建立多個(gè)查詢(xún),但是有時(shí)候,并不能滿(mǎn)足查詢(xún)的很多需求@mapped(mappedinfo,mappedname)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){returnnull;}//。
  1)建立一個(gè)新的查詢(xún)@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){try{newquerylist();}catch(exceptione){e。printstacktrace();}}//。
  2)對查詢(xún)結果進(jìn)行修改update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。printstacktrace();2。2??梢圆榭床煌念?lèi)型的文章,endpoint=null不代表不能查詢(xún),代表建立新的查詢(xún)@mapped(mappedinfo。
  id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。
  printstacktrace();}}}2。3??梢詫Ψ祷亟Y果集進(jìn)行排序@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)。 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章存儲格式接口介紹參考資料)
  querylist采集微信公眾號文章,發(fā)布到一個(gè)querylist文件,
  一、querylist接口:1.
  1、文章行接口#{0}即文章的標題#{1}即文章的作者#{2}即文章的標簽。
  2、文章列表接口2.
  1、文章列表類(lèi):#{1}#{2}即文章的標題:#{2}#{3}即文章的標簽:#{3}#{4}即分享鏈接:#{4}2.
  2、圖文消息類(lèi):#{1}#{2}#{3}即圖文消息的標題:#{2}#{3}#{4}即分享鏈接:#{4}2.
  3、公眾號文章列表接口#{0}接口介紹#{1}接口介紹#{2}接口介紹#{3}接口介紹參考資料:對于文章列表,每一個(gè)標題后面都需要加#{0},以下是圖文消息的二維碼。
  二、存儲格式querylist接口中的string字符串存儲格式如下:order+*,即***的序列。
  java對象,可以讓querylist支持索引并存儲二級索引:在mybatis中,或者在rabbitmq中,索引可以支持一個(gè)或多個(gè),但是如果接收的是二級索引的話(huà),需要提供一個(gè)名稱(chēng)實(shí)體:@mapped(mappedinfo,mappedname)publicclassorderedescription{@value("id")privateintid;@value("name")privatestringname;}2。
  可以建立多個(gè)查詢(xún),但是有時(shí)候,并不能滿(mǎn)足查詢(xún)的很多需求@mapped(mappedinfo,mappedname)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){returnnull;}//。
  1)建立一個(gè)新的查詢(xún)@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){if(endpoint==null){try{newquerylist();}catch(exceptione){e。printstacktrace();}}//。
  2)對查詢(xún)結果進(jìn)行修改update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。printstacktrace();2。2??梢圆榭床煌念?lèi)型的文章,endpoint=null不代表不能查詢(xún),代表建立新的查詢(xún)@mapped(mappedinfo。
  id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)int);if(endpoint!=null){try{newquerylist();}catch(exceptione){e。
  printstacktrace();}}}2。3??梢詫Ψ祷亟Y果集進(jìn)行排序@mapped(mappedinfo。id,mappedinfo。name)publicstringquerylist(@mappedinfo()stringendpoint){update(endpoint,(endpoint,new)。

querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 183 次瀏覽 ? 2022-02-15 18:00 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本,直接安裝即可。安裝后直接運行C:\Program Files\nodejs\npm.cmd會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  只要把一個(gè)安卓模擬器放到網(wǎng)上,有很多。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ----------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )使用這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的web界面,用來(lái)顯示http傳輸數據。
  
  點(diǎn)擊上方紅框內的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)公眾號文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框內是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部暢通了,就可以往下走。
  這里我們是靠代理服務(wù)抓取微信數據,但是不能自己抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順理成章理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。有需要的可以試試。 查看全部

  querylist采集微信公眾號文章(爬取大牛用微信公眾號爬取程序的難點(diǎn)及解決辦法)
  最近需要爬取微信公眾號的文章信息。我在網(wǎng)上搜索,發(fā)現爬取微信公眾號的難點(diǎn)在于公眾號文章的鏈接在PC端打不開(kāi),所以需要使用微信自帶的瀏覽器(獲取參數微信客戶(hù)端補充)可以在其他平臺打開(kāi)),給爬蟲(chóng)帶來(lái)了很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,直接按照大佬的思路做成了java。改造過(guò)程中遇到了很多細節和問(wèn)題,分享給大家。
  附上大牛的鏈接文章:寫(xiě)php或者只需要爬取思路的可以直接看這個(gè)。這些想法寫(xiě)得很詳細。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ------------------
  系統的基本思路是在A(yíng)ndroid模擬器上運行微信,在模擬器上設置代理,通過(guò)代理服務(wù)器截取微信數據,將獲取到的數據發(fā)送給自己的程序處理。
  需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
  nodejs下載地址:我下載的是windows版本,直接安裝即可。安裝后直接運行C:\Program Files\nodejs\npm.cmd會(huì )自動(dòng)配置環(huán)境。
  anyproxy安裝:按照上一步安裝nodejs后,直接在cmd中運行npm install -g anyproxy即可安裝
  只要把一個(gè)安卓模擬器放到網(wǎng)上,有很多。
  ----------------------------------- ---------- ---------------------------------------- ---------- ---------------------------------------- ---------- ----------------------------------------
  首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后,就可以解析了。在cmd中執行anyproxy --root安裝證書(shū),然后在模擬器中下載證書(shū)。
  然后輸入anyproxy -i 命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />   
  記住這個(gè)ip和端口,那么安卓模擬器的代理就會(huì )使用這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的web界面,用來(lái)顯示http傳輸數據。
  
  點(diǎn)擊上方紅框內的菜單,會(huì )出現一個(gè)二維碼。用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
  現在準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
  
  準備工作到這里基本完成。在模擬器上打開(kāi)微信,打開(kāi)公眾號文章,就可以從剛剛打開(kāi)的web界面看到anyproxy抓取的數據:
  
  上圖紅框內是微信文章的鏈接,點(diǎn)擊查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
  如果頂部暢通了,就可以往下走。
  這里我們是靠代理服務(wù)抓取微信數據,但是不能自己抓取一條數據自己操作微信,所以還是手動(dòng)復制比較好。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)可以使用anyproxy攔截微信服務(wù)器返回的數據,將頁(yè)面跳轉代碼注入其中,然后將處理后的數據返回給模擬器,實(shí)現微信客戶(hù)端的自動(dòng)跳轉。
  在anyproxy中打開(kāi)一個(gè)名為rule_default.js的js文件,windows下的文件為:C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib
  文件中有一個(gè)方法叫做replaceServerResDataAsync:function(req,res,serverResData,callback)。該方法負責對anyproxy獲取的數據進(jìn)行各種操作。開(kāi)頭應該只有 callback(serverResData) ;該語(yǔ)句的意思是直接將服務(wù)器響應數據返回給客戶(hù)端。直接把這條語(yǔ)句刪掉,換成下面大牛寫(xiě)的代碼。這里的代碼我沒(méi)有做任何改動(dòng),里面的注釋也解釋的很清楚。順理成章理解就好,問(wèn)題不大。
  
   1 replaceServerResDataAsync: function(req,res,serverResData,callback){
2 if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)
3 //console.log("開(kāi)始第一種頁(yè)面爬取");
4 if(serverResData.toString() !== ""){
5 6 try {//防止報錯退出程序
7 var reg = /msgList = (.*?);/;//定義歷史消息正則匹配規則
8 var ret = reg.exec(serverResData.toString());//轉換變量為string
9 HttpPost(ret[1],req.url,"/InternetSpider/getData/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
10 var http = require(&#39;http&#39;);
11 http.get(&#39;http://xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
12 res.on(&#39;data&#39;, function(chunk){
13 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
14 })
15 });
16 }catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。
17 //console.log("開(kāi)始第一種頁(yè)面爬取向下翻形式");
18 try {
19 var json = JSON.parse(serverResData.toString());
20 if (json.general_msg_list != []) {
21 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
22 }
23 }catch(e){
24 console.log(e);//錯誤捕捉
25 }
26 callback(serverResData);//直接返回第二頁(yè)json內容
27 }
28 }
29 //console.log("開(kāi)始第一種頁(yè)面爬取 結束");
30 }else if(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)
31 try {
32 var reg = /var msgList = \&#39;(.*?)\&#39;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)
33 var ret = reg.exec(serverResData.toString());//轉換變量為string
34 HttpPost(ret[1],req.url,"/xxx/showBiz");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器
35 var http = require(&#39;http&#39;);
36 http.get(&#39;xxx/getWxHis&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。
37 res.on(&#39;data&#39;, function(chunk){
38 callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)
39 })
40 });
41 }catch(e){
42 //console.log(e);
43 callback(serverResData);
44 }
45 }else if(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的json
46 try {
47 var json = JSON.parse(serverResData.toString());
48 if (json.general_msg_list != []) {
49 HttpPost(json.general_msg_list,req.url,"/xxx/showBiz");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器
50 }
51 }catch(e){
52 console.log(e);
53 }
54 callback(serverResData);
55 }else if(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)
56 try {
57 HttpPost(serverResData,req.url,"/xxx/getMsgExt");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器
58 }catch(e){
59
60 }
61 callback(serverResData);
62 }else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)
63 try {
64 var http = require(&#39;http&#39;);
65 http.get(&#39;http://xxx/getWxPost&#39;, function(res) {//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。
66 res.on(&#39;data&#39;, function(chunk){
67 callback(chunk+serverResData);
68 })
69 });
70 }catch(e){
71 callback(serverResData);
72 }
73 }else{
74 callback(serverResData);
75 }
76 //callback(serverResData);
77 },
  
  這里是一個(gè)簡(jiǎn)短的解釋。微信公眾號歷史新聞頁(yè)面的鏈接有兩種形式:一種以/mp/getmasssendmsg開(kāi)頭,另一種以/mp/profile_ext開(kāi)頭。歷史頁(yè)面可以向下滾動(dòng)。向下滾動(dòng)會(huì )觸發(fā)js事件發(fā)送請求獲取json數據(下一頁(yè)的內容)。還有公眾號文章的鏈接,以及文章的閱讀和點(diǎn)贊鏈接(返回json數據)。這些環(huán)節的形式是固定的,可以通過(guò)邏輯判斷加以區分。這里有個(gè)問(wèn)題,如果歷史頁(yè)面需要一路爬取怎么辦。我的想法是通過(guò)js模擬鼠標向下滑動(dòng),從而觸發(fā)請求提交下一部分列表的加載?;蛘咧苯邮褂胊nyproxy分析下載請求,直接向微信服務(wù)器發(fā)出這個(gè)請求。但是有一個(gè)問(wèn)題是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)要求,但以后可能需要。有需要的可以試試。

querylist采集微信公眾號文章(搜狗搜索有個(gè)不足實(shí)現公眾號的爬蟲(chóng)需要安裝 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2022-02-14 04:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(搜狗搜索有個(gè)不足實(shí)現公眾號的爬蟲(chóng)需要安裝
)
  因為搜狗搜索有微信公眾號搜索的接口,所以可以通過(guò)這個(gè)接口實(shí)現公眾號的爬蟲(chóng)。
  
  需要安裝幾個(gè)python庫:selenium、pyquery
  我們也用到了phantomjs.exe,需要自己下載,然后放到我們自己的python項目下。
  在輸入框中輸入你要爬取的公眾號的微信號,然后搜索公眾號,
  
  可以出現搜索結果,進(jìn)入首頁(yè)可以看到公眾號最近發(fā)布的文章,點(diǎn)擊標題查看文章的內容
  
  這種思路,可以在網(wǎng)頁(yè)上查看微信公眾號的推送,實(shí)現公眾號爬蟲(chóng);但搜狗搜索有個(gè)缺點(diǎn),只能查看公眾號最近發(fā)布的10條推送,無(wú)法查看過(guò)去的歷史記錄。
  有了爬蟲(chóng)思路后,就開(kāi)始執行流程,先拿到搜狗搜索的接口
  通過(guò)這個(gè)接口可以得到公眾號首頁(yè)的入口,文章列表,文章內容,用python寫(xiě)爬蟲(chóng)的實(shí)現,下面是運行結果,得到&lt; @文章 標題、文章 鏈接、文章 簡(jiǎn)要說(shuō)明、發(fā)表時(shí)間、封面圖片鏈接、文章 內容,并將抓取的信息保存到文本文檔中,文章@ &gt; 公眾號爬取結束。
  廢話(huà)不多說(shuō),代碼如下:
  
from pyquery import PyQuery as pq
from selenium import webdriver
import os
import re
import requests
import time
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
browser = webdriver.PhantomJS(executable_path=r&#39;phantomjs.exe&#39;)
browser.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = browser.execute_script("return document.documentElement.outerHTML")
browser.close()
return html
def log(msg):
print(&#39;%s: %s&#39; % (time.strftime(&#39;%Y-%m-%d %H:%M:%S&#39;), msg))
# 創(chuàng )建公眾號命名的文件夾
def create_dir():
if not os.path.exists(keyword):
os.makedirs(keyword)
# 將獲取到的文章轉換為字典
def switch_articles_to_list(articles):
articles_list = []
i = 1
if articles:
for article in articles.items():
log(u&#39;開(kāi)始整合(%d/%d)&#39; % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article, i))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article, i):
article_dict = {}
# 獲取標題
title = article(&#39;h4[class="weui_media_title"]&#39;).text().strip()
log(u&#39;標題是: %s&#39; % title)
# 獲取標題對應的地址
url = &#39;http://mp.weixin.qq.com&#39; + article(&#39;h4[class="weui_media_title"]&#39;).attr(&#39;hrefs&#39;)
log(u&#39;地址為: %s&#39; % url)
# 獲取概要內容
summary = article(&#39;.weui_media_desc&#39;).text()
log(u&#39;文章簡(jiǎn)述: %s&#39; % summary)
# 獲取文章發(fā)表時(shí)間
date = article(&#39;.weui_media_extra_info&#39;).text().strip()
log(u&#39;發(fā)表時(shí)間為: %s&#39; % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 獲取文章內容(pyQuery.text / html)
#log(&#39;content是&#39;)
#log(parse_content_by_url(url))
content = parse_content_by_url(url).text()
log(&#39;獲取到content&#39;)
# 存儲文章到本地
#content_file_title = keyword + &#39;/&#39; + str(i) + &#39;_&#39; + title + &#39;_&#39; + date + &#39;.html&#39;
#with open(content_file_title, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
# f.write(content)
content_title = keyword + &#39;/&#39; + keyword + &#39;.txt&#39;
with open(content_title, &#39;a&#39;, encoding=&#39;utf-8&#39;) as f:
print(&#39;第&#39;, i, &#39;條&#39;, file=f)
print(&#39;title:&#39;, title, file=f)
print(&#39;url:&#39;, url, file=f)
print(&#39;summary:&#39;, summary, file=f)
print(&#39;date:&#39;, date, file=f)
print(&#39;pic:&#39;, pic, file=f)
print(&#39;content:&#39;, content, file=f)
print(file=f)
log(&#39;寫(xiě)入content&#39;)
article_dict = {
&#39;title&#39;: title,
&#39;url&#39;: url,
&#39;summary&#39;: summary,
&#39;date&#39;: date,
&#39;pic&#39;: pic,
&#39;content&#39;: content
}
return article_dict
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article(&#39;.weui_media_hd&#39;).attr(&#39;style&#39;)
p = re.compile(r&#39;background-image:url\((.*?)\)&#39;)
rs = p.findall(pic)
log(u&#39;封面圖片是:%s &#39; % rs[0] if len(rs) > 0 else &#39;&#39;)
return rs[0] if len(rs) > 0 else &#39;&#39;
# 獲取文章頁(yè)面詳情
def parse_content_by_url(url):
page_html = get_selenium_js_html(url)
return pq(page_html)(&#39;#js_content&#39;)
&#39;&#39;&#39;程序入口&#39;&#39;&#39;
keyword = &#39;python&#39;
create_dir()
url = &#39;http://weixin.sogou.com/weixin?query=%s&#39; % keyword
headers = {&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0&#39;}
try:
log(u&#39;開(kāi)始調用sougou搜索引擎&#39;)
r = requests.get(url, headers=headers)
r.raise_for_status()
print(r.status_code)
print(r.request.url)
print(len(r.text))
#print(r.text)
#print(re.Session().get(url).text)
except:
print(&#39;爬取失敗&#39;)
# 獲得公眾號主頁(yè)地址
doc = pq(r.text)
log(u&#39;獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url&#39;)
home_url = doc(&#39;div[class=txt-box]&#39;)(&#39;p[class=tit]&#39;)(&#39;a&#39;).attr(&#39;href&#39;)
log(u&#39;獲取wx_url成功,%s&#39; % home_url)
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
log(u&#39;開(kāi)始調用selenium渲染公眾號主頁(yè)html&#39;)
html = get_selenium_js_html(home_url)
#有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試
if pq(html)(&#39;#verify_change&#39;).text() != &#39;&#39;:
log(u&#39;爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試&#39;)
else:
log(u&#39;調用selenium渲染html完成,開(kāi)始解析公眾號文章&#39;)
doc = pq(html)
articles = doc(&#39;div[class="weui_media_box appmsg"]&#39;)
#print(articles)
log(u&#39;抓取到微信文章%d篇&#39; % len(articles))
article_list = switch_articles_to_list(articles)
print(article_list)
log(&#39;程序結束&#39;) 查看全部

  querylist采集微信公眾號文章(搜狗搜索有個(gè)不足實(shí)現公眾號的爬蟲(chóng)需要安裝
)
  因為搜狗搜索有微信公眾號搜索的接口,所以可以通過(guò)這個(gè)接口實(shí)現公眾號的爬蟲(chóng)。
  
  需要安裝幾個(gè)python庫:selenium、pyquery
  我們也用到了phantomjs.exe,需要自己下載,然后放到我們自己的python項目下。
  在輸入框中輸入你要爬取的公眾號的微信號,然后搜索公眾號,
  
  可以出現搜索結果,進(jìn)入首頁(yè)可以看到公眾號最近發(fā)布的文章,點(diǎn)擊標題查看文章的內容
  
  這種思路,可以在網(wǎng)頁(yè)上查看微信公眾號的推送,實(shí)現公眾號爬蟲(chóng);但搜狗搜索有個(gè)缺點(diǎn),只能查看公眾號最近發(fā)布的10條推送,無(wú)法查看過(guò)去的歷史記錄。
  有了爬蟲(chóng)思路后,就開(kāi)始執行流程,先拿到搜狗搜索的接口
  通過(guò)這個(gè)接口可以得到公眾號首頁(yè)的入口,文章列表,文章內容,用python寫(xiě)爬蟲(chóng)的實(shí)現,下面是運行結果,得到&lt; @文章 標題、文章 鏈接、文章 簡(jiǎn)要說(shuō)明、發(fā)表時(shí)間、封面圖片鏈接、文章 內容,并將抓取的信息保存到文本文檔中,文章@ &gt; 公眾號爬取結束。
  廢話(huà)不多說(shuō),代碼如下:
  
from pyquery import PyQuery as pq
from selenium import webdriver
import os
import re
import requests
import time
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
def get_selenium_js_html(url):
browser = webdriver.PhantomJS(executable_path=r&#39;phantomjs.exe&#39;)
browser.get(url)
time.sleep(3)
# 執行js得到整個(gè)頁(yè)面內容
html = browser.execute_script("return document.documentElement.outerHTML")
browser.close()
return html
def log(msg):
print(&#39;%s: %s&#39; % (time.strftime(&#39;%Y-%m-%d %H:%M:%S&#39;), msg))
# 創(chuàng )建公眾號命名的文件夾
def create_dir():
if not os.path.exists(keyword):
os.makedirs(keyword)
# 將獲取到的文章轉換為字典
def switch_articles_to_list(articles):
articles_list = []
i = 1
if articles:
for article in articles.items():
log(u&#39;開(kāi)始整合(%d/%d)&#39; % (i, len(articles)))
# 處理單個(gè)文章
articles_list.append(parse_one_article(article, i))
i += 1
return articles_list
# 解析單篇文章
def parse_one_article(article, i):
article_dict = {}
# 獲取標題
title = article(&#39;h4[class="weui_media_title"]&#39;).text().strip()
log(u&#39;標題是: %s&#39; % title)
# 獲取標題對應的地址
url = &#39;http://mp.weixin.qq.com&#39; + article(&#39;h4[class="weui_media_title"]&#39;).attr(&#39;hrefs&#39;)
log(u&#39;地址為: %s&#39; % url)
# 獲取概要內容
summary = article(&#39;.weui_media_desc&#39;).text()
log(u&#39;文章簡(jiǎn)述: %s&#39; % summary)
# 獲取文章發(fā)表時(shí)間
date = article(&#39;.weui_media_extra_info&#39;).text().strip()
log(u&#39;發(fā)表時(shí)間為: %s&#39; % date)
# 獲取封面圖片
pic = parse_cover_pic(article)
# 獲取文章內容(pyQuery.text / html)
#log(&#39;content是&#39;)
#log(parse_content_by_url(url))
content = parse_content_by_url(url).text()
log(&#39;獲取到content&#39;)
# 存儲文章到本地
#content_file_title = keyword + &#39;/&#39; + str(i) + &#39;_&#39; + title + &#39;_&#39; + date + &#39;.html&#39;
#with open(content_file_title, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
# f.write(content)
content_title = keyword + &#39;/&#39; + keyword + &#39;.txt&#39;
with open(content_title, &#39;a&#39;, encoding=&#39;utf-8&#39;) as f:
print(&#39;第&#39;, i, &#39;條&#39;, file=f)
print(&#39;title:&#39;, title, file=f)
print(&#39;url:&#39;, url, file=f)
print(&#39;summary:&#39;, summary, file=f)
print(&#39;date:&#39;, date, file=f)
print(&#39;pic:&#39;, pic, file=f)
print(&#39;content:&#39;, content, file=f)
print(file=f)
log(&#39;寫(xiě)入content&#39;)
article_dict = {
&#39;title&#39;: title,
&#39;url&#39;: url,
&#39;summary&#39;: summary,
&#39;date&#39;: date,
&#39;pic&#39;: pic,
&#39;content&#39;: content
}
return article_dict
# 查找封面圖片,獲取封面圖片地址
def parse_cover_pic(article):
pic = article(&#39;.weui_media_hd&#39;).attr(&#39;style&#39;)
p = re.compile(r&#39;background-image:url\((.*?)\)&#39;)
rs = p.findall(pic)
log(u&#39;封面圖片是:%s &#39; % rs[0] if len(rs) > 0 else &#39;&#39;)
return rs[0] if len(rs) > 0 else &#39;&#39;
# 獲取文章頁(yè)面詳情
def parse_content_by_url(url):
page_html = get_selenium_js_html(url)
return pq(page_html)(&#39;#js_content&#39;)
&#39;&#39;&#39;程序入口&#39;&#39;&#39;
keyword = &#39;python&#39;
create_dir()
url = &#39;http://weixin.sogou.com/weixin?query=%s&#39; % keyword
headers = {&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0&#39;}
try:
log(u&#39;開(kāi)始調用sougou搜索引擎&#39;)
r = requests.get(url, headers=headers)
r.raise_for_status()
print(r.status_code)
print(r.request.url)
print(len(r.text))
#print(r.text)
#print(re.Session().get(url).text)
except:
print(&#39;爬取失敗&#39;)
# 獲得公眾號主頁(yè)地址
doc = pq(r.text)
log(u&#39;獲取sougou_search_html成功,開(kāi)始抓取公眾號對應的主頁(yè)wx_url&#39;)
home_url = doc(&#39;div[class=txt-box]&#39;)(&#39;p[class=tit]&#39;)(&#39;a&#39;).attr(&#39;href&#39;)
log(u&#39;獲取wx_url成功,%s&#39; % home_url)
# 使用webdriver 加載公眾號主頁(yè)內容,主要是js渲染的部分
log(u&#39;開(kāi)始調用selenium渲染公眾號主頁(yè)html&#39;)
html = get_selenium_js_html(home_url)
#有時(shí)候對方會(huì )封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話(huà),代表被重定向了,提醒過(guò)一陣子重試
if pq(html)(&#39;#verify_change&#39;).text() != &#39;&#39;:
log(u&#39;爬蟲(chóng)被目標網(wǎng)站封鎖,請稍后再試&#39;)
else:
log(u&#39;調用selenium渲染html完成,開(kāi)始解析公眾號文章&#39;)
doc = pq(html)
articles = doc(&#39;div[class="weui_media_box appmsg"]&#39;)
#print(articles)
log(u&#39;抓取到微信文章%d篇&#39; % len(articles))
article_list = switch_articles_to_list(articles)
print(article_list)
log(&#39;程序結束&#39;)

querylist采集微信公眾號文章(excel添加索引就行的兩種解決方法:)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 124 次瀏覽 ? 2022-02-12 02:02 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(excel添加索引就行的兩種解決方法:)
  querylist采集微信公眾號文章鏈接,轉換為excel格式,用rust實(shí)現中間轉換器。定義excel轉換器對象publicstaticlistexceltransform.newarray(nextnext,exceltype.literal,prev){prev.add(nextnext);returnprev;}定義prev對象:rust>>>arr:=newrust()>>>arr[5]:=prev>>>arr[5]list.newarray(nextnext,exceltype.pointer).add_many_numbers(nextnext,。
  1)>>>arr[5]:=newrust()>>>arr[1]:=prev>>>arr[1]newarray
  5).add_many_numbers
  0)轉換后為:tarray:=prevrust>>>arr:=arr[5]newarray
  0)>>>arr[1]:=prevlist.newarray
  1)>>>arr[5]:=arr[5]
  excel添加索引就行。
  說(shuō)下這個(gè)問(wèn)題的兩種解決方法:1.每一個(gè)excel文件作為一個(gè)字典。每一個(gè)字符對應一個(gè)key。每一個(gè)key值對應一個(gè)value。對于輸入的value,可以一次生成多列,int或者long變量??梢员容^多個(gè)一行輸入的excel文件,實(shí)時(shí)添加到字典,把所有輸入的value組合成一個(gè)詞典。也可以根據string輸入的唯一標識+某個(gè)trait定義出來(lái)的對應關(guān)系。
  2.對于excel數據量更多的話(huà),可以采用用string和property機制來(lái)處理,可以自定義各個(gè)headerdeleteheaderint等。 查看全部

  querylist采集微信公眾號文章(excel添加索引就行的兩種解決方法:)
  querylist采集微信公眾號文章鏈接,轉換為excel格式,用rust實(shí)現中間轉換器。定義excel轉換器對象publicstaticlistexceltransform.newarray(nextnext,exceltype.literal,prev){prev.add(nextnext);returnprev;}定義prev對象:rust>>>arr:=newrust()>>>arr[5]:=prev>>>arr[5]list.newarray(nextnext,exceltype.pointer).add_many_numbers(nextnext,。
  1)>>>arr[5]:=newrust()>>>arr[1]:=prev>>>arr[1]newarray
  5).add_many_numbers
  0)轉換后為:tarray:=prevrust>>>arr:=arr[5]newarray
  0)>>>arr[1]:=prevlist.newarray
  1)>>>arr[5]:=arr[5]
  excel添加索引就行。
  說(shuō)下這個(gè)問(wèn)題的兩種解決方法:1.每一個(gè)excel文件作為一個(gè)字典。每一個(gè)字符對應一個(gè)key。每一個(gè)key值對應一個(gè)value。對于輸入的value,可以一次生成多列,int或者long變量??梢员容^多個(gè)一行輸入的excel文件,實(shí)時(shí)添加到字典,把所有輸入的value組合成一個(gè)詞典。也可以根據string輸入的唯一標識+某個(gè)trait定義出來(lái)的對應關(guān)系。
  2.對于excel數據量更多的話(huà),可以采用用string和property機制來(lái)處理,可以自定義各個(gè)headerdeleteheaderint等。

querylist采集微信公眾號文章( 一種微信公眾號是否有敏感詞匯的檢測方法及裝置)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 208 次瀏覽 ? 2022-02-10 22:22 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
一種微信公眾號是否有敏感詞匯的檢測方法及裝置)
  
  本發(fā)明屬于微信公眾號廣告投放領(lǐng)域,具體涉及一種微信公眾號是否存在敏感詞的檢測方法及裝置。
  背景技術(shù):
  微信公眾平臺主要面向名人、政府、媒體、企業(yè)等機構發(fā)起的合作推廣業(yè)務(wù)。在這里,品牌可以通過(guò)渠道推廣到線(xiàn)上平臺。微信公眾號廣告是一種常見(jiàn)的廣告推廣方式。
  但微信公眾號是否帶有政治色彩是企業(yè)在投放廣告時(shí)需要考慮的,以免出現不必要的問(wèn)題,影響企業(yè)的投資回報。投資回報是指應該通過(guò)投資獲得回報的價(jià)值,即企業(yè)從一項投資活動(dòng)中獲得的經(jīng)濟回報,需要能夠判斷微信公眾號是否有敏感詞的技術(shù)。
  技術(shù)實(shí)施要素:
  本發(fā)明提供一種檢測微信公眾號是否有敏感詞的方法及裝置,旨在解決無(wú)法判斷微信公眾號是否有敏感詞的問(wèn)題。
  本發(fā)明是這樣實(shí)現的,一種檢測微信公眾號是否有敏感詞的方法,包括以下步驟:
  s1、提取微信公眾號歷史文章數據,手動(dòng)標注文章是否有敏感詞;
  s2、清洗文章數據,訓練word2vec模型作為訓練數據,分割文章詞得到embedding,最后訓練雙向bilstm深度學(xué)習模型;
  s3、獲取微信公眾號預設數量的待預測歷史文章數據,清洗數據,獲取embedding,使用訓練好的雙向bilstm深度學(xué)習模型進(jìn)行預測,每&lt; @文章是否有敏感詞匯的預測結果;
<p>s4、根據預設個(gè)數文章中有??敏感詞的文章個(gè)數,計算出有敏感詞的文章個(gè)數占所有 查看全部

  querylist采集微信公眾號文章(
一種微信公眾號是否有敏感詞匯的檢測方法及裝置)
  
  本發(fā)明屬于微信公眾號廣告投放領(lǐng)域,具體涉及一種微信公眾號是否存在敏感詞的檢測方法及裝置。
  背景技術(shù):
  微信公眾平臺主要面向名人、政府、媒體、企業(yè)等機構發(fā)起的合作推廣業(yè)務(wù)。在這里,品牌可以通過(guò)渠道推廣到線(xiàn)上平臺。微信公眾號廣告是一種常見(jiàn)的廣告推廣方式。
  但微信公眾號是否帶有政治色彩是企業(yè)在投放廣告時(shí)需要考慮的,以免出現不必要的問(wèn)題,影響企業(yè)的投資回報。投資回報是指應該通過(guò)投資獲得回報的價(jià)值,即企業(yè)從一項投資活動(dòng)中獲得的經(jīng)濟回報,需要能夠判斷微信公眾號是否有敏感詞的技術(shù)。
  技術(shù)實(shí)施要素:
  本發(fā)明提供一種檢測微信公眾號是否有敏感詞的方法及裝置,旨在解決無(wú)法判斷微信公眾號是否有敏感詞的問(wèn)題。
  本發(fā)明是這樣實(shí)現的,一種檢測微信公眾號是否有敏感詞的方法,包括以下步驟:
  s1、提取微信公眾號歷史文章數據,手動(dòng)標注文章是否有敏感詞;
  s2、清洗文章數據,訓練word2vec模型作為訓練數據,分割文章詞得到embedding,最后訓練雙向bilstm深度學(xué)習模型;
  s3、獲取微信公眾號預設數量的待預測歷史文章數據,清洗數據,獲取embedding,使用訓練好的雙向bilstm深度學(xué)習模型進(jìn)行預測,每&lt; @文章是否有敏感詞匯的預測結果;
<p>s4、根據預設個(gè)數文章中有??敏感詞的文章個(gè)數,計算出有敏感詞的文章個(gè)數占所有

querylist采集微信公眾號文章(每天更新視頻:熊孩子和萌寵搞笑視頻,笑聲不斷快樂(lè )常伴 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 159 次瀏覽 ? 2022-02-08 22:10 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(每天更新視頻:熊孩子和萌寵搞笑視頻,笑聲不斷快樂(lè )常伴
)
  每天更新視頻:熊孩子的日常生活,萌寵的日常生活,熊孩子和萌寵的搞笑視頻,笑聲不斷伴隨著(zhù)快樂(lè )!
  獲取公眾號信息
  標題、摘要、封面、文章URL
  腳步:
  1、先申請公眾號
  2、登錄您的帳戶(hù),創(chuàng )建一個(gè)新的文章 圖形,然后單擊超鏈接
  
  3、彈出搜索框,搜索你需要的公眾號,查看歷史記錄文章
  
  
  4、通過(guò)抓包獲取信息,定位到請求的url
  
  通過(guò)查看信息,我們找到了我們需要的關(guān)鍵內容:title、abstract、cover 和 文章 URL,并確定這就是我們需要的 URL。通過(guò)點(diǎn)擊下一頁(yè),多次獲取url,發(fā)現只有random和bengin的參數變化
  
  所以主要信息URL是可以的。
  那么讓我們開(kāi)始吧:
  原來(lái)我們需要修改的參數是:token、random、cookie
  這兩個(gè)值的來(lái)源,可以得到url
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline=&#39;&#39;) as f:
f.write(scvStr)
  得到結果(成功):
  
  獲取 文章 里面的視頻
  實(shí)現批量下載通過(guò)分??析單個(gè)視頻文章,找到了這個(gè)鏈接:
  
  打開(kāi)網(wǎng)頁(yè)找到,也就是視頻的網(wǎng)頁(yè)下載鏈接:
  
  
  嘿嘿,好像有點(diǎn)意思。找到了視頻網(wǎng)頁(yè)的純下載鏈接,開(kāi)始吧。
  我發(fā)現鏈接中有一個(gè)關(guān)鍵參數vid。我不知道它是從哪里來(lái)的?
  與獲取的其他信息無(wú)關(guān),只能強制。
  該參數在單文章的url請求信息中找到,然后獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = &#39;./videoFiles/&#39; + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, &#39;wb&#39;) as f:
f.write(html)
  然后所有的信息都完成了,代碼就組裝好了。
  一個(gè)。獲取公眾號信息
  灣。篩選單個(gè)文章信息
  C。獲取視頻信息
  d。拼接視頻頁(yè)面下載地址
  e. 下載視頻并保存
  代碼實(shí)驗結果:
  
  
   查看全部

  querylist采集微信公眾號文章(每天更新視頻:熊孩子和萌寵搞笑視頻,笑聲不斷快樂(lè )常伴
)
  每天更新視頻:熊孩子的日常生活,萌寵的日常生活,熊孩子和萌寵的搞笑視頻,笑聲不斷伴隨著(zhù)快樂(lè )!
  獲取公眾號信息
  標題、摘要、封面、文章URL
  腳步:
  1、先申請公眾號
  2、登錄您的帳戶(hù),創(chuàng )建一個(gè)新的文章 圖形,然后單擊超鏈接
  
  3、彈出搜索框,搜索你需要的公眾號,查看歷史記錄文章
  
  
  4、通過(guò)抓包獲取信息,定位到請求的url
  
  通過(guò)查看信息,我們找到了我們需要的關(guān)鍵內容:title、abstract、cover 和 文章 URL,并確定這就是我們需要的 URL。通過(guò)點(diǎn)擊下一頁(yè),多次獲取url,發(fā)現只有random和bengin的參數變化
  
  所以主要信息URL是可以的。
  那么讓我們開(kāi)始吧:
  原來(lái)我們需要修改的參數是:token、random、cookie
  這兩個(gè)值的來(lái)源,可以得到url
  # -*- coding: utf-8 -*-
import re
import requests
import jsonpath
import json
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"Host": "mp.weixin.qq.com",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Cookie": "自己獲取信息時(shí)的cookie"
}
def getInfo():
for i in range(80):
# token random 需要要自己的 begin:參數傳入
url = "https://mp.weixin.qq.com/cgi-b ... in%3D{}&count=5&query=&fakeid=MzI4MzkzMTc3OA%3D%3D&type=9".format(str(i * 5))
response = requests.get(url, headers = headers)
jsonRes = response.json()
titleList = jsonpath.jsonpath(jsonRes, "$..title")
coverList = jsonpath.jsonpath(jsonRes, "$..cover")
urlList = jsonpath.jsonpath(jsonRes, "$..link")
# 遍歷 構造可存儲字符串
for index in range(len(titleList)):
title = titleList[index]
cover = coverList[index]
url = urlList[index]
scvStr = "%s,%s, %s,\n" % (title, cover, url)
with open("info.csv", "a+", encoding="gbk", newline=&#39;&#39;) as f:
f.write(scvStr)
  得到結果(成功):
  
  獲取 文章 里面的視頻
  實(shí)現批量下載通過(guò)分??析單個(gè)視頻文章,找到了這個(gè)鏈接:
  
  打開(kāi)網(wǎng)頁(yè)找到,也就是視頻的網(wǎng)頁(yè)下載鏈接:
  
  
  嘿嘿,好像有點(diǎn)意思。找到了視頻網(wǎng)頁(yè)的純下載鏈接,開(kāi)始吧。
  我發(fā)現鏈接中有一個(gè)關(guān)鍵參數vid。我不知道它是從哪里來(lái)的?
  與獲取的其他信息無(wú)關(guān),只能強制。
  該參數在單文章的url請求信息中找到,然后獲取。
  response = requests.get(url_wxv, headers=headers)
# 我用的是正則,也可以使用xpath
jsonRes = response.text # 匹配:wxv_1105179750743556096
dirRe = r"wxv_.{19}"
result = re.search(dirRe, jsonRes)
wxv = result.group(0)
print(wxv)
  視頻下載:
  def getVideo(video_title, url_wxv):
video_path = &#39;./videoFiles/&#39; + video_title + ".mp4"
# 頁(yè)面可下載形式
video_url_temp = "https://mp.weixin.qq.com/mp/vi ... ot%3B + wxv
response = requests.get(video_url_temp, headers=headers)
content = response.content.decode()
content = json.loads(content)
url_info = content.get("url_info")
video_url2 = url_info[0].get("url")
print(video_url2)
# 請求要下載的url地址
html = requests.get(video_url2)
# content返回的是bytes型也就是二進(jìn)制的數據。
html = html.content
with open(video_path, &#39;wb&#39;) as f:
f.write(html)
  然后所有的信息都完成了,代碼就組裝好了。
  一個(gè)。獲取公眾號信息
  灣。篩選單個(gè)文章信息
  C。獲取視頻信息
  d。拼接視頻頁(yè)面下載地址
  e. 下載視頻并保存
  代碼實(shí)驗結果:
  
  
  

querylist采集微信公眾號文章(微信公眾號后臺編輯素材界面的程序利用程序 )

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 186 次瀏覽 ? 2022-02-07 13:10 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號后臺編輯素材界面的程序利用程序
)
  準備階段
  為了實(shí)現這個(gè)爬蟲(chóng),我們需要用到以下工具
  另外,本爬蟲(chóng)使用微信公眾號后臺編輯素材界面。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要一個(gè)公眾號。
  
  fig1正式開(kāi)始
  我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
  
  圖2
  接下來(lái),按 F12 打開(kāi) Chrome 的開(kāi)發(fā)者工具并選擇 Network
  
  圖3
  此時(shí),在之前的超鏈接界面,點(diǎn)擊“選擇其他公眾號”,輸入需要抓取的公眾號(如中國移動(dòng))
  
  圖4
  此時(shí)之前的Network會(huì )刷新一些鏈接,而以“appmsg”開(kāi)頭的就是我們需要分析的內容。
  
  圖5
  我們解析請求的 URL
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  它分為三個(gè)部分
  通過(guò)不斷的瀏覽下一頁(yè),我們發(fā)現只有begin每次都會(huì )變化,每次增加5,也就是count的值。
  接下來(lái)我們使用Python獲取同樣的資源,但是直接運行下面的代碼無(wú)法獲取資源
  import requestsurl = "https://mp.weixin.qq.com/cgi-b ... s.get(url).json() # {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求是無(wú)效的。我們需要在requests中設置headers參數,傳入Cookie和User-Agent,模擬登錄
  由于header信息的內容每次都在變化,所以我把這些內容放在了一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
  cookie: ua_id=wuzWM9FKE14...user_agent: Mozilla/5.0...
  然后就讀
  # 讀取cookie和user_agentimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
  ?
  appmsgid 是每次推送的唯一標識符,aid 是每條推文的唯一標識符。
  ?
  
  圖6?
  其實(shí)除了cookies,URL中的token參數也是用來(lái)限制爬蟲(chóng)的,所以上面的代碼很可能會(huì )輸出{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token' } }
  ?
  然后我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取 文章 的所有 JSON 并保存。
  import jsonimport requestsimport timeimport randomimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }# 請求參數url = "https://mp.weixin.qq.com/cgi-bin/appmsg"begin = "0"params = { "action": "list_ex", "begin": begin, "count": "5", "fakeid": config[&#39;fakeid&#39;], "type": "9", "token": config[&#39;token&#39;], "lang": "zh_CN", "f": "json", "ajax": "1"}# 存放結果app_msg_list = []# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句# 也方便重新運行時(shí)設置頁(yè)數i = 0while True: begin = i * 5 params["begin"] = str(begin) # 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到 time.sleep(random.randint(1,10)) resp = requests.get(url, headers=headers, params = params, verify=False) # 微信流量控制, 退出 if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013: print("frequencey control, stop at {}".format(str(begin))) break # 如果返回的內容中為空則結束 if len(resp.json()[&#39;app_msg_list&#39;]) == 0: print("all ariticle parsed") break app_msg_list.append(resp.json()) # 翻頁(yè) i += 1
  在上面的代碼中,我也在“wechat.yaml”文件中存儲了fakeid和token,這是因為fakeid是每個(gè)公眾號的唯一標識,并且token經(jīng)常變化,這個(gè)信息可以通過(guò)解析URL來(lái)獲取,也可以從開(kāi)發(fā)者工具中查看
  圖7
  爬取一段時(shí)間后會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  此時(shí),當你嘗試在公眾號后臺插入超鏈接時(shí),會(huì )遇到如下提示
  
  圖8
  這是公眾號的流量限制,一般需要30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,可能需要申請多個(gè)公眾號,可能需要與微信公眾號登錄系統競爭,可能需要設置代理池。
  但是我不需要工業(yè)級爬蟲(chóng),我只是想爬取我公眾號的信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,然后運行。我不想用自己的興趣去挑戰別人的工作。
  最后將結果保存為 JSON 格式。
  # 保存結果為JSONjson_name = "mp_data_{}.json".format(str(begin))with open(json_name, "w") as file: file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符、標題、URL、發(fā)布時(shí)間四列信息,保存為CSV。
  info_list = []for msg in app_msg_list: if "app_msg_list" in msg: for item in msg["app_msg_list"]: info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;])) info_list.append(info)# save as csvwith open("app_msg_list.csv", "w") as file: file.writelines("\n".join(info_list)) 查看全部

  querylist采集微信公眾號文章(微信公眾號后臺編輯素材界面的程序利用程序
)
  準備階段
  為了實(shí)現這個(gè)爬蟲(chóng),我們需要用到以下工具
  另外,本爬蟲(chóng)使用微信公眾號后臺編輯素材界面。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要一個(gè)公眾號。
  
  fig1正式開(kāi)始
  我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
  
  圖2
  接下來(lái),按 F12 打開(kāi) Chrome 的開(kāi)發(fā)者工具并選擇 Network
  
  圖3
  此時(shí),在之前的超鏈接界面,點(diǎn)擊“選擇其他公眾號”,輸入需要抓取的公眾號(如中國移動(dòng))
  
  圖4
  此時(shí)之前的Network會(huì )刷新一些鏈接,而以“appmsg”開(kāi)頭的就是我們需要分析的內容。
  
  圖5
  我們解析請求的 URL
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  它分為三個(gè)部分
  通過(guò)不斷的瀏覽下一頁(yè),我們發(fā)現只有begin每次都會(huì )變化,每次增加5,也就是count的值。
  接下來(lái)我們使用Python獲取同樣的資源,但是直接運行下面的代碼無(wú)法獲取資源
  import requestsurl = "https://mp.weixin.qq.com/cgi-b ... s.get(url).json() # {&#39;base_resp&#39;: {&#39;ret&#39;: 200003, &#39;err_msg&#39;: &#39;invalid session&#39;}}
  我們之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求是無(wú)效的。我們需要在requests中設置headers參數,傳入Cookie和User-Agent,模擬登錄
  由于header信息的內容每次都在變化,所以我把這些內容放在了一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
  cookie: ua_id=wuzWM9FKE14...user_agent: Mozilla/5.0...
  然后就讀
  # 讀取cookie和user_agentimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }requests.get(url, headers=headers, verify=False).json()
  在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
  ?
  appmsgid 是每次推送的唯一標識符,aid 是每條推文的唯一標識符。
  ?
  
  圖6?
  其實(shí)除了cookies,URL中的token參數也是用來(lái)限制爬蟲(chóng)的,所以上面的代碼很可能會(huì )輸出{'base_resp': {'ret': 200040, 'err_msg': 'invalid csrf token' } }
  ?
  然后我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取 文章 的所有 JSON 并保存。
  import jsonimport requestsimport timeimport randomimport yamlwith open("wechat.yaml", "r") as file: file_data = file.read()config = yaml.safe_load(file_data)headers = { "Cookie": config[&#39;cookie&#39;], "User-Agent": config[&#39;user_agent&#39;] }# 請求參數url = "https://mp.weixin.qq.com/cgi-bin/appmsg"begin = "0"params = { "action": "list_ex", "begin": begin, "count": "5", "fakeid": config[&#39;fakeid&#39;], "type": "9", "token": config[&#39;token&#39;], "lang": "zh_CN", "f": "json", "ajax": "1"}# 存放結果app_msg_list = []# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句# 也方便重新運行時(shí)設置頁(yè)數i = 0while True: begin = i * 5 params["begin"] = str(begin) # 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到 time.sleep(random.randint(1,10)) resp = requests.get(url, headers=headers, params = params, verify=False) # 微信流量控制, 退出 if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013: print("frequencey control, stop at {}".format(str(begin))) break # 如果返回的內容中為空則結束 if len(resp.json()[&#39;app_msg_list&#39;]) == 0: print("all ariticle parsed") break app_msg_list.append(resp.json()) # 翻頁(yè) i += 1
  在上面的代碼中,我也在“wechat.yaml”文件中存儲了fakeid和token,這是因為fakeid是每個(gè)公眾號的唯一標識,并且token經(jīng)常變化,這個(gè)信息可以通過(guò)解析URL來(lái)獲取,也可以從開(kāi)發(fā)者工具中查看
  圖7
  爬取一段時(shí)間后會(huì )遇到以下問(wèn)題
  {&#39;base_resp&#39;: {&#39;err_msg&#39;: &#39;freq control&#39;, &#39;ret&#39;: 200013}}
  此時(shí),當你嘗試在公眾號后臺插入超鏈接時(shí),會(huì )遇到如下提示
  
  圖8
  這是公眾號的流量限制,一般需要30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,可能需要申請多個(gè)公眾號,可能需要與微信公眾號登錄系統競爭,可能需要設置代理池。
  但是我不需要工業(yè)級爬蟲(chóng),我只是想爬取我公眾號的信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,然后運行。我不想用自己的興趣去挑戰別人的工作。
  最后將結果保存為 JSON 格式。
  # 保存結果為JSONjson_name = "mp_data_{}.json".format(str(begin))with open(json_name, "w") as file: file.write(json.dumps(app_msg_list, indent=2, ensure_ascii=False))
  或者提取文章標識符、標題、URL、發(fā)布時(shí)間四列信息,保存為CSV。
  info_list = []for msg in app_msg_list: if "app_msg_list" in msg: for item in msg["app_msg_list"]: info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;])) info_list.append(info)# save as csvwith open("app_msg_list.csv", "w") as file: file.writelines("\n".join(info_list))

querylist采集微信公眾號文章(querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 128 次瀏覽 ? 2022-02-07 01:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞)
  querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞。這個(gè)過(guò)程主要有2個(gè)東西需要去查。1.微信公眾號是無(wú)法被搜索引擎識別的,不對應的搜索結果都屬于污點(diǎn)。2.微信公眾號是匿名的,由個(gè)人微信號綁定來(lái)實(shí)現。本案例是第二種情況。querylist匹配出所有公眾號。文章就都顯示出來(lái)了。
  樓上已經(jīng)說(shuō)得很清楚了,這就是一個(gè)querylist加上allfollower來(lái)搜索文章關(guān)鍵詞的機制。我第一次聽(tīng)說(shuō)還有這么簡(jiǎn)單的算法,這里做個(gè)簡(jiǎn)單的總結吧:dataeditor與dontmatch的區別是editor可以一次性只發(fā)一個(gè)all-follower查詢(xún)詞,如果你在開(kāi)發(fā)自己的查詢(xún)引擎,這種查詢(xún)方式尤其方便,因為你要確定目標關(guān)鍵詞,用戶(hù)要查詢(xún)什么詞才需要把所有關(guān)鍵詞展示出來(lái),用dontmatch的話(huà),系統可以只有allfollower來(lái)排序查詢(xún)詞(請注意querylist包含all-follower)。
  一樣的好處是,editor一次性就給一個(gè)查詢(xún)詞把所有關(guān)鍵詞顯示出來(lái),沒(méi)有展示少量的all-follower和cachesomefollowers。
  具體就是給query加入all-follower變量。
  額,最近分析過(guò)。這個(gè)就是微信公眾號文章標題和摘要出現的詞匹配。就是把query加到一個(gè)entity{{all_follower}}。然后要排序的時(shí)候,先對大量query進(jìn)行排序,然后根據相應的entity去匹配,這樣就排序完成了。不過(guò)我這只是基本原理, 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞)
  querylist采集微信公眾號文章的url,然后匹配出關(guān)鍵詞。這個(gè)過(guò)程主要有2個(gè)東西需要去查。1.微信公眾號是無(wú)法被搜索引擎識別的,不對應的搜索結果都屬于污點(diǎn)。2.微信公眾號是匿名的,由個(gè)人微信號綁定來(lái)實(shí)現。本案例是第二種情況。querylist匹配出所有公眾號。文章就都顯示出來(lái)了。
  樓上已經(jīng)說(shuō)得很清楚了,這就是一個(gè)querylist加上allfollower來(lái)搜索文章關(guān)鍵詞的機制。我第一次聽(tīng)說(shuō)還有這么簡(jiǎn)單的算法,這里做個(gè)簡(jiǎn)單的總結吧:dataeditor與dontmatch的區別是editor可以一次性只發(fā)一個(gè)all-follower查詢(xún)詞,如果你在開(kāi)發(fā)自己的查詢(xún)引擎,這種查詢(xún)方式尤其方便,因為你要確定目標關(guān)鍵詞,用戶(hù)要查詢(xún)什么詞才需要把所有關(guān)鍵詞展示出來(lái),用dontmatch的話(huà),系統可以只有allfollower來(lái)排序查詢(xún)詞(請注意querylist包含all-follower)。
  一樣的好處是,editor一次性就給一個(gè)查詢(xún)詞把所有關(guān)鍵詞顯示出來(lái),沒(méi)有展示少量的all-follower和cachesomefollowers。
  具體就是給query加入all-follower變量。
  額,最近分析過(guò)。這個(gè)就是微信公眾號文章標題和摘要出現的詞匹配。就是把query加到一個(gè)entity{{all_follower}}。然后要排序的時(shí)候,先對大量query進(jìn)行排序,然后根據相應的entity去匹配,這樣就排序完成了。不過(guò)我這只是基本原理,

querylist采集微信公眾號文章(Python微信公眾號文章爬取一.思路我們通過(guò)網(wǎng)頁(yè)版)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2022-02-04 15:15 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(Python微信公眾號文章爬取一.思路我們通過(guò)網(wǎng)頁(yè)版)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)web鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(\'https://mp.weixin.qq.com/\')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=\'login__type__container__select-type\']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=\'account\']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=\'password\']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=\'btn_login\']").click()
sleep(2)
# 微信登錄驗證
print(\'請掃描二維碼\')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(\'https://mp.weixin.qq.com/\')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[\'name\']] = item[\'value\']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(\'cookie.txt\', \'w+\', encoding=\'utf-8\') as f:
f.write(cookie_str)
print(\'cookie保存到本地成功\')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(\'?\')[1].split(\'&\')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(\'=\')[0]] = item.split(\'=\')[1]
# 返回token
return paramdict[\'token\']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = \'https://mp.weixin.qq.com\'
headers = {
\'HOST\': \'mp.weixin.qq.com\',
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63\'
}
with open(\'cookie.txt\', \'r\', encoding=\'utf-8\') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = \'https://mp.weixin.qq.com/cgi-bin/searchbiz?\'
params = {
\'action\': \'search_biz\',
\'begin\': \'0\',
\'count\': \'5\',
\'query\': \'搜索的公眾號名稱(chēng)\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get(\'list\')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get(\'fakeid\')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = \'https://mp.weixin.qq.com/cgi-bin/appmsg?\'
params_data = {
\'action\': \'list_ex\',
\'begin\': \'0\',
\'count\': \'5\',
\'fakeid\': fakeid,
\'type\': \'9\',
\'query\': \'\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。 查看全部

  querylist采集微信公眾號文章(Python微信公眾號文章爬取一.思路我們通過(guò)網(wǎng)頁(yè)版)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)web鏈接獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get(\'https://mp.weixin.qq.com/\')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class=\'login__type__container__select-type\']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name=\'account\']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name=\'password\']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class=\'btn_login\']").click()
sleep(2)
# 微信登錄驗證
print(\'請掃描二維碼\')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get(\'https://mp.weixin.qq.com/\')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item[\'name\']] = item[\'value\']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open(\'cookie.txt\', \'w+\', encoding=\'utf-8\') as f:
f.write(cookie_str)
print(\'cookie保存到本地成功\')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split(\'?\')[1].split(\'&\')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split(\'=\')[0]] = item.split(\'=\')[1]
# 返回token
return paramdict[\'token\']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = \'https://mp.weixin.qq.com\'
headers = {
\'HOST\': \'mp.weixin.qq.com\',
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63\'
}
with open(\'cookie.txt\', \'r\', encoding=\'utf-8\') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = \'https://mp.weixin.qq.com/cgi-bin/searchbiz?\'
params = {
\'action\': \'search_biz\',
\'begin\': \'0\',
\'count\': \'5\',
\'query\': \'搜索的公眾號名稱(chēng)\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get(\'list\')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get(\'fakeid\')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = \'https://mp.weixin.qq.com/cgi-bin/appmsg?\'
params_data = {
\'action\': \'list_ex\',
\'begin\': \'0\',
\'count\': \'5\',
\'fakeid\': fakeid,
\'type\': \'9\',
\'query\': \'\',
\'token\': token,
\'lang\': \'zh_CN\',
\'f\': \'json\',
\'ajax\': \'1\'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。

querylist采集微信公眾號文章( 微信公眾號文章的GET及方法(二)-)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-02-04 15:12 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(
微信公眾號文章的GET及方法(二)-)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后通過(guò)web鏈接即可獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。 查看全部

  querylist采集微信公眾號文章(
微信公眾號文章的GET及方法(二)-)
  Python微信公眾號文章爬取
  一.想法
  我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
  
  
  從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
  二.界面分析
  獲取微信公眾號界面:
  范圍:
  行動(dòng)=search_biz
  開(kāi)始=0
  計數=5
  query=公眾號
  token = 每個(gè)賬戶(hù)對應的token值
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后通過(guò)web鏈接即可獲取token。
  
  獲取公眾號對應的文章接口:
  范圍:
  行動(dòng)=list_ex
  開(kāi)始=0
  計數=5
  fakeid=MjM5NDAwMTA2MA==
  類(lèi)型=9
  查詢(xún)=
  令牌=557131216
  lang=zh_CN
  f=json
  阿賈克斯=1
  請求方法:
  得到
  在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
  
  三.實(shí)現第一步:
  首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
  def weChat_login(user, password):
post = {}
browser = webdriver.Chrome()
browser.get('https://mp.weixin.qq.com/')
sleep(3)
browser.delete_all_cookies()
sleep(2)
# 點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
sleep(2)
# 模擬用戶(hù)點(diǎn)擊
input_user = browser.find_element_by_xpath("//input[@name='account']")
input_user.send_keys(user)
input_password = browser.find_element_by_xpath("//input[@name='password']")
input_password.send_keys(password)
sleep(2)
# 點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
sleep(2)
# 微信登錄驗證
print('請掃描二維碼')
sleep(20)
# 刷新當前網(wǎng)頁(yè)
browser.get('https://mp.weixin.qq.com/')
sleep(5)
# 獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
# 獲取當前cookie
cookies = browser.get_cookies()
for item in cookies:
post[item['name']] = item['value']
# 轉換為字符串
cookie_str = json.dumps(post)
# 存儲到本地
with open('cookie.txt', 'w+', encoding='utf-8') as f:
f.write(cookie_str)
print('cookie保存到本地成功')
# 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token
paramList = url.strip().split('?')[1].split('&')
# 定義一個(gè)字典存儲數據
paramdict = {}
for item in paramList:
paramdict[item.split('=')[0]] = item.split('=')[1]
# 返回token
return paramdict['token']
  定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
  刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
  第二步:1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
   url = 'https://mp.weixin.qq.com'
headers = {
'HOST': 'mp.weixin.qq.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
with open('cookie.txt', 'r', encoding='utf-8') as f:
cookie = f.read()
cookies = json.loads(cookie)
resp = requests.get(url=url, headers=headers, cookies=cookies)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
params = {
'action': 'search_biz',
'begin': '0',
'count': '5',
'query': '搜索的公眾號名稱(chēng)',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
  傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
  lists = search_resp.json().get('list')[0]
  通過(guò)以上代碼可以獲取對應的公眾號數據
  fakeid = lists.get('fakeid')
  通過(guò)上面的代碼,可以得到對應的 fakeid
  2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
   appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
params_data = {
'action': 'list_ex',
'begin': '0',
'count': '5',
'fakeid': fakeid,
'type': '9',
'query': '',
'token': token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1'
}
appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
  我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
  我們實(shí)現了微信公眾號文章的爬取。
  四.總結
  通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。

querylist采集微信公眾號文章(快速推廣小程序的方法,希望這些能夠幫到大家!)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 142 次瀏覽 ? 2022-02-02 02:02 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(快速推廣小程序的方法,希望這些能夠幫到大家!)
  小程序的火爆帶動(dòng)了很多企業(yè)和公司開(kāi)發(fā)小程序。但是小程序開(kāi)發(fā)出來(lái)之后,很重要的一個(gè)環(huán)節就是推廣。下面,小編為大家整理了小程序快速推廣的方法,希望對大家有所幫助。
  相關(guān)公眾號推廣
  目前微信支持公眾號與小程序的互聯(lián)互通。微信公眾號可以快速關(guān)聯(lián)和創(chuàng )建小程序,小程序也可以展示公眾號的內容。關(guān)聯(lián)小程序可用于短信、自定義菜單、模板消息、附近小程序等場(chǎng)景。
  
  公眾號關(guān)聯(lián)小程序也會(huì )通過(guò)推送消息通知用戶(hù)。公眾號關(guān)聯(lián),對于已經(jīng)擁有公眾號并積累一定粉絲數的企業(yè),可以快速將流量導入小程序。關(guān)聯(lián)后,您還可以在公眾號的推文中插入小程序卡片或鏈接。
  如果你的公眾號能產(chǎn)出優(yōu)質(zhì)內容,獲得大量閱讀量,也是小程序推廣快速有效的方法。
  小程序搜索優(yōu)化
  現在微信小程序由系統自動(dòng)分配關(guān)鍵詞,商家和創(chuàng )業(yè)公司可以根據規則合理設置名稱(chēng)和功能介紹字段,在名稱(chēng)關(guān)鍵詞中合理體現相關(guān)字段,并將功能介紹中的品牌名稱(chēng)。定位、功能描述、產(chǎn)品分類(lèi)等內容展示簡(jiǎn)潔有效。
  對于關(guān)鍵詞的優(yōu)化,一定要遵循規律,合理適當。如果添加太多名稱(chēng)和描述,可能會(huì )受到官方微信小程序的懲罰。
  微信表示,未來(lái)將對小程序進(jìn)行一系列升級,包括開(kāi)放品牌和品牌搜索,很可能會(huì )再次開(kāi)放自定義關(guān)鍵詞功能,并推出一系列規范。大推動(dòng)。
  小程序二維碼推廣
  小程序還可以生成二維碼。目前小程序已經(jīng)支持采集功能。采集的小程序會(huì )顯示在微信聊天界面頂部的下拉菜單中。通過(guò)二維碼在不同場(chǎng)景下的推廣使用,可以有效達到推廣目的。
  線(xiàn)上推廣可以通過(guò)朋友圈、微信群轉發(fā)、網(wǎng)站、app圖片廣告、軟文植入等方式進(jìn)行分享。在推廣中,要根據不同場(chǎng)景下推廣的特點(diǎn)和規律,有針對性地進(jìn)行和優(yōu)化推廣。 查看全部

  querylist采集微信公眾號文章(快速推廣小程序的方法,希望這些能夠幫到大家!)
  小程序的火爆帶動(dòng)了很多企業(yè)和公司開(kāi)發(fā)小程序。但是小程序開(kāi)發(fā)出來(lái)之后,很重要的一個(gè)環(huán)節就是推廣。下面,小編為大家整理了小程序快速推廣的方法,希望對大家有所幫助。
  相關(guān)公眾號推廣
  目前微信支持公眾號與小程序的互聯(lián)互通。微信公眾號可以快速關(guān)聯(lián)和創(chuàng )建小程序,小程序也可以展示公眾號的內容。關(guān)聯(lián)小程序可用于短信、自定義菜單、模板消息、附近小程序等場(chǎng)景。
  
  公眾號關(guān)聯(lián)小程序也會(huì )通過(guò)推送消息通知用戶(hù)。公眾號關(guān)聯(lián),對于已經(jīng)擁有公眾號并積累一定粉絲數的企業(yè),可以快速將流量導入小程序。關(guān)聯(lián)后,您還可以在公眾號的推文中插入小程序卡片或鏈接。
  如果你的公眾號能產(chǎn)出優(yōu)質(zhì)內容,獲得大量閱讀量,也是小程序推廣快速有效的方法。
  小程序搜索優(yōu)化
  現在微信小程序由系統自動(dòng)分配關(guān)鍵詞,商家和創(chuàng )業(yè)公司可以根據規則合理設置名稱(chēng)和功能介紹字段,在名稱(chēng)關(guān)鍵詞中合理體現相關(guān)字段,并將功能介紹中的品牌名稱(chēng)。定位、功能描述、產(chǎn)品分類(lèi)等內容展示簡(jiǎn)潔有效。
  對于關(guān)鍵詞的優(yōu)化,一定要遵循規律,合理適當。如果添加太多名稱(chēng)和描述,可能會(huì )受到官方微信小程序的懲罰。
  微信表示,未來(lái)將對小程序進(jìn)行一系列升級,包括開(kāi)放品牌和品牌搜索,很可能會(huì )再次開(kāi)放自定義關(guān)鍵詞功能,并推出一系列規范。大推動(dòng)。
  小程序二維碼推廣
  小程序還可以生成二維碼。目前小程序已經(jīng)支持采集功能。采集的小程序會(huì )顯示在微信聊天界面頂部的下拉菜單中。通過(guò)二維碼在不同場(chǎng)景下的推廣使用,可以有效達到推廣目的。
  線(xiàn)上推廣可以通過(guò)朋友圈、微信群轉發(fā)、網(wǎng)站、app圖片廣告、軟文植入等方式進(jìn)行分享。在推廣中,要根據不同場(chǎng)景下推廣的特點(diǎn)和規律,有針對性地進(jìn)行和優(yōu)化推廣。

querylist采集微信公眾號文章(微信公眾號文章的每一篇文章所對應的key-value數據)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2022-01-28 07:04 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信公眾號文章的每一篇文章所對應的key-value數據)
  querylist采集微信公眾號文章的每一篇文章所對應的key-value數據。文章的所有信息都采集完之后按照header的順序,匯總信息給開(kāi)發(fā)者,開(kāi)發(fā)者可以將對應的key發(fā)給需要看文章的人。
  實(shí)現過(guò)一個(gè)小的搜索引擎需要對接微信的搜索接口,之前在用路由庫的時(shí)候一直比較麻煩。importrequestsurl=''r=requests.get(url)headers={'user-agent':'mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/55.0.2704.85safari/537.36'}defget_content(url):page=requests.post(url,data={'host':url}).textpage.raise_for_status_code()urls=page.request('')#有重復字符的地方用空格代替urls.encode('gbk').decode('utf-8')html=urls.json()print("encoded:{0}'.format(html))more_content=requests.get(url,data={'results':[x,y]}).textmore_content.decode('utf-8')print("more_content:{0}".format(more_content))print("title",html)returnquerylist.fetch(more_content)但是換言之如果我有兩個(gè)相同的url,上一個(gè)就去掉復制這個(gè)鏈接,而我只是想查找一個(gè)query,下一個(gè)就直接拿到這個(gè)query的title?那就只能用urlencode轉換數據了。
  ?_id=="a"python實(shí)現輸入地址query_list_content="{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(query_list_content)text=query_list_content[-1]#print(text)print("title:{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(text))print("foriinrange({3,7}):”{1:“{2:“{3:“{4:“{5:“{6:“{7:”}”}”}”}”}”}”}".format(text))query_list_content=[iforiinrange(1,8)]text=get_content(。 查看全部

  querylist采集微信公眾號文章(微信公眾號文章的每一篇文章所對應的key-value數據)
  querylist采集微信公眾號文章的每一篇文章所對應的key-value數據。文章的所有信息都采集完之后按照header的順序,匯總信息給開(kāi)發(fā)者,開(kāi)發(fā)者可以將對應的key發(fā)給需要看文章的人。
  實(shí)現過(guò)一個(gè)小的搜索引擎需要對接微信的搜索接口,之前在用路由庫的時(shí)候一直比較麻煩。importrequestsurl=''r=requests.get(url)headers={'user-agent':'mozilla/5.0(windowsnt6.1;wow64)applewebkit/537.36(khtml,likegecko)chrome/55.0.2704.85safari/537.36'}defget_content(url):page=requests.post(url,data={'host':url}).textpage.raise_for_status_code()urls=page.request('')#有重復字符的地方用空格代替urls.encode('gbk').decode('utf-8')html=urls.json()print("encoded:{0}'.format(html))more_content=requests.get(url,data={'results':[x,y]}).textmore_content.decode('utf-8')print("more_content:{0}".format(more_content))print("title",html)returnquerylist.fetch(more_content)但是換言之如果我有兩個(gè)相同的url,上一個(gè)就去掉復制這個(gè)鏈接,而我只是想查找一個(gè)query,下一個(gè)就直接拿到這個(gè)query的title?那就只能用urlencode轉換數據了。
  ?_id=="a"python實(shí)現輸入地址query_list_content="{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(query_list_content)text=query_list_content[-1]#print(text)print("title:{1:“{2:“{3:“{4:“{5:“{6:”}”}”}”}".format(text))print("foriinrange({3,7}):”{1:“{2:“{3:“{4:“{5:“{6:“{7:”}”}”}”}”}”}”}".format(text))query_list_content=[iforiinrange(1,8)]text=get_content(。

querylist采集微信公眾號文章(《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-01-22 17:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求)
  querylist采集微信公眾號文章列表,還可以返回給我們一個(gè)完整的網(wǎng)頁(yè)鏈接。比如這個(gè)就是我們預先畫(huà)出來(lái)的token,這個(gè)post就是發(fā)送。如果有不懂得,就可以看這個(gè)博客,對你有用。
  截圖中的post連接實(shí)際上是一個(gè)session;將截圖中的網(wǎng)址直接post給微信公眾號助手,等待微信小助手的解析即可,注意必須是響應的,否則將導致發(fā)送失敗或者不返回json數據。
  建議看看我的這篇文章不會(huì )post的正確姿勢:《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求
  可以用post方式發(fā)送,有截圖的。
  上面的答案都是用微信的網(wǎng)頁(yè)版發(fā)送參數,確實(shí)是可以的,但是有一點(diǎn)不好的就是上傳參數存在時(shí)間限制,過(guò)期之后不會(huì )收到消息。
  現在公眾號沒(méi)有webdav這個(gè)功能,
  我們專(zhuān)業(yè)課老師強調了,
  當然可以!微信也支持直接用post方式推送給文章打開(kāi)頁(yè)啊。對于比較偏門(mén)的篇章,文章都是可以post的,前提是需要特殊情況判斷下,不然有可能會(huì )封號啊什么的。
  很簡(jiǎn)單,post發(fā)過(guò)去就好了。其實(shí)關(guān)鍵就是,post要及時(shí)到達,否則會(huì )被post原文拉到二維碼頁(yè),或者全部丟失。其實(shí)現在的文章都是壓縮的,發(fā)過(guò)去實(shí)際就很多了,然后post就可以發(fā)特定的文章,就不會(huì )丟失了。 查看全部

  querylist采集微信公眾號文章(《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求)
  querylist采集微信公眾號文章列表,還可以返回給我們一個(gè)完整的網(wǎng)頁(yè)鏈接。比如這個(gè)就是我們預先畫(huà)出來(lái)的token,這個(gè)post就是發(fā)送。如果有不懂得,就可以看這個(gè)博客,對你有用。
  截圖中的post連接實(shí)際上是一個(gè)session;將截圖中的網(wǎng)址直接post給微信公眾號助手,等待微信小助手的解析即可,注意必須是響應的,否則將導致發(fā)送失敗或者不返回json數據。
  建議看看我的這篇文章不會(huì )post的正確姿勢:《不會(huì )post的正確姿勢》之帶截圖的ajax和post請求
  可以用post方式發(fā)送,有截圖的。
  上面的答案都是用微信的網(wǎng)頁(yè)版發(fā)送參數,確實(shí)是可以的,但是有一點(diǎn)不好的就是上傳參數存在時(shí)間限制,過(guò)期之后不會(huì )收到消息。
  現在公眾號沒(méi)有webdav這個(gè)功能,
  我們專(zhuān)業(yè)課老師強調了,
  當然可以!微信也支持直接用post方式推送給文章打開(kāi)頁(yè)啊。對于比較偏門(mén)的篇章,文章都是可以post的,前提是需要特殊情況判斷下,不然有可能會(huì )封號啊什么的。
  很簡(jiǎn)單,post發(fā)過(guò)去就好了。其實(shí)關(guān)鍵就是,post要及時(shí)到達,否則會(huì )被post原文拉到二維碼頁(yè),或者全部丟失。其實(shí)現在的文章都是壓縮的,發(fā)過(guò)去實(shí)際就很多了,然后post就可以發(fā)特定的文章,就不會(huì )丟失了。

querylist采集微信公眾號文章(如何爬取公眾號所有文章(一)(1)_光明網(wǎng)(組圖))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 167 次瀏覽 ? 2022-01-22 11:06 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(如何爬取公眾號所有文章(一)(1)_光明網(wǎng)(組圖))
  文章目錄
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.在后臺插入其他公眾號推送超鏈接的原理微信公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現已經(jīng)刷新了一個(gè)網(wǎng)絡(luò )啟動(dòng)以“appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&amp;begin=0&amp;count=5&amp;fakeid=MjM5NDY3ODI4OA==&amp;type=9&amp;query=&amp;token= 1983840068&amp;lang=zh_CN&amp;f =json&amp;ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  在爬取大約 50 個(gè)頁(yè)面時(shí),我遇到了以下錯誤:
  {'base_resp':{'err_msg':'頻率控制','ret':200013}}
  這是因為微信公眾號有流量限制,所以你可以等一個(gè)小時(shí)。我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("python小屋.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
&#39;&#39;&#39;
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
&#39;&#39;&#39;
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding=&#39;utf-8&#39;) as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二) 爬取每次推送并提取需要的信息1. 遍歷并爬取每次推送
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?) 查看全部

  querylist采集微信公眾號文章(如何爬取公眾號所有文章(一)(1)_光明網(wǎng)(組圖))
  文章目錄
  一、前言
  前幾天書(shū)文問(wèn)我能不能爬取微信公眾號“北京郵教部”的歷史動(dòng)態(tài),分析最多的成績(jì)和科目。之前沒(méi)做過(guò)微信公眾號爬蟲(chóng),所以研究了一下,發(fā)現了這個(gè)文章。
  二、準備三、正式開(kāi)始(一)批量獲取之前公眾號推送的url鏈接1.在后臺插入其他公眾號推送超鏈接的原理微信公眾號
  如果要批量抓取微信公眾號過(guò)去的推送,最大的問(wèn)題是如何獲取這些推送的url鏈接。因為通常我們點(diǎn)擊一??個(gè)推送時(shí),微信會(huì )隨機生成一個(gè)url鏈接,而這個(gè)隨機生成的url與公眾號推送的其他url沒(méi)有任何關(guān)聯(lián)。因此,如果我們要批量抓取公眾號的所有推送,需要手動(dòng)點(diǎn)擊每條推送,復制每條推送的url鏈接。這顯然是不現實(shí)的。在廣泛查閱各種資料后,我學(xué)會(huì )了如何爬取公眾號所有文章this文章的方法。
  這種方式的原理是,當我們登錄微信公眾號后臺編輯圖文素材時(shí),可以在素材中插入其他公眾號的推送鏈接。這里,微信公眾號后臺會(huì )自動(dòng)調用相關(guān)API,返回公眾號推送的所有長(cháng)鏈接列表。
  
  我們打開(kāi)Chrome瀏覽器的查看模式,選擇網(wǎng)絡(luò ),然后在編輯超鏈接界面的公眾號搜索欄中輸入“北京郵政家教部”,搜索并選擇公眾號,發(fā)現已經(jīng)刷新了一個(gè)網(wǎng)絡(luò )啟動(dòng)以“appmsg”開(kāi)頭的內容,這是我們分析的目標。
  
  我們點(diǎn)擊“appmsg”開(kāi)頭的內容,解析請求的url:
  https://mp.weixin.qq.com/cgi-b ... x%3D1
  鏈接分為三個(gè)部分:
  request的基本部分?action=list_ex常用于動(dòng)態(tài)網(wǎng)站,實(shí)現不同的參數值生成不同的頁(yè)面或返回不同的結果&amp;begin=0&amp;count=5&amp;fakeid=MjM5NDY3ODI4OA==&amp;type=9&amp;query=&amp;token= 1983840068&amp;lang=zh_CN&amp;f =json&amp;ajax=1 設置各種參數2.獲取Cookie和User-Agent
  如果使用Python的Requests庫直接訪(fǎng)問(wèn)url,是無(wú)法正常獲取結果的。原因是在使用網(wǎng)頁(yè)版微信公眾號在后臺插入超鏈接時(shí),我們處于登錄狀態(tài),但是當我們使用python直接訪(fǎng)問(wèn)時(shí),我們并沒(méi)有處于登錄狀態(tài)。因此,我們需要在訪(fǎng)問(wèn)時(shí)手動(dòng)獲取Cookie和User-Agent,并在使用Python的Requests庫訪(fǎng)問(wèn)時(shí)將它們傳遞到headers參數中。這里說(shuō)一下,我把公眾號標識符 fakeid 和 token 參數保存在一個(gè) yaml 文件中,方便爬取時(shí)加載。
  cookie : appmsglist_action_3899……
user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64)……
fakeid : MzI4M……
token : "19……
  在python代碼中加載如下:
  import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
  3.設置url參數
  然后我們設置要請求的url鏈接的參數:
  # 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
  這里,count 是請求返回的信息數,begin 是當前請求的頁(yè)數。當begin設置為0時(shí),會(huì )以json格式返回最近五次推送信息,以此類(lèi)推。
  4.開(kāi)始爬取
  通過(guò)一個(gè)循環(huán),begin的值每次加1,循環(huán)爬?。?br />   i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  在爬取大約 50 個(gè)頁(yè)面時(shí),我遇到了以下錯誤:
  {'base_resp':{'err_msg':'頻率控制','ret':200013}}
  這是因為微信公眾號有流量限制,所以你可以等一個(gè)小時(shí)。我在這里使用以下代碼來(lái)解決它:
  # 微信流量控制
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue
  對于每條爬取的信息,對其進(jìn)行解析并將其存儲在一個(gè) csv 文件中:
  msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("python小屋.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
  5.完整代碼
  完整代碼如下:
  #!/usr/bin/env python
# -*- encoding: utf-8 -*-
&#39;&#39;&#39;
@File : Spider.py
@Time : 2021/06/04 02:20:24
@Author : YuFanWenShu
@Contact : 1365240381@qq.com
&#39;&#39;&#39;
# here put the import lib
import json
import requests
import time
import random
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config[&#39;cookie&#39;],
"User-Agent": config[&#39;user_agent&#39;]
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config[&#39;fakeid&#39;],
"type": "9",
"token": config[&#39;token&#39;],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
with open("app_msg_list.csv", "w",encoding=&#39;utf-8&#39;) as file:
file.write("文章標識符aid,標題title,鏈接url,時(shí)間time\n")
i = 0
while True:
begin = i * 5
params["begin"] = str(begin)
# 隨機暫停幾秒,避免過(guò)快的請求導致過(guò)快的被查到
time.sleep(random.randint(1,10))
resp = requests.get(url, headers=headers, params = params, verify=False)
# 微信流量控制, 退出
if resp.json()[&#39;base_resp&#39;][&#39;ret&#39;] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
time.sleep(3600)
continue

# 如果返回的內容中為空則結束
if len(resp.json()[&#39;app_msg_list&#39;]) == 0:
print("all ariticle parsed")
break

msg = resp.json()
if "app_msg_list" in msg:
for item in msg["app_msg_list"]:
info = &#39;"{}","{}","{}","{}"&#39;.format(str(item["aid"]), item[&#39;title&#39;], item[&#39;link&#39;], str(item[&#39;create_time&#39;]))
with open("app_msg_list.csv", "a",encoding=&#39;utf-8&#39;) as f:
f.write(info+&#39;\n&#39;)
print(f"第{i}頁(yè)爬取成功\n")
print("\n".join(info.split(",")))
print("\n\n---------------------------------------------------------------------------------\n")
# 翻頁(yè)
i += 1
  6.爬取結果
  最終結果保存在 csv 文件中,一共 565 條推送消息:
  
  (二) 爬取每次推送并提取需要的信息1. 遍歷并爬取每次推送
  從 csv 文件中讀取每次推送的 url 鏈接,并使用 Requests 庫抓取每次推送的內容:
  with open("app_msg_list.csv","r",encoding="utf-8") as f:
data = f.readlines()
n = len(data)
for i in range(n):
mes = data[i].strip("\n").split(",")
if len(mes)!=4:
continue
title,url = mes[1:3]
if i>0:
r = requests.get(eval(url),headers=headers)
if r.status_code == 200:
text = r.text
projects = re_project.finditer(text)
  2.提取信息并寫(xiě)入文件
  我們需要提取的是每個(gè)導師信息的年級和科目。通過(guò)觀(guān)察推送結構,我決定使用正則表達式進(jìn)行提取。
  
  有的家教訂單長(cháng)時(shí)間沒(méi)有回復,會(huì )在多個(gè)帖子中重復出現,從而影響我們的統計結果。我決定用數字來(lái)識別不同的輔導信息,相同的數字只會(huì )計算一次。所以使用下面的正則表達式來(lái)匹配:
<p>re_project = re.compile(r">編號(.*?)年級(.*?)科目(.*?)科目(.*?)年級(.*?)編號(.*?)年級(.*?)科目(.*?)

querylist采集微信公眾號文章(querylist采集微信公眾號文章或者querylist=cdfshowquerylists(二維碼))

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 118 次瀏覽 ? 2022-01-21 13:03 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章或者querylist=cdfshowquerylists(二維碼))
  querylist采集微信公眾號文章或者querylist這個(gè)開(kāi)源模塊的詳細代碼;filename=cdfshowquerylists(二維碼)eggform,一個(gè)完整的ajax項目開(kāi)發(fā)的querylist編寫(xiě),表單提交接口,自定義表單提交樣式等等模塊eggmusic采集網(wǎng)易云音樂(lè )網(wǎng)頁(yè)歌曲列表列表封裝url提交接口;filename=cdfshowmusic(二維碼)詳細信息可以看這個(gè)頁(yè)面。querylist是一個(gè)cgi項目,您也可以關(guān)注我的公眾號獲取更多相關(guān)實(shí)用的文章。
  querylist接口就可以?;谖⑿欧?wù)號開(kāi)發(fā),一般是純node來(lái)寫(xiě),后續可以考慮nosql。querylist作者是微信游客,代碼有公開(kāi)。
  jslist的話(huà),現在java版本代碼網(wǎng)上可以找到。//function是app的代碼,java和php都是語(yǔ)言代碼,其中app是一個(gè)network服務(wù)。//代碼//server//if(this===theap){endinterfaceif(request.protocol_cnisready){server.addflags(nosslhttprequestrequest)work(newfetchserver(this))}//[cdns...]方法}}exportsexports.newslist=newslist;exports.alllist=exports.alllist;exports.alllistprototype=exports.alllistprototype;。
  最近一直在用querylist,很順手的、簡(jiǎn)單方便的接口。
  內部自己發(fā)電影文章在a標簽里,展示用微信link;外部轉發(fā), 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章或者querylist=cdfshowquerylists(二維碼))
  querylist采集微信公眾號文章或者querylist這個(gè)開(kāi)源模塊的詳細代碼;filename=cdfshowquerylists(二維碼)eggform,一個(gè)完整的ajax項目開(kāi)發(fā)的querylist編寫(xiě),表單提交接口,自定義表單提交樣式等等模塊eggmusic采集網(wǎng)易云音樂(lè )網(wǎng)頁(yè)歌曲列表列表封裝url提交接口;filename=cdfshowmusic(二維碼)詳細信息可以看這個(gè)頁(yè)面。querylist是一個(gè)cgi項目,您也可以關(guān)注我的公眾號獲取更多相關(guān)實(shí)用的文章。
  querylist接口就可以?;谖⑿欧?wù)號開(kāi)發(fā),一般是純node來(lái)寫(xiě),后續可以考慮nosql。querylist作者是微信游客,代碼有公開(kāi)。
  jslist的話(huà),現在java版本代碼網(wǎng)上可以找到。//function是app的代碼,java和php都是語(yǔ)言代碼,其中app是一個(gè)network服務(wù)。//代碼//server//if(this===theap){endinterfaceif(request.protocol_cnisready){server.addflags(nosslhttprequestrequest)work(newfetchserver(this))}//[cdns...]方法}}exportsexports.newslist=newslist;exports.alllist=exports.alllist;exports.alllistprototype=exports.alllistprototype;。
  最近一直在用querylist,很順手的、簡(jiǎn)單方便的接口。
  內部自己發(fā)電影文章在a標簽里,展示用微信link;外部轉發(fā),

querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 112 次瀏覽 ? 2022-01-21 12:09 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始做微信公眾號內容采集的批次,最初的目的是做一個(gè)html5垃圾郵件網(wǎng)站。當時(shí)垃圾站采集收到的微信公眾號內容很容易在公眾號中傳播。那個(gè)時(shí)候批量采集很容易做,采集入口就是公眾號的歷史新聞頁(yè)面。這個(gè)條目到今天還是一樣,只是越來(lái)越難了采集。采集 的方法也更新了很多版本。后來(lái)在2015年,html5垃圾站不再做,轉而將采集定位為本地新聞資訊公眾號,前端展示做成app。因此,一個(gè)可以自動(dòng)采集 公眾號內容形成。我曾經(jīng)擔心有一天,微信技術(shù)升級后,它無(wú)法采集內容,我的新聞應用程序會(huì )失敗。不過(guò)隨著(zhù)微信的不斷技術(shù)升級,采集方式也升級了,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到的時(shí)候可用。
  首先我們來(lái)看一個(gè)微信公眾號歷史新聞頁(yè)面的鏈接地址:
   http://mp.weixin.qq.com/mp/get ... irect
  =========2017 年 1 月 11 日更新==========
  現在,根據不同的微信個(gè)人號,會(huì )有兩個(gè)不同的歷史消息頁(yè)面地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一個(gè)地址的鏈接在anyproxy中會(huì )顯示302跳轉:
   https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  第二個(gè)鏈接地址的頁(yè)面樣式:
  根據目前掌握的信息,這兩種頁(yè)面形式在不同的微信賬號中不規則出現。有的微信賬號總是第一頁(yè)格式,有的總是第二頁(yè)格式。
  以上鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
   //第一種鏈接http://mp.weixin.qq.com/mp/get ... 3D1//第二種http://mp.weixin.qq.com/mp/pro ... r%3D1
  這個(gè)地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面,然后使用后面介紹的代理服務(wù)器軟件獲得的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=; 這四個(gè)參數。
  __biz 是公眾號的類(lèi)id參數。每個(gè)公眾號都有一個(gè)微信業(yè)務(wù)。目前公眾號的biz發(fā)生變化的概率很??;
  其余三個(gè)參數與用戶(hù)的 id 和 token 票證相關(guān)。這三個(gè)參數的值是微信客戶(hù)端生成后自動(dòng)添加到地址欄的。所以想要采集公眾號,必須通過(guò)微信客戶(hù)端。在微信之前的版本中,這三個(gè)參數也可以一次性獲取,在有效期內被多個(gè)公眾號使用。當前版本每次訪(fǎng)問(wèn)公共帳戶(hù)時(shí)都會(huì )更改參數值。
  我現在使用的方法只需要注意__biz參數即可。
  我的 采集 系統由以下部分組成:
  1、微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。經(jīng)測試,在批處理采集過(guò)程中,ios微信客戶(hù)端的崩潰率高于安卓系統。為了降低成本,我使用的是安卓模擬器。
  2、個(gè)人微信賬號:采集的內容,不僅需要微信客戶(hù)端,采集還需要個(gè)人微信賬號,因為這個(gè)微信賬號不能做其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾號歷史消息頁(yè)面中的文章列表發(fā)送到自己的服務(wù)器。具體的安裝和設置方法將在后面詳細介紹。
  4、文章列表分析與倉儲系統:我用php語(yǔ)言寫(xiě)的。后面會(huì )詳細介紹如何分析文章列表,建立采集隊列,實(shí)現批量采集內容。
  步
  一、安裝模擬器或者用手機安裝微信客戶(hù)端app,申請微信個(gè)人賬號并登錄app。這個(gè)我就不多說(shuō)了,大家都會(huì )的。
  二、代理服務(wù)器系統安裝
  目前我正在使用 Anyproxy,AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置將腳本代碼插入公眾號頁(yè)面。讓我們從安裝和配置過(guò)程開(kāi)始。
  1、安裝 NodeJS
  2、在命令行或者終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy并運行命令:sudo anyproxy -i; 參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器中安裝證書(shū):
  6、設置代理:Android模擬器的代理服務(wù)器地址是wifi鏈接的網(wǎng)關(guān)。將dhcp設置為static后可以看到網(wǎng)關(guān)地址。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器的默認端口是8001;
  現在打開(kāi)微信,點(diǎn)擊任意公眾號歷史消息或文章,可以在終端看到響應碼滾動(dòng)。如果沒(méi)有出現,請檢查您手機的代理設置是否正確。
  現在打開(kāi)瀏覽器地址:8002可以看到anyproxy的網(wǎng)頁(yè)界面。從微信點(diǎn)擊一個(gè)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  /mp/getmasssendmsg 開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示頁(yè)面是https加密的?,F在讓我們點(diǎn)擊這一行;
  =========2017 年 1 月 11 日更新==========
  一些以/mp/getmasssendmsg開(kāi)頭的微信網(wǎng)址會(huì )有302跳轉,跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址查看內容。
  如果右邊出現html文件的內容,則解密成功。如果沒(méi)有內容,請檢查anyproxy的運行模式是否有參數i,是否生成了ca證書(shū),手機上是否正確安裝了證書(shū)。
  現在我們手機上的所有內容都可以以明文形式通過(guò)代理服務(wù)器。接下來(lái),我們需要修改和配置代理服務(wù)器,以便獲取公眾號的內容。
  一、找到配置文件:
  mac系統中配置文件的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道的請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請詳細閱讀注釋?zhuān)@里只是原理介紹,了解后根據自己的情況修改內容):
  =========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面形式,而且同一個(gè)頁(yè)面形式總是顯示在不同的微信賬號中,但是為了兼容這兩種頁(yè)面形式,下面的代碼會(huì )保留兩種頁(yè)面形式的判斷,你也可以使用你的自己的頁(yè)面表單刪除li
   replaceServerResDataAsync:function(req,res,serverResData,callback){if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)if(serverResData.toString()!==""){try{//防止報錯退出程序varreg=/msgList = (.*?);/;//定義歷史消息正則匹配規則varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。try{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);//錯誤捕捉}callback(serverResData);//直接返回第二頁(yè)json內容}}}elseif(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)try{varreg=/var msgList = \&apos;(.*?)\&apos;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){callback(serverResData);}}elseif(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的jsontry{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);}callback(serverResData);}elseif(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)try{HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器}catch(e){}callback(serverResData);}elseif(/s\?__biz/i.test(req.url)||/mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)try{varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxPost.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);})});}catch(e){callback(serverResData);}}else{callback(serverResData);}},
  以上代碼使用anyproxy修改返回頁(yè)面內容的功能,將腳本注入頁(yè)面,將頁(yè)面內容發(fā)送給服務(wù)器。利用這個(gè)原理批量采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,下面詳細介紹:
  在 rule_default.js 文件的末尾添加以下代碼:
   functionHttpPost(str,url,path){//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名varhttp=require(&apos;http&apos;);vardata={str:encodeURIComponent(str),url:encodeURIComponent(url)};content=require(&apos;querystring&apos;).stringify(data);varoptions={method:"POST",host:"www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。port:80,path:path,//接收程序的路徑和文件名headers:{&apos;Content-Type&apos;:&apos;application/x-www-form-urlencoded; charset=UTF-8&apos;,"Content-Length":content.length}};varreq=http.request(options,function(res){res.setEncoding(&apos;utf8&apos;);res.on(&apos;data&apos;,function(chunk){console.log(&apos;BODY: &apos;+chunk);});});req.on(&apos;error&apos;,function(e){console.log(&apos;problem with request: &apos;+e.message);});req.write(content);req.end();}
  以上是規則修改的主要部分。需要將json內容發(fā)送到自己的服務(wù)器,并從服務(wù)器獲取跳轉到下一頁(yè)的地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低crash率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
   replaceRequestOption:function(req,option){varnewOption=option;if(/google/i.test(newOption.headers.host)){newOption.hostname="www.baidu.com";newOption.port="80";}returnnewOption;},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果啟動(dòng)報錯,程序可能無(wú)法干凈退出,端口被占用。此時(shí)輸入命令ps -a查看被占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺死進(jìn)程后,您可以啟動(dòng)anyproxy?;蛘遷indows的命令請原諒我不是很熟悉。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只是介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析后存入數據庫
<p> 查看全部

  querylist采集微信公眾號文章(一個(gè)微信公眾號歷史消息頁(yè)面的鏈接地址和采集方法)
  我從2014年開(kāi)始做微信公眾號內容采集的批次,最初的目的是做一個(gè)html5垃圾郵件網(wǎng)站。當時(shí)垃圾站采集收到的微信公眾號內容很容易在公眾號中傳播。那個(gè)時(shí)候批量采集很容易做,采集入口就是公眾號的歷史新聞頁(yè)面。這個(gè)條目到今天還是一樣,只是越來(lái)越難了采集。采集 的方法也更新了很多版本。后來(lái)在2015年,html5垃圾站不再做,轉而將采集定位為本地新聞資訊公眾號,前端展示做成app。因此,一個(gè)可以自動(dòng)采集 公眾號內容形成。我曾經(jīng)擔心有一天,微信技術(shù)升級后,它無(wú)法采集內容,我的新聞應用程序會(huì )失敗。不過(guò)隨著(zhù)微信的不斷技術(shù)升級,采集方式也升級了,這讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。隨著(zhù)微信的不斷技術(shù)升級,采集方式也不斷升級,讓我越來(lái)越有信心。只要公眾號歷史消息頁(yè)面存在,就可以批量采集到內容。所以今天決定整理一下采集方法,寫(xiě)下來(lái)。我的方法來(lái)源于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
  本文文章會(huì )持續更新,保證您看到的內容在您看到的時(shí)候可用。
  首先我們來(lái)看一個(gè)微信公眾號歷史新聞頁(yè)面的鏈接地址:
   http://mp.weixin.qq.com/mp/get ... irect
  =========2017 年 1 月 11 日更新==========
  現在,根據不同的微信個(gè)人號,會(huì )有兩個(gè)不同的歷史消息頁(yè)面地址。以下是另一個(gè)歷史消息頁(yè)面的地址。第一個(gè)地址的鏈接在anyproxy中會(huì )顯示302跳轉:
   https://mp.weixin.qq.com/mp/pr ... irect
  第一個(gè)鏈接地址的頁(yè)面樣式:
  第二個(gè)鏈接地址的頁(yè)面樣式:
  根據目前掌握的信息,這兩種頁(yè)面形式在不同的微信賬號中不規則出現。有的微信賬號總是第一頁(yè)格式,有的總是第二頁(yè)格式。
  以上鏈接是微信公眾號歷史新聞頁(yè)面的真實(shí)鏈接,但是當我們在瀏覽器中輸入這個(gè)鏈接時(shí),會(huì )顯示:請從微信客戶(hù)端訪(fǎng)問(wèn)。這是因為鏈接地址實(shí)際上需要幾個(gè)參數才能正常顯示內容。我們來(lái)看看一個(gè)可以正常顯示內容的完整鏈接是什么樣子的:
   //第一種鏈接http://mp.weixin.qq.com/mp/get ... 3D1//第二種http://mp.weixin.qq.com/mp/pro ... r%3D1
  這個(gè)地址是通過(guò)微信客戶(hù)端打開(kāi)歷史消息頁(yè)面,然后使用后面介紹的代理服務(wù)器軟件獲得的。這里有幾個(gè)參數:
  action=;__biz=;uin=;key=;devicetype=;version=;lang=;nettype=;scene=;pass_ticket=;wx_header=;
  重要的參數是:__biz;uin=;key=;pass_ticket=; 這四個(gè)參數。
  __biz 是公眾號的類(lèi)id參數。每個(gè)公眾號都有一個(gè)微信業(yè)務(wù)。目前公眾號的biz發(fā)生變化的概率很??;
  其余三個(gè)參數與用戶(hù)的 id 和 token 票證相關(guān)。這三個(gè)參數的值是微信客戶(hù)端生成后自動(dòng)添加到地址欄的。所以想要采集公眾號,必須通過(guò)微信客戶(hù)端。在微信之前的版本中,這三個(gè)參數也可以一次性獲取,在有效期內被多個(gè)公眾號使用。當前版本每次訪(fǎng)問(wèn)公共帳戶(hù)時(shí)都會(huì )更改參數值。
  我現在使用的方法只需要注意__biz參數即可。
  我的 采集 系統由以下部分組成:
  1、微信客戶(hù)端:可以是安裝了微信應用的手機,也可以是電腦上的安卓模擬器。經(jīng)測試,在批處理采集過(guò)程中,ios微信客戶(hù)端的崩潰率高于安卓系統。為了降低成本,我使用的是安卓模擬器。
  2、個(gè)人微信賬號:采集的內容,不僅需要微信客戶(hù)端,采集還需要個(gè)人微信賬號,因為這個(gè)微信賬號不能做其他事情。
  3、本地代理服務(wù)器系統:目前使用的方法是通過(guò)Anyproxy代理服務(wù)器將公眾號歷史消息頁(yè)面中的文章列表發(fā)送到自己的服務(wù)器。具體的安裝和設置方法將在后面詳細介紹。
  4、文章列表分析與倉儲系統:我用php語(yǔ)言寫(xiě)的。后面會(huì )詳細介紹如何分析文章列表,建立采集隊列,實(shí)現批量采集內容。
  步
  一、安裝模擬器或者用手機安裝微信客戶(hù)端app,申請微信個(gè)人賬號并登錄app。這個(gè)我就不多說(shuō)了,大家都會(huì )的。
  二、代理服務(wù)器系統安裝
  目前我正在使用 Anyproxy,AnyProxy。這個(gè)軟件的特點(diǎn)是可以獲取https鏈接的內容。2016年初,微信公眾號和微信文章開(kāi)始使用https鏈接。而Anyproxy可以通過(guò)修改規則配置將腳本代碼插入公眾號頁(yè)面。讓我們從安裝和配置過(guò)程開(kāi)始。
  1、安裝 NodeJS
  2、在命令行或者終端運行npm install -g anyproxy,mac系統需要添加sudo;
  3、生成RootCA,https需要這個(gè)證書(shū):運行命令sudo anyproxy --root(windows可能不需要sudo);
  4、啟動(dòng)anyproxy并運行命令:sudo anyproxy -i; 參數-i表示解析HTTPS;
  5、安裝證書(shū),在手機或者安卓模擬器中安裝證書(shū):
  6、設置代理:Android模擬器的代理服務(wù)器地址是wifi鏈接的網(wǎng)關(guān)。將dhcp設置為static后可以看到網(wǎng)關(guān)地址。閱讀后不要忘記將其設置為自動(dòng)。手機中的代理服務(wù)器地址是運行anyproxy的電腦的ip地址。代理服務(wù)器的默認端口是8001;
  現在打開(kāi)微信,點(diǎn)擊任意公眾號歷史消息或文章,可以在終端看到響應碼滾動(dòng)。如果沒(méi)有出現,請檢查您手機的代理設置是否正確。
  現在打開(kāi)瀏覽器地址:8002可以看到anyproxy的網(wǎng)頁(yè)界面。從微信點(diǎn)擊一個(gè)歷史消息頁(yè)面,然后查看瀏覽器的網(wǎng)頁(yè)界面,歷史消息頁(yè)面的地址會(huì )滾動(dòng)。
  /mp/getmasssendmsg 開(kāi)頭的網(wǎng)址是微信歷史消息頁(yè)面。左邊的小鎖表示頁(yè)面是https加密的?,F在讓我們點(diǎn)擊這一行;
  =========2017 年 1 月 11 日更新==========
  一些以/mp/getmasssendmsg開(kāi)頭的微信網(wǎng)址會(huì )有302跳轉,跳轉到/mp/profile_ext?action=home開(kāi)頭的地址。所以點(diǎn)擊這個(gè)地址查看內容。
  如果右邊出現html文件的內容,則解密成功。如果沒(méi)有內容,請檢查anyproxy的運行模式是否有參數i,是否生成了ca證書(shū),手機上是否正確安裝了證書(shū)。
  現在我們手機上的所有內容都可以以明文形式通過(guò)代理服務(wù)器。接下來(lái),我們需要修改和配置代理服務(wù)器,以便獲取公眾號的內容。
  一、找到配置文件:
  mac系統中配置文件的位置是/usr/local/lib/node_modules/anyproxy/lib/;對于windows系統,不知道的請見(jiàn)諒。應該可以根據類(lèi)似mac的文件夾地址找到這個(gè)目錄。
  二、修改文件rule_default.js
  找到replaceServerResDataAsync: function(req,res,serverResData,callback) 函數
  修改函數內容(請詳細閱讀注釋?zhuān)@里只是原理介紹,了解后根據自己的情況修改內容):
  =========2017 年 1 月 11 日更新==========
  因為有兩種頁(yè)面形式,而且同一個(gè)頁(yè)面形式總是顯示在不同的微信賬號中,但是為了兼容這兩種頁(yè)面形式,下面的代碼會(huì )保留兩種頁(yè)面形式的判斷,你也可以使用你的自己的頁(yè)面表單刪除li
   replaceServerResDataAsync:function(req,res,serverResData,callback){if(/mp\/getmasssendmsg/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第一種頁(yè)面形式)if(serverResData.toString()!==""){try{//防止報錯退出程序varreg=/msgList = (.*?);/;//定義歷史消息正則匹配規則varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){//如果上面的正則沒(méi)有匹配到,那么這個(gè)頁(yè)面內容可能是公眾號歷史消息頁(yè)面向下翻動(dòng)的第二頁(yè),因為歷史消息第一頁(yè)是html格式的,第二頁(yè)就是json格式的。try{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);//錯誤捕捉}callback(serverResData);//直接返回第二頁(yè)json內容}}}elseif(/mp\/profile_ext\?action=home/i.test(req.url)){//當鏈接地址為公眾號歷史消息頁(yè)面時(shí)(第二種頁(yè)面形式)try{varreg=/var msgList = \&apos;(.*?)\&apos;;/;//定義歷史消息正則匹配規則(和第一種頁(yè)面形式的正則不同)varret=reg.exec(serverResData.toString());//轉換變量為stringHttpPost(ret[1],req.url,"getMsgJson.php");//這個(gè)函數是后文定義的,將匹配到的歷史消息json發(fā)送到自己的服務(wù)器varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxHis&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxHis.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);//將返回的代碼插入到歷史消息頁(yè)面中,并返回顯示出來(lái)})});}catch(e){callback(serverResData);}}elseif(/mp\/profile_ext\?action=getmsg/i.test(req.url)){//第二種頁(yè)面表現形式的向下翻頁(yè)后的jsontry{varjson=JSON.parse(serverResData.toString());if(json.general_msg_list!=[]){HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//這個(gè)函數和上面的一樣是后文定義的,將第二頁(yè)歷史消息的json發(fā)送到自己的服務(wù)器}}catch(e){console.log(e);}callback(serverResData);}elseif(/mp\/getappmsgext/i.test(req.url)){//當鏈接地址為公眾號文章閱讀量和點(diǎn)贊量時(shí)try{HttpPost(serverResData,req.url,"getMsgExt.php");//函數是后文定義的,功能是將文章閱讀量點(diǎn)贊量的json發(fā)送到服務(wù)器}catch(e){}callback(serverResData);}elseif(/s\?__biz/i.test(req.url)||/mp\/rumor/i.test(req.url)){//當鏈接地址為公眾號文章時(shí)(rumor這個(gè)地址是公眾號文章被辟謠了)try{varhttp=require(&apos;http&apos;);http.get(&apos;http://xxx.com/getWxPost.php&apos;,function(res){//這個(gè)地址是自己服務(wù)器上的另一個(gè)程序,目的是為了獲取到下一個(gè)鏈接地址,將地址放在一個(gè)js腳本中,將頁(yè)面自動(dòng)跳轉到下一頁(yè)。后文將介紹getWxPost.php的原理。res.on(&apos;data&apos;,function(chunk){callback(chunk+serverResData);})});}catch(e){callback(serverResData);}}else{callback(serverResData);}},
  以上代碼使用anyproxy修改返回頁(yè)面內容的功能,將腳本注入頁(yè)面,將頁(yè)面內容發(fā)送給服務(wù)器。利用這個(gè)原理批量采集公眾號內容和閱讀量。該腳本中自定義了一個(gè)函數,下面詳細介紹:
  在 rule_default.js 文件的末尾添加以下代碼:
   functionHttpPost(str,url,path){//將json發(fā)送到服務(wù)器,str為json內容,url為歷史消息頁(yè)面地址,path是接收程序的路徑和文件名varhttp=require(&apos;http&apos;);vardata={str:encodeURIComponent(str),url:encodeURIComponent(url)};content=require(&apos;querystring&apos;).stringify(data);varoptions={method:"POST",host:"www.xxx.com",//注意沒(méi)有http://,這是服務(wù)器的域名。port:80,path:path,//接收程序的路徑和文件名headers:{&apos;Content-Type&apos;:&apos;application/x-www-form-urlencoded; charset=UTF-8&apos;,"Content-Length":content.length}};varreq=http.request(options,function(res){res.setEncoding(&apos;utf8&apos;);res.on(&apos;data&apos;,function(chunk){console.log(&apos;BODY: &apos;+chunk);});});req.on(&apos;error&apos;,function(e){console.log(&apos;problem with request: &apos;+e.message);});req.write(content);req.end();}
  以上是規則修改的主要部分。需要將json內容發(fā)送到自己的服務(wù)器,并從服務(wù)器獲取跳轉到下一頁(yè)的地址。這涉及到四個(gè)php文件:getMsgJson.php、getMsgExt.php、getWxHis.php、getWxPost.php
  在詳細介紹這4個(gè)php文件之前,為了提高采集系統性能,降低crash率,我們還可以做一些修改:
  Android模擬器經(jīng)常訪(fǎng)問(wèn)一些地址,會(huì )導致anyproxy崩潰,找到函數replaceRequestOption:function(req,option),修改函數內容:
   replaceRequestOption:function(req,option){varnewOption=option;if(/google/i.test(newOption.headers.host)){newOption.hostname="www.baidu.com";newOption.port="80";}returnnewOption;},
  以上是anyproxy的規則文件的修改配置。配置修改完成后,重啟anyproxy。mac系統下,按control+c中斷程序,然后輸入命令sudo anyproxy -i啟動(dòng);如果啟動(dòng)報錯,程序可能無(wú)法干凈退出,端口被占用。此時(shí)輸入命令ps -a查看被占用的pid,然后輸入命令“kill -9 pid”將pid替換為查詢(xún)到的pid號。殺死進(jìn)程后,您可以啟動(dòng)anyproxy?;蛘遷indows的命令請原諒我不是很熟悉。
  接下來(lái)詳細介紹服務(wù)器端接收程序的設計原理:
 ?。ㄒ韵麓a不能直接使用,只是介紹原理,部分需要根據自己的服務(wù)器數據庫框架編寫(xiě))
  1、getMsgJson.php:該程序負責接收歷史消息的json,解析后存入數據庫
<p>

querylist采集微信公眾號文章(querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-01-21 04:05 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api)
  querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api,采集分類(lèi)里面所有的公眾號,最好是排在前面的。超級簡(jiǎn)單還有兩個(gè),就是微信登錄了,可以得到某一個(gè)人閱讀所有的文章,還有未閱讀所有的,然后一個(gè)一個(gè)篩選上傳。querylist采集微信公眾號文章原理解析,基于android自動(dòng)化api進(jìn)行采集前端接入admin-session。
  從過(guò)去到現在,在“996”的現狀下,很多同學(xué)們被焦慮干擾,工作不知道做到什么時(shí)候才好,也不知道現在的工作有什么意義,怎么才能擁有一份可靠且體面的工作。其實(shí)這是職場(chǎng)的低谷期,因為你不知道以后的工作要靠什么。在這樣的大背景下,老張在工作中雖然算比較努力,可還是要被“論資排輩”,作為部門(mén)老人,需要經(jīng)常出差加班和處理公司的一些事情,要接受老板的要求,承擔公司的一些不利的情況。
  老張已經(jīng)郁悶到將近夜不能寐,一個(gè)一個(gè)深夜刷知乎、朋友圈和公眾號,不管干什么,不管怎么才能讓自己不那么焦慮。在公司當中老張的老板是屬于典型的家族企業(yè),他從一開(kāi)始就對老板很尊敬,除了工作和團隊不管其他事情。公司經(jīng)營(yíng)順利,但員工一直留不住?,F在他很迷茫,老板就是不放權,覺(jué)得憑他的能力很難接觸到更高的層面,但是公司也沒(méi)有其他發(fā)展機會(huì ),那老板每次經(jīng)營(yíng)不好,經(jīng)常找老板的問(wèn)題,可能也是不想讓自己承擔責任,他覺(jué)得自己就是“無(wú)功不受祿”,也不能挑戰權威,就是接著(zhù)從基層做起來(lái)。
  部門(mén)經(jīng)理跳槽去了大公司,公司對他也開(kāi)始有新的要求。老張現在也很迷茫,我覺(jué)得現在的工作沒(méi)什么意義,除了工資,還是沒(méi)有特別充足的收入。最近買(mǎi)了本書(shū),給自己充電,不知道那本書(shū)對我有沒(méi)有幫助。老張該如何跳槽?希望各位大佬發(fā)表看法,給點(diǎn)建議。 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api)
  querylist采集微信公眾號文章的超簡(jiǎn)單方法,超級簡(jiǎn)單直接上api,采集分類(lèi)里面所有的公眾號,最好是排在前面的。超級簡(jiǎn)單還有兩個(gè),就是微信登錄了,可以得到某一個(gè)人閱讀所有的文章,還有未閱讀所有的,然后一個(gè)一個(gè)篩選上傳。querylist采集微信公眾號文章原理解析,基于android自動(dòng)化api進(jìn)行采集前端接入admin-session。
  從過(guò)去到現在,在“996”的現狀下,很多同學(xué)們被焦慮干擾,工作不知道做到什么時(shí)候才好,也不知道現在的工作有什么意義,怎么才能擁有一份可靠且體面的工作。其實(shí)這是職場(chǎng)的低谷期,因為你不知道以后的工作要靠什么。在這樣的大背景下,老張在工作中雖然算比較努力,可還是要被“論資排輩”,作為部門(mén)老人,需要經(jīng)常出差加班和處理公司的一些事情,要接受老板的要求,承擔公司的一些不利的情況。
  老張已經(jīng)郁悶到將近夜不能寐,一個(gè)一個(gè)深夜刷知乎、朋友圈和公眾號,不管干什么,不管怎么才能讓自己不那么焦慮。在公司當中老張的老板是屬于典型的家族企業(yè),他從一開(kāi)始就對老板很尊敬,除了工作和團隊不管其他事情。公司經(jīng)營(yíng)順利,但員工一直留不住?,F在他很迷茫,老板就是不放權,覺(jué)得憑他的能力很難接觸到更高的層面,但是公司也沒(méi)有其他發(fā)展機會(huì ),那老板每次經(jīng)營(yíng)不好,經(jīng)常找老板的問(wèn)題,可能也是不想讓自己承擔責任,他覺(jué)得自己就是“無(wú)功不受祿”,也不能挑戰權威,就是接著(zhù)從基層做起來(lái)。
  部門(mén)經(jīng)理跳槽去了大公司,公司對他也開(kāi)始有新的要求。老張現在也很迷茫,我覺(jué)得現在的工作沒(méi)什么意義,除了工資,還是沒(méi)有特別充足的收入。最近買(mǎi)了本書(shū),給自己充電,不知道那本書(shū)對我有沒(méi)有幫助。老張該如何跳槽?希望各位大佬發(fā)表看法,給點(diǎn)建議。

querylist采集微信公眾號文章(querylist采集微信公眾號文章(只支持微信)效果預覽)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 145 次瀏覽 ? 2022-01-20 12:08 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(querylist采集微信公眾號文章(只支持微信)效果預覽)
  querylist采集微信公眾號文章(只支持微信公眾號文章)效果預覽該插件可以整合百度等搜索引擎來(lái)爬取網(wǎng)頁(yè),最主要的是可以采集微信公眾號文章。
  看這篇文章。差不多了。覺(jué)得不夠詳細,我再補充一下。
  如果你是要采集同一個(gè)平臺微信公眾號文章的話(huà),python只能做到類(lèi)似條件格式提?。ú杉轿恼聵祟},封面圖,推薦人等),采集內容比較少。如果要是采集多個(gè)平臺的文章,那就需要用數據采集框架。推薦你一個(gè)好的采集框架,
  微信有接口可以爬取你這里的東西,這里面有兩個(gè)數據采集,
  根據你的需求,最好用以下方式:1,去電腦上,下載這個(gè)app:星辰數據2,電腦上,安裝excel3,進(jìn)入excel,文件-數據采集框架,按流程編輯。
  使用api進(jìn)行api接口請求比如是關(guān)注數統計uiwebview上下載服務(wù)器。
  1、專(zhuān)門(mén)的爬蟲(chóng)庫也有api。2、建議去學(xué)學(xué)scrapy等,文檔好、資料多,關(guān)鍵還有師徒社區。
  感覺(jué)開(kāi)頭貌似需要一個(gè)采集python源碼的環(huán)境支持,因為微信這方面規定比較嚴格, 查看全部

  querylist采集微信公眾號文章(querylist采集微信公眾號文章(只支持微信)效果預覽)
  querylist采集微信公眾號文章(只支持微信公眾號文章)效果預覽該插件可以整合百度等搜索引擎來(lái)爬取網(wǎng)頁(yè),最主要的是可以采集微信公眾號文章。
  看這篇文章。差不多了。覺(jué)得不夠詳細,我再補充一下。
  如果你是要采集同一個(gè)平臺微信公眾號文章的話(huà),python只能做到類(lèi)似條件格式提?。ú杉轿恼聵祟},封面圖,推薦人等),采集內容比較少。如果要是采集多個(gè)平臺的文章,那就需要用數據采集框架。推薦你一個(gè)好的采集框架,
  微信有接口可以爬取你這里的東西,這里面有兩個(gè)數據采集,
  根據你的需求,最好用以下方式:1,去電腦上,下載這個(gè)app:星辰數據2,電腦上,安裝excel3,進(jìn)入excel,文件-數據采集框架,按流程編輯。
  使用api進(jìn)行api接口請求比如是關(guān)注數統計uiwebview上下載服務(wù)器。
  1、專(zhuān)門(mén)的爬蟲(chóng)庫也有api。2、建議去學(xué)學(xué)scrapy等,文檔好、資料多,關(guān)鍵還有師徒社區。
  感覺(jué)開(kāi)頭貌似需要一個(gè)采集python源碼的環(huán)境支持,因為微信這方面規定比較嚴格,

querylist采集微信公眾號文章(微信小程序調試工具知識兔調試工具分為6大功能模塊)

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 142 次瀏覽 ? 2022-01-19 07:04 ? 來(lái)自相關(guān)話(huà)題

  querylist采集微信公眾號文章(微信小程序調試工具知識兔調試工具分為6大功能模塊)
  微信小程序一直受到很多用戶(hù)的歡迎,今天正式上線(xiàn)。相信很多小伙伴都很感興趣。小編為大家帶來(lái)微信小程序調試工具,幫助大家更好的開(kāi)發(fā)制作小程序。程序,想要自己制作小程序的朋友,不妨下載體驗一下吧!
  微信小程序獲取方法知識兔
  線(xiàn)下掃碼:獲取小程序最基本的方式就是二維碼。您可以通過(guò)微信掃描離線(xiàn)二維碼打開(kāi)掃描進(jìn)入小程序。
  微信搜索:同時(shí)在微信客戶(hù)端頂部的搜索窗口,也可以通過(guò)搜索獲取??小程序。
  公眾號關(guān)聯(lián):同一主題的小程序和公眾號可以關(guān)聯(lián)和跳轉。該功能需要開(kāi)發(fā)者在使用前進(jìn)行設置。
  朋友推薦:一個(gè)公眾號可以綁定五個(gè)小程序,一個(gè)小程序只能綁定一個(gè)公眾號。您可以通過(guò)公眾號查看和進(jìn)入關(guān)聯(lián)的小程序,反之亦然,您也可以通過(guò)小程序查看和進(jìn)入關(guān)聯(lián)的公眾號。
  當您發(fā)現有趣或有用的小程序時(shí),您可以將該小程序或其頁(yè)面之一轉發(fā)給朋友或群聊。但請注意,小程序不能在朋友圈發(fā)布和分享。
  歷史記錄:使用過(guò)某個(gè)小程序后,可以在微信客戶(hù)端“發(fā)現-小程序”的列表中看到該小程序。當您想再次使用它時(shí),您可以使用列表中的歷史記錄。進(jìn)入。在“發(fā)現-小程序”中,您也可以通過(guò)搜索進(jìn)入小程序。
  微信小程序調試工具 知識兔
  調試工具分為6個(gè)功能模塊:Wxml、Console、Sources、Network、Appdata、Storage
  
  點(diǎn)擊下載 查看全部

  querylist采集微信公眾號文章(微信小程序調試工具知識兔調試工具分為6大功能模塊)
  微信小程序一直受到很多用戶(hù)的歡迎,今天正式上線(xiàn)。相信很多小伙伴都很感興趣。小編為大家帶來(lái)微信小程序調試工具,幫助大家更好的開(kāi)發(fā)制作小程序。程序,想要自己制作小程序的朋友,不妨下載體驗一下吧!
  微信小程序獲取方法知識兔
  線(xiàn)下掃碼:獲取小程序最基本的方式就是二維碼。您可以通過(guò)微信掃描離線(xiàn)二維碼打開(kāi)掃描進(jìn)入小程序。
  微信搜索:同時(shí)在微信客戶(hù)端頂部的搜索窗口,也可以通過(guò)搜索獲取??小程序。
  公眾號關(guān)聯(lián):同一主題的小程序和公眾號可以關(guān)聯(lián)和跳轉。該功能需要開(kāi)發(fā)者在使用前進(jìn)行設置。
  朋友推薦:一個(gè)公眾號可以綁定五個(gè)小程序,一個(gè)小程序只能綁定一個(gè)公眾號。您可以通過(guò)公眾號查看和進(jìn)入關(guān)聯(lián)的小程序,反之亦然,您也可以通過(guò)小程序查看和進(jìn)入關(guān)聯(lián)的公眾號。
  當您發(fā)現有趣或有用的小程序時(shí),您可以將該小程序或其頁(yè)面之一轉發(fā)給朋友或群聊。但請注意,小程序不能在朋友圈發(fā)布和分享。
  歷史記錄:使用過(guò)某個(gè)小程序后,可以在微信客戶(hù)端“發(fā)現-小程序”的列表中看到該小程序。當您想再次使用它時(shí),您可以使用列表中的歷史記錄。進(jìn)入。在“發(fā)現-小程序”中,您也可以通過(guò)搜索進(jìn)入小程序。
  微信小程序調試工具 知識兔
  調試工具分為6個(gè)功能模塊:Wxml、Console、Sources、Network、Appdata、Storage
  
  點(diǎn)擊下載

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久