
querylist采集微信公眾號文章
querylist采集微信公眾號文章(querylist采集微信公眾號文章實(shí)現了關(guān)鍵詞過(guò)濾及數據接口定制)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 155 次瀏覽 ? 2021-09-13 15:02
querylist采集微信公眾號文章,實(shí)現了每篇文章的單篇信息收集,并實(shí)現了相應的關(guān)鍵詞過(guò)濾及數據接口定制。-middleware實(shí)現上述功能,其實(shí)非常簡(jiǎn)單,就是通過(guò)js包裝相應的js,在微信公眾號進(jìn)行引入就可以做到了。另外,enjoyglobaljsresolve,這個(gè)是數據上傳器。
會(huì )有一個(gè)優(yōu)化空間可以讓正常人(如我)也可以公眾號轉碼大海撈針,但是只是很小一部分,因為微信方面根本沒(méi)有對公眾號做跨站請求的格式化。
我來(lái)解釋一下使用爬蟲(chóng)抓取是不是會(huì )破壞原有用戶(hù)關(guān)注的時(shí)間線(xiàn)規律,作為一個(gè)小白,我認為不會(huì )。首先應該沒(méi)有爬蟲(chóng)什么時(shí)候回去爬這個(gè)“答案列表”,也就是能不能找到所有未被編輯的答案。微信這一點(diǎn)上是有點(diǎn)欠考慮的,因為我覺(jué)得如果數據傳輸得太大了,這對微信是一種隱患,因為這讓它變得復雜而冗長(cháng),而且都是僵尸粉,就不要費那事了,最后一天的關(guān)注也會(huì )干擾微信閱讀。
正常來(lái)說(shuō),整個(gè)原生瀏覽器的chrome或ie訪(fǎng)問(wèn)時(shí)間軸是按照推送最早時(shí)間來(lái)的,這樣的話(huà)我們抓取正常用戶(hù)關(guān)注人的話(huà)得在100秒內進(jìn)行采集,但是這也有個(gè)小bug,我們大膽假設,如果微信是推送下午時(shí)間線(xiàn)的話(huà)就會(huì )麻煩的多,因為上午大部分人已經(jīng)不看了。但是我用過(guò)一個(gè)同學(xué)的一個(gè)神奇插件,可以清除本地的緩存,這樣就可以大大減少那些僵尸粉了,當然清除緩存本身肯定有問(wèn)題的,就會(huì )造成頁(yè)面被篡改,最后導致爬蟲(chóng)被屏蔽。
爬蟲(chóng)其實(shí)對用戶(hù)來(lái)說(shuō)是不是很麻煩,個(gè)人認為不是,各位大神可以借鑒一下:我用的插件是github-hi5881166/vczh:vczh.io現在覺(jué)得爬蟲(chóng)的整個(gè)思想和原理一樣,只不過(guò)用js編寫(xiě)而已。有機會(huì )寫(xiě)一寫(xiě)爬蟲(chóng),順便寫(xiě)一下完整的采集方案,歡迎關(guān)注!。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章實(shí)現了關(guān)鍵詞過(guò)濾及數據接口定制)
querylist采集微信公眾號文章,實(shí)現了每篇文章的單篇信息收集,并實(shí)現了相應的關(guān)鍵詞過(guò)濾及數據接口定制。-middleware實(shí)現上述功能,其實(shí)非常簡(jiǎn)單,就是通過(guò)js包裝相應的js,在微信公眾號進(jìn)行引入就可以做到了。另外,enjoyglobaljsresolve,這個(gè)是數據上傳器。
會(huì )有一個(gè)優(yōu)化空間可以讓正常人(如我)也可以公眾號轉碼大海撈針,但是只是很小一部分,因為微信方面根本沒(méi)有對公眾號做跨站請求的格式化。
我來(lái)解釋一下使用爬蟲(chóng)抓取是不是會(huì )破壞原有用戶(hù)關(guān)注的時(shí)間線(xiàn)規律,作為一個(gè)小白,我認為不會(huì )。首先應該沒(méi)有爬蟲(chóng)什么時(shí)候回去爬這個(gè)“答案列表”,也就是能不能找到所有未被編輯的答案。微信這一點(diǎn)上是有點(diǎn)欠考慮的,因為我覺(jué)得如果數據傳輸得太大了,這對微信是一種隱患,因為這讓它變得復雜而冗長(cháng),而且都是僵尸粉,就不要費那事了,最后一天的關(guān)注也會(huì )干擾微信閱讀。
正常來(lái)說(shuō),整個(gè)原生瀏覽器的chrome或ie訪(fǎng)問(wèn)時(shí)間軸是按照推送最早時(shí)間來(lái)的,這樣的話(huà)我們抓取正常用戶(hù)關(guān)注人的話(huà)得在100秒內進(jìn)行采集,但是這也有個(gè)小bug,我們大膽假設,如果微信是推送下午時(shí)間線(xiàn)的話(huà)就會(huì )麻煩的多,因為上午大部分人已經(jīng)不看了。但是我用過(guò)一個(gè)同學(xué)的一個(gè)神奇插件,可以清除本地的緩存,這樣就可以大大減少那些僵尸粉了,當然清除緩存本身肯定有問(wèn)題的,就會(huì )造成頁(yè)面被篡改,最后導致爬蟲(chóng)被屏蔽。
爬蟲(chóng)其實(shí)對用戶(hù)來(lái)說(shuō)是不是很麻煩,個(gè)人認為不是,各位大神可以借鑒一下:我用的插件是github-hi5881166/vczh:vczh.io現在覺(jué)得爬蟲(chóng)的整個(gè)思想和原理一樣,只不過(guò)用js編寫(xiě)而已。有機會(huì )寫(xiě)一寫(xiě)爬蟲(chóng),順便寫(xiě)一下完整的采集方案,歡迎關(guān)注!。
querylist采集微信公眾號文章(工具Python3+版本Fiddler下載地址(圖)下載)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 164 次瀏覽 ? 2021-09-11 08:14
代碼測試有效期至2019/03/08
微信爬蟲(chóng)步驟:
必需品:
我的微信公眾號Fiddler抓包工具Python 3+版
提琴手下載鏈接
HTTP 代理工具也稱(chēng)為抓包工具。主流的抓包工具是Windows平臺的Fiddler,macOS平臺的Charles,阿里開(kāi)源了一個(gè)叫AnyProxy的工具。它們的基本原理類(lèi)似,即通過(guò)在移動(dòng)客戶(hù)端上設置代理IP和端口,所有來(lái)自客戶(hù)端的HTTP和HTTPS請求都會(huì )通過(guò)代理工具。在代理工具中,您可以清楚地看到每個(gè)請求。然后可以分析詳細信息以找出每個(gè)請求的構造方式。搞清楚這些之后,我們就可以用Python來(lái)模擬發(fā)起請求了,然后就可以得到我們想要的數據了。
安裝包超過(guò)4M。配置前,首先確保您的手機和電腦在同一個(gè)局域網(wǎng)內。如果不在同一個(gè)局域網(wǎng)內,可以購買(mǎi)便攜式WiFi,在電腦上搭建一個(gè)極簡(jiǎn)的無(wú)線(xiàn)路由器。一路點(diǎn)擊下一步,完成安裝過(guò)程。
Fiddler 配置選擇工具> Fiddler 選項> 連接 Fiddler 的默認端口為8888,如果該端口已經(jīng)被其他程序占用,需要手動(dòng)更改,勾選允許遠程計算機連接,其他選項即可。 , 配置更新后記得重啟Fiddler。一定要重啟Fiddler,否則代理將失效。 .接下來(lái)需要配置手機,但是這里微信有pc客戶(hù)端,所以不需要配置手機
現在打開(kāi)微信,隨機選擇一個(gè)公眾號,進(jìn)入公眾號的【查看歷史信息】
同時(shí)觀(guān)察 Fiddler 的主面板。當微信從公眾號介紹頁(yè)面進(jìn)入歷史消息頁(yè)面時(shí),已經(jīng)可以在Fiddler上看到請求進(jìn)來(lái)了。這些請求是微信APP向服務(wù)器發(fā)送的請求?,F在簡(jiǎn)單介紹一下這個(gè)請求面板上各個(gè)模塊的含義。
我將上面的主面板分成了 7 個(gè)塊。需要了解每個(gè)區塊的內容,然后才可以使用Python代碼模擬微信請求。 1、服務(wù)器響應結果,200表示服務(wù)器成功響應了2、請求協(xié)議,微信請求協(xié)議是基于HTTPS的,所以之前一定要配置好,否則看不到HTTPS請求。 3、微信服務(wù)器主機名4、請求路徑5、請求行,包括請求方法(GET)、請求協(xié)議(HTTP/1.1)、請求路徑(/mp/profile_ext...)一長(cháng)串參數)6、收錄cookie信息的請求頭。7、微信服務(wù)器返回的響應數據,我們切換到TextView和WebView看看返回的數據是什么樣子的。
TextView模式下的預覽效果為服務(wù)器返回的HTML源代碼
WebView 模式是 HTML 代碼的渲染效果。其實(shí)就是我們在手機微信上看到的效果,但是因為風(fēng)格欠缺,沒(méi)有看到手機上的美化效果。
如果服務(wù)器返回的是Json格式或者XML,也可以切換到對應的頁(yè)面進(jìn)行預覽查看。
開(kāi)始抓?。?br /> 1、擁有微信公眾號
登錄微信公眾號,在菜單欄:素材管理—>新建素材,出現如下頁(yè)面
F12查看網(wǎng)絡(luò ),點(diǎn)擊圖中位置
公眾號和user-Agent的cookies如下
Fakeid和token獲取如下: 查看全部
querylist采集微信公眾號文章(工具Python3+版本Fiddler下載地址(圖)下載)
代碼測試有效期至2019/03/08
微信爬蟲(chóng)步驟:
必需品:
我的微信公眾號Fiddler抓包工具Python 3+版
提琴手下載鏈接
HTTP 代理工具也稱(chēng)為抓包工具。主流的抓包工具是Windows平臺的Fiddler,macOS平臺的Charles,阿里開(kāi)源了一個(gè)叫AnyProxy的工具。它們的基本原理類(lèi)似,即通過(guò)在移動(dòng)客戶(hù)端上設置代理IP和端口,所有來(lái)自客戶(hù)端的HTTP和HTTPS請求都會(huì )通過(guò)代理工具。在代理工具中,您可以清楚地看到每個(gè)請求。然后可以分析詳細信息以找出每個(gè)請求的構造方式。搞清楚這些之后,我們就可以用Python來(lái)模擬發(fā)起請求了,然后就可以得到我們想要的數據了。
安裝包超過(guò)4M。配置前,首先確保您的手機和電腦在同一個(gè)局域網(wǎng)內。如果不在同一個(gè)局域網(wǎng)內,可以購買(mǎi)便攜式WiFi,在電腦上搭建一個(gè)極簡(jiǎn)的無(wú)線(xiàn)路由器。一路點(diǎn)擊下一步,完成安裝過(guò)程。
Fiddler 配置選擇工具> Fiddler 選項> 連接 Fiddler 的默認端口為8888,如果該端口已經(jīng)被其他程序占用,需要手動(dòng)更改,勾選允許遠程計算機連接,其他選項即可。 , 配置更新后記得重啟Fiddler。一定要重啟Fiddler,否則代理將失效。 .接下來(lái)需要配置手機,但是這里微信有pc客戶(hù)端,所以不需要配置手機
現在打開(kāi)微信,隨機選擇一個(gè)公眾號,進(jìn)入公眾號的【查看歷史信息】
同時(shí)觀(guān)察 Fiddler 的主面板。當微信從公眾號介紹頁(yè)面進(jìn)入歷史消息頁(yè)面時(shí),已經(jīng)可以在Fiddler上看到請求進(jìn)來(lái)了。這些請求是微信APP向服務(wù)器發(fā)送的請求?,F在簡(jiǎn)單介紹一下這個(gè)請求面板上各個(gè)模塊的含義。

我將上面的主面板分成了 7 個(gè)塊。需要了解每個(gè)區塊的內容,然后才可以使用Python代碼模擬微信請求。 1、服務(wù)器響應結果,200表示服務(wù)器成功響應了2、請求協(xié)議,微信請求協(xié)議是基于HTTPS的,所以之前一定要配置好,否則看不到HTTPS請求。 3、微信服務(wù)器主機名4、請求路徑5、請求行,包括請求方法(GET)、請求協(xié)議(HTTP/1.1)、請求路徑(/mp/profile_ext...)一長(cháng)串參數)6、收錄cookie信息的請求頭。7、微信服務(wù)器返回的響應數據,我們切換到TextView和WebView看看返回的數據是什么樣子的。
TextView模式下的預覽效果為服務(wù)器返回的HTML源代碼

WebView 模式是 HTML 代碼的渲染效果。其實(shí)就是我們在手機微信上看到的效果,但是因為風(fēng)格欠缺,沒(méi)有看到手機上的美化效果。

如果服務(wù)器返回的是Json格式或者XML,也可以切換到對應的頁(yè)面進(jìn)行預覽查看。
開(kāi)始抓?。?br /> 1、擁有微信公眾號
登錄微信公眾號,在菜單欄:素材管理—>新建素材,出現如下頁(yè)面

F12查看網(wǎng)絡(luò ),點(diǎn)擊圖中位置

公眾號和user-Agent的cookies如下

Fakeid和token獲取如下:
querylist采集微信公眾號文章(puppeteer實(shí)戰:爬取搜狗微信搜索的公眾號文章并寫(xiě)入Excel )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 368 次瀏覽 ? 2021-09-11 08:12
)
在上一本書(shū)中提到,使用puppeteer庫進(jìn)行截圖操作只是簡(jiǎn)單的展示了puppeteer的特性和基本用法。這次我們來(lái)談?wù)勈褂胮uppeteer抓取頁(yè)面數據并寫(xiě)入Excel。
Puppeteer實(shí)戰:抓取搜狗微信搜索到的公眾號文章,寫(xiě)入Excel
背景一:搜狗搜索現在有了根據關(guān)鍵詞查詢(xún)微信公眾號文章的功能,而我們要做的就是爬下指定關(guān)鍵詞的文章,因為這個(gè)需求來(lái)自我 來(lái)自公司業(yè)務(wù)部,所以為了方便同學(xué)們操作查看,還需要把爬取的數據放到Excel中。
用過(guò)之后,感覺(jué)這個(gè)東西并不復雜,只要懂API就行。我認為復雜的是需要考慮各種基本情況。
首先一般網(wǎng)站已經(jīng)進(jìn)行了防爬處理。我們需要以合理的方式繞過(guò)它。比如搜狗搜索就是。一開(kāi)始,我打算讀取a標簽的href屬性,然后直接在瀏覽器中打開(kāi)鏈接。但是在嘗試之后,我發(fā)現我能夠做到這一點(diǎn)。估計搜狗做了一些反爬行動(dòng)。這樣做將報告 IP 異常。所以我放棄了,使用puppeteer的page.click方法來(lái)解決這個(gè)問(wèn)題,因為puppeteer本質(zhì)上是通過(guò)模擬真實(shí)用戶(hù)的點(diǎn)擊操作來(lái)實(shí)現的,所以不會(huì )受到反爬機制的影響。
另外一個(gè)是因為爬蟲(chóng)是微信文章,我們還需要考慮微信文章本身的一些情況,比如文章被發(fā)布者刪除或移動(dòng),文章被舉報,或者這個(gè)文章時(shí)分享另一篇文章文章Wait...
總之,我覺(jué)得用puppeteer寫(xiě)的爬蟲(chóng)腳本跟業(yè)務(wù)是強耦合的,所以我個(gè)人覺(jué)得代碼本身沒(méi)有參考意義。不過(guò)還是可以看看自己在寫(xiě)過(guò)程中遇到的各種奇怪的問(wèn)題,或許可以為大家解決遇到的問(wèn)題提供一些思路。
完整代碼如下:
exportExcel 導出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章標題", "文章URL", "作者名(公眾號)", "發(fā)布日期", "內容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 寫(xiě)xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("寫(xiě)入成功!");
});
}
}; 查看全部
querylist采集微信公眾號文章(puppeteer實(shí)戰:爬取搜狗微信搜索的公眾號文章并寫(xiě)入Excel
)
在上一本書(shū)中提到,使用puppeteer庫進(jìn)行截圖操作只是簡(jiǎn)單的展示了puppeteer的特性和基本用法。這次我們來(lái)談?wù)勈褂胮uppeteer抓取頁(yè)面數據并寫(xiě)入Excel。
Puppeteer實(shí)戰:抓取搜狗微信搜索到的公眾號文章,寫(xiě)入Excel
背景一:搜狗搜索現在有了根據關(guān)鍵詞查詢(xún)微信公眾號文章的功能,而我們要做的就是爬下指定關(guān)鍵詞的文章,因為這個(gè)需求來(lái)自我 來(lái)自公司業(yè)務(wù)部,所以為了方便同學(xué)們操作查看,還需要把爬取的數據放到Excel中。
用過(guò)之后,感覺(jué)這個(gè)東西并不復雜,只要懂API就行。我認為復雜的是需要考慮各種基本情況。
首先一般網(wǎng)站已經(jīng)進(jìn)行了防爬處理。我們需要以合理的方式繞過(guò)它。比如搜狗搜索就是。一開(kāi)始,我打算讀取a標簽的href屬性,然后直接在瀏覽器中打開(kāi)鏈接。但是在嘗試之后,我發(fā)現我能夠做到這一點(diǎn)。估計搜狗做了一些反爬行動(dòng)。這樣做將報告 IP 異常。所以我放棄了,使用puppeteer的page.click方法來(lái)解決這個(gè)問(wèn)題,因為puppeteer本質(zhì)上是通過(guò)模擬真實(shí)用戶(hù)的點(diǎn)擊操作來(lái)實(shí)現的,所以不會(huì )受到反爬機制的影響。
另外一個(gè)是因為爬蟲(chóng)是微信文章,我們還需要考慮微信文章本身的一些情況,比如文章被發(fā)布者刪除或移動(dòng),文章被舉報,或者這個(gè)文章時(shí)分享另一篇文章文章Wait...
總之,我覺(jué)得用puppeteer寫(xiě)的爬蟲(chóng)腳本跟業(yè)務(wù)是強耦合的,所以我個(gè)人覺(jué)得代碼本身沒(méi)有參考意義。不過(guò)還是可以看看自己在寫(xiě)過(guò)程中遇到的各種奇怪的問(wèn)題,或許可以為大家解決遇到的問(wèn)題提供一些思路。
完整代碼如下:
exportExcel 導出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章標題", "文章URL", "作者名(公眾號)", "發(fā)布日期", "內容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 寫(xiě)xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("寫(xiě)入成功!");
});
}
};
querylist采集微信公眾號文章(如何抓取微信公眾號的所有文章 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 373 次瀏覽 ? 2021-09-07 17:59
)
準備階段
為了實(shí)現這個(gè)爬蟲(chóng),我們需要使用以下工具
另外,這個(gè)爬蟲(chóng)程序使用了微信公眾號后臺編輯素材接口。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要有一個(gè)官方帳號。
圖1
正式開(kāi)始
我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
圖2
接下來(lái),按 F12,打開(kāi) Chrome 的開(kāi)發(fā)者工具,然后選擇網(wǎng)絡(luò )
圖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 requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求無(wú)效。我們需要在requests中設置headers參數,并傳入Cookie和User-Agent來(lái)模擬登錄
由于頭信息的內容每次都會(huì )變化,所以我把這些內容放在一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后閱讀
# 讀取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
appmsgid 是每條推文的唯一標識符,aid 是每條推文的唯一標識符。
圖6
其實(shí)除了cookies,URL中的token參數也會(huì )用來(lái)限制爬蟲(chóng),所以上面代碼的輸出很可能是{'base_resp': {'ret': 200040,'err_msg ':'無(wú)效的 csrf 令牌'}}
接下來(lái),我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取所有文章 JSON 并保存。
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['cookie'],
"User-Agent": config['user_agent']
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
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()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的內容中為空則結束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
在上面的代碼中,我還在“wechat.yaml”文件中存儲了fakeid和token。這是因為 fakeid 是每個(gè)公眾號的唯一標識符,令牌會(huì )經(jīng)常變化。這個(gè)信息可以通過(guò)解析URL獲取,也可以在開(kāi)發(fā)者工具中查看
圖7
爬取一段時(shí)間后,會(huì )遇到以下問(wèn)題
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此時(shí)在公眾號后臺嘗試插入超鏈接時(shí),會(huì )遇到如下提示
圖8
這是公眾號的流量限制,通常需要等待30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,你可能需要申請多個(gè)公眾號,可能需要對抗微信公眾號登錄系統,或者你可能需要設置代理池。
但是我不需要工業(yè)級的爬蟲(chóng),我只想爬取自己的公眾號信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,運行。我不想用自己的興趣挑戰別人的工作。
最后,將結果保存為 JSON 格式。
# 保存結果為JSON
json_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))
或者提取文章identifier、標題、網(wǎng)址、發(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 = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部
querylist采集微信公眾號文章(如何抓取微信公眾號的所有文章
)
準備階段
為了實(shí)現這個(gè)爬蟲(chóng),我們需要使用以下工具
另外,這個(gè)爬蟲(chóng)程序使用了微信公眾號后臺編輯素材接口。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要有一個(gè)官方帳號。
圖1
正式開(kāi)始
我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
圖2
接下來(lái),按 F12,打開(kāi) Chrome 的開(kāi)發(fā)者工具,然后選擇網(wǎng)絡(luò )
圖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 requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求無(wú)效。我們需要在requests中設置headers參數,并傳入Cookie和User-Agent來(lái)模擬登錄
由于頭信息的內容每次都會(huì )變化,所以我把這些內容放在一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后閱讀
# 讀取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
appmsgid 是每條推文的唯一標識符,aid 是每條推文的唯一標識符。
圖6
其實(shí)除了cookies,URL中的token參數也會(huì )用來(lái)限制爬蟲(chóng),所以上面代碼的輸出很可能是{'base_resp': {'ret': 200040,'err_msg ':'無(wú)效的 csrf 令牌'}}
接下來(lái),我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取所有文章 JSON 并保存。
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['cookie'],
"User-Agent": config['user_agent']
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
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()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的內容中為空則結束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
在上面的代碼中,我還在“wechat.yaml”文件中存儲了fakeid和token。這是因為 fakeid 是每個(gè)公眾號的唯一標識符,令牌會(huì )經(jīng)常變化。這個(gè)信息可以通過(guò)解析URL獲取,也可以在開(kāi)發(fā)者工具中查看
圖7
爬取一段時(shí)間后,會(huì )遇到以下問(wèn)題
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此時(shí)在公眾號后臺嘗試插入超鏈接時(shí),會(huì )遇到如下提示
圖8
這是公眾號的流量限制,通常需要等待30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,你可能需要申請多個(gè)公眾號,可能需要對抗微信公眾號登錄系統,或者你可能需要設置代理池。
但是我不需要工業(yè)級的爬蟲(chóng),我只想爬取自己的公眾號信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,運行。我不想用自己的興趣挑戰別人的工作。
最后,將結果保存為 JSON 格式。
# 保存結果為JSON
json_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))
或者提取文章identifier、標題、網(wǎng)址、發(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 = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))
querylist采集微信公眾號文章( IOP出版社與Charlesworth集團合作成功研發(fā)“文章追蹤”功能 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 230 次瀏覽 ? 2021-09-07 02:17
IOP出版社與Charlesworth集團合作成功研發(fā)“文章追蹤”功能
)
IOP Publishing 微信公眾號新推出“文章tracking”功能
2020 年 11 月 27 日加布??里埃爾
此處提供此頁(yè)面的英文版本
近期,IOP Publishing與Charlesworth Group合作,成功將Charlesworth自主研發(fā)的微信產(chǎn)品——“文章tracking”功能納入“IOP Publishing”微信公眾號功能菜單?,F在,所有向IOP Press期刊投稿的中國作者都可以通過(guò)微信使用公眾號“文章tracking”功能,實(shí)時(shí)查看文章投稿狀態(tài)。以前,作者只能登錄IOP Science網(wǎng)站查看文章?tīng)顟B(tài)。
通過(guò)Charlesworth Group提供的技術(shù)支持,來(lái)自中國的作者可以在公眾號提交文章ID,立即獲得文章的狀態(tài)信息。使用微信追蹤文章大大降低了中國用戶(hù)在國外訪(fǎng)問(wèn)網(wǎng)站時(shí)可能遇到的速度和連接問(wèn)題。同時(shí),將“文章tracking”功能納入微信,大大提升了中國作者社區的用戶(hù)體驗,助力“IOP出版社”公眾號成為中國作者獲取信息的重要平臺和服務(wù)。
“文章tracking”功能的網(wǎng)關(guān)由 Charlesworth Group 開(kāi)發(fā)。該技術(shù)獲得了 2020 年出版業(yè) ALPSP 創(chuàng )新獎的提名??梢詫l(fā)布者自己的平臺和后臺系統集成到微信中,并提供營(yíng)銷(xiāo)工具和分析儀表盤(pán),讓發(fā)布者可以管理其微信公眾號的方方面面。
查爾斯沃思集團首席執行官邁克爾·埃文斯表示:“IOP Publishing 在中國擁有廣泛的客戶(hù)群。通過(guò)與查爾斯沃思集團合作開(kāi)發(fā)該技術(shù)解決方案,作者可以從“IOP Publishing”的微信公眾號獲取信息。更多服務(wù)。通過(guò)整合‘文章tracking’,IOP Press的中國作者可以獲得更好的用戶(hù)體驗,并與其他已添加此功能的出版商一起在公眾號中享受微信查看文章方便快捷狀態(tài)?!?br /> 操作指南第一步
查看全部
querylist采集微信公眾號文章(
IOP出版社與Charlesworth集團合作成功研發(fā)“文章追蹤”功能
)
IOP Publishing 微信公眾號新推出“文章tracking”功能
2020 年 11 月 27 日加布??里埃爾

此處提供此頁(yè)面的英文版本
近期,IOP Publishing與Charlesworth Group合作,成功將Charlesworth自主研發(fā)的微信產(chǎn)品——“文章tracking”功能納入“IOP Publishing”微信公眾號功能菜單?,F在,所有向IOP Press期刊投稿的中國作者都可以通過(guò)微信使用公眾號“文章tracking”功能,實(shí)時(shí)查看文章投稿狀態(tài)。以前,作者只能登錄IOP Science網(wǎng)站查看文章?tīng)顟B(tài)。
通過(guò)Charlesworth Group提供的技術(shù)支持,來(lái)自中國的作者可以在公眾號提交文章ID,立即獲得文章的狀態(tài)信息。使用微信追蹤文章大大降低了中國用戶(hù)在國外訪(fǎng)問(wèn)網(wǎng)站時(shí)可能遇到的速度和連接問(wèn)題。同時(shí),將“文章tracking”功能納入微信,大大提升了中國作者社區的用戶(hù)體驗,助力“IOP出版社”公眾號成為中國作者獲取信息的重要平臺和服務(wù)。
“文章tracking”功能的網(wǎng)關(guān)由 Charlesworth Group 開(kāi)發(fā)。該技術(shù)獲得了 2020 年出版業(yè) ALPSP 創(chuàng )新獎的提名??梢詫l(fā)布者自己的平臺和后臺系統集成到微信中,并提供營(yíng)銷(xiāo)工具和分析儀表盤(pán),讓發(fā)布者可以管理其微信公眾號的方方面面。
查爾斯沃思集團首席執行官邁克爾·埃文斯表示:“IOP Publishing 在中國擁有廣泛的客戶(hù)群。通過(guò)與查爾斯沃思集團合作開(kāi)發(fā)該技術(shù)解決方案,作者可以從“IOP Publishing”的微信公眾號獲取信息。更多服務(wù)。通過(guò)整合‘文章tracking’,IOP Press的中國作者可以獲得更好的用戶(hù)體驗,并與其他已添加此功能的出版商一起在公眾號中享受微信查看文章方便快捷狀態(tài)?!?br /> 操作指南第一步

querylist采集微信公眾號文章(搜狗微信中會(huì )怎么樣?小編講解思路及講解方法)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 216 次瀏覽 ? 2021-09-07 02:12
這個(gè)文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接。小編覺(jué)得還不錯?,F在分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
本文主要講解思路,代碼部分請自行解決
獲取搜狗微信當天信息排名
指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
登錄微信公眾號鏈接獲取cookie信息
由于微信公眾平臺模擬登錄未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息
固定鏈接可以在這里轉換
代碼部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快導致需要輸入驗證碼
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公眾號文章permanent鏈接的詳細內容。更多詳情請關(guān)注Gxl其他相關(guān)文章! 查看全部
querylist采集微信公眾號文章(搜狗微信中會(huì )怎么樣?小編講解思路及講解方法)
這個(gè)文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接。小編覺(jué)得還不錯?,F在分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
本文主要講解思路,代碼部分請自行解決
獲取搜狗微信當天信息排名
指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
登錄微信公眾號鏈接獲取cookie信息
由于微信公眾平臺模擬登錄未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息




固定鏈接可以在這里轉換
代碼部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快導致需要輸入驗證碼
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公眾號文章permanent鏈接的詳細內容。更多詳情請關(guān)注Gxl其他相關(guān)文章!
querylist采集微信公眾號文章(騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 179 次瀏覽 ? 2021-09-06 16:06
querylist采集微信公眾號文章,一般需要反爬蟲(chóng)掃描文章末尾二維碼進(jìn)行反爬蟲(chóng),文章鏈接為文章正文href,圖片為文章一部分。在微信后臺放入本頁(yè)面地址即可。代碼如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid從0開(kāi)始遞增,微信id為i13)scanner:微信反爬蟲(chóng)采集系統分析文章頁(yè)面,與app端進(jìn)行對比,并取出我們需要采集到文章列表model:用于爬取分析文章信息,已獲取第一個(gè)按鈕text+#,鼠標移動(dòng)到text里可以獲取到實(shí)際字符,點(diǎn)擊text進(jìn)行識別即可獲取text信息keyword:獲取上標取出下標即為分析文章條目,獲取上標得到頁(yè)面中所有的內容,點(diǎn)擊text進(jìn)行獲取條目類(lèi)別contentboolean注冊安卓版注冊完成以后需要用vuerouter注冊安卓瀏覽器,在手機登錄openinstall微信后臺,獲取安卓瀏覽器keywordid,取出同名detail標簽model對應分析軟件:appium,免費開(kāi)源工具,可自定義綁定工具,fiddler調試工具部署公眾號,獲取二維碼,打開(kāi)后臺就可以獲取獲取到微信公眾號的列表secondlife類(lèi),進(jìn)行分析。
appium+vuerouter
請先把爬蟲(chóng)分析功能能力提升一下。
#騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案,最后還是appium的微信采集功能最強大。但是為什么最后還是選擇了appium,而不是webdriver呢?因為我非常喜歡appium,與其它機器學(xué)習工具相比,使用appium非常容易上手,只要會(huì )計算機基礎就可以用它來(lái)實(shí)現復雜的機器學(xué)習功能。騰訊開(kāi)發(fā)的proactive.js很好用,用得也很順手。
還有它不止是采集微信公眾號文章信息,我還發(fā)現它已經(jīng)開(kāi)始支持抓取企業(yè)的店鋪、知乎等多個(gè)平臺的公眾號。并且proactive.js在中國市場(chǎng)幾乎是免費的。 查看全部
querylist采集微信公眾號文章(騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案)
querylist采集微信公眾號文章,一般需要反爬蟲(chóng)掃描文章末尾二維碼進(jìn)行反爬蟲(chóng),文章鏈接為文章正文href,圖片為文章一部分。在微信后臺放入本頁(yè)面地址即可。代碼如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid從0開(kāi)始遞增,微信id為i13)scanner:微信反爬蟲(chóng)采集系統分析文章頁(yè)面,與app端進(jìn)行對比,并取出我們需要采集到文章列表model:用于爬取分析文章信息,已獲取第一個(gè)按鈕text+#,鼠標移動(dòng)到text里可以獲取到實(shí)際字符,點(diǎn)擊text進(jìn)行識別即可獲取text信息keyword:獲取上標取出下標即為分析文章條目,獲取上標得到頁(yè)面中所有的內容,點(diǎn)擊text進(jìn)行獲取條目類(lèi)別contentboolean注冊安卓版注冊完成以后需要用vuerouter注冊安卓瀏覽器,在手機登錄openinstall微信后臺,獲取安卓瀏覽器keywordid,取出同名detail標簽model對應分析軟件:appium,免費開(kāi)源工具,可自定義綁定工具,fiddler調試工具部署公眾號,獲取二維碼,打開(kāi)后臺就可以獲取獲取到微信公眾號的列表secondlife類(lèi),進(jìn)行分析。
appium+vuerouter
請先把爬蟲(chóng)分析功能能力提升一下。
#騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案,最后還是appium的微信采集功能最強大。但是為什么最后還是選擇了appium,而不是webdriver呢?因為我非常喜歡appium,與其它機器學(xué)習工具相比,使用appium非常容易上手,只要會(huì )計算機基礎就可以用它來(lái)實(shí)現復雜的機器學(xué)習功能。騰訊開(kāi)發(fā)的proactive.js很好用,用得也很順手。
還有它不止是采集微信公眾號文章信息,我還發(fā)現它已經(jīng)開(kāi)始支持抓取企業(yè)的店鋪、知乎等多個(gè)平臺的公眾號。并且proactive.js在中國市場(chǎng)幾乎是免費的。
querylist采集微信公眾號文章(ios微信公眾號文章數據可視化千里之行始于足下)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 141 次瀏覽 ? 2021-09-06 14:01
querylist采集微信公眾號文章內容時(shí),需要到微信公眾號后臺的后臺歷史消息里查找自己需要的歷史文章,前期使用websocket后臺自帶的,很慢,沒(méi)有收到定期發(fā)送的消息,網(wǎng)上也有很多方法嘗試,常用方法如下:1.用socket,同一ip多次查詢(xún)(每次次間隔3秒),然后用sendblock傳回消息2.用xmlhttprequest動(dòng)態(tài)網(wǎng)頁(yè)獲取-querylist.html,設置頭信息,然后傳回消息。如果時(shí)間和語(yǔ)言允許,java還是用tomcat服務(wù)器作為后臺,同一ip多次查詢(xún)也可以。
ios微信公眾號文章數據可視化爬蟲(chóng)
千里之行始于足下。websocket是一個(gè)關(guān)于網(wǎng)絡(luò )傳輸的協(xié)議。采用網(wǎng)絡(luò )連接時(shí),數據傳輸可靠性非常高。你的微信公眾號不是第一個(gè)采用這個(gè)協(xié)議來(lái)作為關(guān)系數據的。你上哪里發(fā)請求呢?服務(wù)器上并沒(méi)有對應的開(kāi)源協(xié)議。推薦你c#和mysql使用websocket(我自己調用的-xinaya),數據傳輸沒(méi)問(wèn)題??梢院?jiǎn)單的基于php或者.net做網(wǎng)頁(yè)上部分信息來(lái)交互。
我這里有,部分免費。
微信公眾號文章文章鏈接:
有代碼可以使用canvas畫(huà)圖
使用websocket、xmlhttprequest、socket
公眾號文章的基本模型可以歸納為如下幾種:json串,這里主要指公眾號一般后臺自動(dòng)生成,比如昵稱(chēng)、賬號、關(guān)注號、點(diǎn)贊數、轉發(fā)數,用json格式收到后推送到前端。文章id,一般由兩個(gè)或者兩個(gè)以上的json對象構成,用來(lái)收到推送消息,一般會(huì )存在你的域名里,通過(guò)id獲取該字段。文章簡(jiǎn)介,一般用個(gè)json對象記錄,大致可以用datetime類(lèi)類(lèi)型進(jìn)行記錄。
推送訂閱號消息,推送公眾號菜單,通過(guò)event的方式。推送訂閱號消息,推送微信群消息,推送電話(huà)聯(lián)系人消息,推送好友消息,推送通知消息。公眾號文章的文章主體信息:標題、開(kāi)頭、中間、尾聲、確認完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。 查看全部
querylist采集微信公眾號文章(ios微信公眾號文章數據可視化千里之行始于足下)
querylist采集微信公眾號文章內容時(shí),需要到微信公眾號后臺的后臺歷史消息里查找自己需要的歷史文章,前期使用websocket后臺自帶的,很慢,沒(méi)有收到定期發(fā)送的消息,網(wǎng)上也有很多方法嘗試,常用方法如下:1.用socket,同一ip多次查詢(xún)(每次次間隔3秒),然后用sendblock傳回消息2.用xmlhttprequest動(dòng)態(tài)網(wǎng)頁(yè)獲取-querylist.html,設置頭信息,然后傳回消息。如果時(shí)間和語(yǔ)言允許,java還是用tomcat服務(wù)器作為后臺,同一ip多次查詢(xún)也可以。
ios微信公眾號文章數據可視化爬蟲(chóng)
千里之行始于足下。websocket是一個(gè)關(guān)于網(wǎng)絡(luò )傳輸的協(xié)議。采用網(wǎng)絡(luò )連接時(shí),數據傳輸可靠性非常高。你的微信公眾號不是第一個(gè)采用這個(gè)協(xié)議來(lái)作為關(guān)系數據的。你上哪里發(fā)請求呢?服務(wù)器上并沒(méi)有對應的開(kāi)源協(xié)議。推薦你c#和mysql使用websocket(我自己調用的-xinaya),數據傳輸沒(méi)問(wèn)題??梢院?jiǎn)單的基于php或者.net做網(wǎng)頁(yè)上部分信息來(lái)交互。
我這里有,部分免費。
微信公眾號文章文章鏈接:
有代碼可以使用canvas畫(huà)圖
使用websocket、xmlhttprequest、socket
公眾號文章的基本模型可以歸納為如下幾種:json串,這里主要指公眾號一般后臺自動(dòng)生成,比如昵稱(chēng)、賬號、關(guān)注號、點(diǎn)贊數、轉發(fā)數,用json格式收到后推送到前端。文章id,一般由兩個(gè)或者兩個(gè)以上的json對象構成,用來(lái)收到推送消息,一般會(huì )存在你的域名里,通過(guò)id獲取該字段。文章簡(jiǎn)介,一般用個(gè)json對象記錄,大致可以用datetime類(lèi)類(lèi)型進(jìn)行記錄。
推送訂閱號消息,推送公眾號菜單,通過(guò)event的方式。推送訂閱號消息,推送微信群消息,推送電話(huà)聯(lián)系人消息,推送好友消息,推送通知消息。公眾號文章的文章主體信息:標題、開(kāi)頭、中間、尾聲、確認完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。
querylist采集微信公眾號文章(sock優(yōu)采云采集器微信公眾號文章網(wǎng)頁(yè),ctrlist和urllist的功能)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 159 次瀏覽 ? 2021-09-06 07:02
querylist采集微信公眾號文章網(wǎng)頁(yè),最后轉化為詞典存到analyzer中。taglist采集關(guān)鍵詞到單個(gè)analyzer進(jìn)行排序。因為詞典一次只能抓取一個(gè)網(wǎng)頁(yè),所以都是按照最常見(jiàn)的、排名最靠前的句子抓取的。相當于一個(gè)抓取網(wǎng)頁(yè)的熱詞池。ctrlist采集微信小程序實(shí)時(shí)的ctr、點(diǎn)擊流網(wǎng)頁(yè)數據。tcplist、urllist采集已經(jīng)抓取到的資源地址進(jìn)行統計。
ctrlist就是抓取微信開(kāi)發(fā)平臺提供的源碼。taglist采集已經(jīng)抓取到的資源地址進(jìn)行統計。taglist還有web服務(wù)端。ctrlist基本是集成了taglist和urllist的功能。
可以參考我這篇總結。
socket抓取分頁(yè)列表站:analyzer/click.py爬蟲(chóng)語(yǔ)言:python,c++,
ctrlist主要用于各大前端公司采集js關(guān)鍵字,
我用的是一款叫微信開(kāi)發(fā)抓取工具,抓取的方式很簡(jiǎn)單,將微信公眾號的文章網(wǎng)頁(yè)網(wǎng)址發(fā)送到我們公眾號服務(wù)器上,然后我們就可以在公眾號文章網(wǎng)頁(yè)源代碼里面獲取到相應的數據。抓取過(guò)程簡(jiǎn)單,
看自己的需求,比如快速抓取一個(gè)頁(yè)面的代碼:ctrlist:這個(gè)可以做一個(gè)單頁(yè)面項目ctrlistr:只抓取了前端, 查看全部
querylist采集微信公眾號文章(sock優(yōu)采云采集器微信公眾號文章網(wǎng)頁(yè),ctrlist和urllist的功能)
querylist采集微信公眾號文章網(wǎng)頁(yè),最后轉化為詞典存到analyzer中。taglist采集關(guān)鍵詞到單個(gè)analyzer進(jìn)行排序。因為詞典一次只能抓取一個(gè)網(wǎng)頁(yè),所以都是按照最常見(jiàn)的、排名最靠前的句子抓取的。相當于一個(gè)抓取網(wǎng)頁(yè)的熱詞池。ctrlist采集微信小程序實(shí)時(shí)的ctr、點(diǎn)擊流網(wǎng)頁(yè)數據。tcplist、urllist采集已經(jīng)抓取到的資源地址進(jìn)行統計。
ctrlist就是抓取微信開(kāi)發(fā)平臺提供的源碼。taglist采集已經(jīng)抓取到的資源地址進(jìn)行統計。taglist還有web服務(wù)端。ctrlist基本是集成了taglist和urllist的功能。
可以參考我這篇總結。
socket抓取分頁(yè)列表站:analyzer/click.py爬蟲(chóng)語(yǔ)言:python,c++,
ctrlist主要用于各大前端公司采集js關(guān)鍵字,
我用的是一款叫微信開(kāi)發(fā)抓取工具,抓取的方式很簡(jiǎn)單,將微信公眾號的文章網(wǎng)頁(yè)網(wǎng)址發(fā)送到我們公眾號服務(wù)器上,然后我們就可以在公眾號文章網(wǎng)頁(yè)源代碼里面獲取到相應的數據。抓取過(guò)程簡(jiǎn)單,
看自己的需求,比如快速抓取一個(gè)頁(yè)面的代碼:ctrlist:這個(gè)可以做一個(gè)單頁(yè)面項目ctrlistr:只抓取了前端,
querylist采集微信公眾號文章(更新日志v20200520修復一個(gè)嚴重問(wèn)題導致批量黑白直播下載官網(wǎng)使用)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 417 次瀏覽 ? 2021-09-06 03:30
微信公眾號文章batch黑白直播下載官網(wǎng)軟件是一款可以幫助用戶(hù)批量處理采集微信公號內容的工具,支持文章和圖片批量黑白直播下載官網(wǎng),支持按關(guān)鍵詞相關(guān)內容搜索 黑白直播下載官網(wǎng),功能非常強大,有需要的用戶(hù)不要錯過(guò),歡迎使用黑白直播下載官網(wǎng)!
使用說(shuō)明
1、在設置中心開(kāi)啟該功能。
2、按照提示重啟軟件,確認安裝證書(shū)。
3、登錄電腦微信,選擇公眾號,查看歷史或點(diǎn)擊文章文章,返回軟件查看軟件底部提醒是否變紅(紅色表示在后臺工作
進(jìn)行中)。
4、黑白直播官網(wǎng)下載完成后自動(dòng)完成。
注意事項
1、只能一一獲取微信公眾號,請勿打開(kāi)更多軟件,否則會(huì )出現意想不到的問(wèn)題!
2、 如果發(fā)現網(wǎng)絡(luò )不通,請正確關(guān)閉軟件。如果還是不行,請重新打開(kāi)軟件幾次,然后再關(guān)閉。
3、背景分析文章的文章數和黑白直播下載官網(wǎng)的文章數大多不一致,因為部分文章已經(jīng)被刪除或者屏蔽了,但是找到的文章數量總是很大
從黑白直播官網(wǎng)下載的文章數。
4、如有問(wèn)題,請一次性詳細描述清楚,并將失敗的請求鏈接或操作步驟提供給論壇或我的博客。
更新日志
v20200520
修復了導致批量黑白直播下載官網(wǎng)無(wú)法下載黑白直播官網(wǎng)的嚴重問(wèn)題。之前的微信文章
只有黑白直播下載官網(wǎng)原創(chuàng )文章
v20200428
修復評論交互時(shí)顯示“作者”的問(wèn)題
修復標題重復點(diǎn)
修復搜狗搜索特殊字符編碼問(wèn)題
v20200426
添加格式化的json并輸出到文件
修復之前的公眾號文章無(wú)法從黑白直播官網(wǎng)下載的問(wèn)題 查看全部
querylist采集微信公眾號文章(更新日志v20200520修復一個(gè)嚴重問(wèn)題導致批量黑白直播下載官網(wǎng)使用)
微信公眾號文章batch黑白直播下載官網(wǎng)軟件是一款可以幫助用戶(hù)批量處理采集微信公號內容的工具,支持文章和圖片批量黑白直播下載官網(wǎng),支持按關(guān)鍵詞相關(guān)內容搜索 黑白直播下載官網(wǎng),功能非常強大,有需要的用戶(hù)不要錯過(guò),歡迎使用黑白直播下載官網(wǎng)!

使用說(shuō)明
1、在設置中心開(kāi)啟該功能。
2、按照提示重啟軟件,確認安裝證書(shū)。
3、登錄電腦微信,選擇公眾號,查看歷史或點(diǎn)擊文章文章,返回軟件查看軟件底部提醒是否變紅(紅色表示在后臺工作
進(jìn)行中)。
4、黑白直播官網(wǎng)下載完成后自動(dòng)完成。
注意事項
1、只能一一獲取微信公眾號,請勿打開(kāi)更多軟件,否則會(huì )出現意想不到的問(wèn)題!
2、 如果發(fā)現網(wǎng)絡(luò )不通,請正確關(guān)閉軟件。如果還是不行,請重新打開(kāi)軟件幾次,然后再關(guān)閉。
3、背景分析文章的文章數和黑白直播下載官網(wǎng)的文章數大多不一致,因為部分文章已經(jīng)被刪除或者屏蔽了,但是找到的文章數量總是很大
從黑白直播官網(wǎng)下載的文章數。
4、如有問(wèn)題,請一次性詳細描述清楚,并將失敗的請求鏈接或操作步驟提供給論壇或我的博客。
更新日志
v20200520
修復了導致批量黑白直播下載官網(wǎng)無(wú)法下載黑白直播官網(wǎng)的嚴重問(wèn)題。之前的微信文章
只有黑白直播下載官網(wǎng)原創(chuàng )文章
v20200428
修復評論交互時(shí)顯示“作者”的問(wèn)題
修復標題重復點(diǎn)
修復搜狗搜索特殊字符編碼問(wèn)題
v20200426
添加格式化的json并輸出到文件
修復之前的公眾號文章無(wú)法從黑白直播官網(wǎng)下載的問(wèn)題
querylist采集微信公眾號文章(解放雙手【軟件特色】搜索支持搜索文章一鍵下載)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2021-09-04 18:23
13、支持搜索文章一鍵下載、自定義選擇下載、多線(xiàn)程下載全部;
14、支持驗證碼自動(dòng)編碼,解放雙手
[軟件功能]
1、搜索所有微信公眾號文章至關(guān)鍵詞,支持搜索指定時(shí)間段內的相關(guān)內容,支持文章內容導出word、pdf、excle格式;
2、一鍵采集指定公眾號文章的所有歷史記錄,支持文章內容批量導出word和pdf格式(文章原排版,文字+圖片);
3、可以按照發(fā)布時(shí)間、標題、公眾號對關(guān)鍵詞search相關(guān)文章內容進(jìn)行排序,支持標題去重,搜索結果二次搜索;
4、關(guān)鍵詞search文章支持通過(guò)公眾號和關(guān)鍵詞屏蔽,所有不想看的內容都過(guò)濾掉,支持拖拽選擇,一鍵屏蔽;
5、內置驗證碼自動(dòng)打印,自動(dòng)IP切換功能,解放雙手,操作更便捷;
6、文章Content 頁(yè)面支持關(guān)鍵詞搜索,快速查明是否需要文章;
7、保存搜索關(guān)鍵詞history,搜索過(guò)去關(guān)鍵詞,直接從搜索歷史中拉取關(guān)鍵詞,輸入更方便;
8、內置大量快捷鍵,勾選文章,搜索內容更方便、更人性化;
9、一鍵搜索所有微信公眾號文章,按時(shí)間段搜索;
10、支持公眾號關(guān)鍵詞filtering,以及title關(guān)鍵詞filtering;
11、支持查詢(xún)單個(gè)公眾號的所有海量發(fā)帖記錄;
12、支持搜索結果、公眾號、時(shí)間、標題排序;
13、支持一鍵導出搜索結果,方便查看。 查看全部
querylist采集微信公眾號文章(解放雙手【軟件特色】搜索支持搜索文章一鍵下載)
13、支持搜索文章一鍵下載、自定義選擇下載、多線(xiàn)程下載全部;
14、支持驗證碼自動(dòng)編碼,解放雙手

[軟件功能]
1、搜索所有微信公眾號文章至關(guān)鍵詞,支持搜索指定時(shí)間段內的相關(guān)內容,支持文章內容導出word、pdf、excle格式;
2、一鍵采集指定公眾號文章的所有歷史記錄,支持文章內容批量導出word和pdf格式(文章原排版,文字+圖片);
3、可以按照發(fā)布時(shí)間、標題、公眾號對關(guān)鍵詞search相關(guān)文章內容進(jìn)行排序,支持標題去重,搜索結果二次搜索;
4、關(guān)鍵詞search文章支持通過(guò)公眾號和關(guān)鍵詞屏蔽,所有不想看的內容都過(guò)濾掉,支持拖拽選擇,一鍵屏蔽;
5、內置驗證碼自動(dòng)打印,自動(dòng)IP切換功能,解放雙手,操作更便捷;
6、文章Content 頁(yè)面支持關(guān)鍵詞搜索,快速查明是否需要文章;
7、保存搜索關(guān)鍵詞history,搜索過(guò)去關(guān)鍵詞,直接從搜索歷史中拉取關(guān)鍵詞,輸入更方便;
8、內置大量快捷鍵,勾選文章,搜索內容更方便、更人性化;
9、一鍵搜索所有微信公眾號文章,按時(shí)間段搜索;
10、支持公眾號關(guān)鍵詞filtering,以及title關(guān)鍵詞filtering;
11、支持查詢(xún)單個(gè)公眾號的所有海量發(fā)帖記錄;
12、支持搜索結果、公眾號、時(shí)間、標題排序;
13、支持一鍵導出搜索結果,方便查看。
querylist采集微信公眾號文章(querylist采集微信公眾號文章大小為6m,方案根據需要調整)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-09-03 16:03
querylist采集微信公眾號文章大小為6m,方案根據需要調整。內容采集:每個(gè)公眾號對應的文章都可以采集下來(lái),利用requests.session或者requests庫即可抓取。內容爬?。簩ξ恼逻M(jìn)行信息提取、選擇、插入保存等等,利用workerman即可實(shí)現。會(huì )同步push到服務(wù)器上,另外抓取公眾號的話(huà)還可以做二次更新。
文章采集通過(guò)mysql實(shí)現。這種方式對數據的要求較低,雖然抓取的時(shí)候有一定的延遲,但是每個(gè)微信公眾號的文章數量有限,通過(guò)人工進(jìn)行抓取就ok。對于內容爬取,每個(gè)微信公眾號的文章數量有限,那么就需要盡可能多的建表,實(shí)現不同的爬取,好提取一些具有共性的特征信息,比如這里采集的一些詞,那么他們的分類(lèi)標簽是屬于哪一類(lèi)的,每個(gè)分類(lèi)標簽有哪些人數關(guān)注人數等等。
這樣的話(huà)就能夠實(shí)現為每個(gè)公眾號對應的采集,甚至每個(gè)公眾號里面,有的文章數量較少。為了大家方便閱讀,這里通過(guò)爬取到的詞做統計,看看詞頻,然后根據那些詞看看是不是能夠比較方便的得到他們的分類(lèi)。爬取到詞語(yǔ)一覽表這一篇大概就對爬取到的詞進(jìn)行了統計,這些詞都是比較相關(guān)的,對于公眾號一般經(jīng)常讀的或者一般常寫(xiě)的可以抓取到較為準確的詞匯。
對于爬取到的詞進(jìn)行了一個(gè)下標統計:根據上圖統計,可以看到,目前一共爬取了大概4000左右的詞,每個(gè)詞的上下最多只爬取了7個(gè)節點(diǎn),而且還不是最大的。下一篇主要寫(xiě)實(shí)現內容爬取,如果爬取到的詞類(lèi)型比較多,還要分詞的話(huà),還有點(diǎn)麻煩。所以,就用代碼實(shí)現一下吧。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章大小為6m,方案根據需要調整)
querylist采集微信公眾號文章大小為6m,方案根據需要調整。內容采集:每個(gè)公眾號對應的文章都可以采集下來(lái),利用requests.session或者requests庫即可抓取。內容爬?。簩ξ恼逻M(jìn)行信息提取、選擇、插入保存等等,利用workerman即可實(shí)現。會(huì )同步push到服務(wù)器上,另外抓取公眾號的話(huà)還可以做二次更新。
文章采集通過(guò)mysql實(shí)現。這種方式對數據的要求較低,雖然抓取的時(shí)候有一定的延遲,但是每個(gè)微信公眾號的文章數量有限,通過(guò)人工進(jìn)行抓取就ok。對于內容爬取,每個(gè)微信公眾號的文章數量有限,那么就需要盡可能多的建表,實(shí)現不同的爬取,好提取一些具有共性的特征信息,比如這里采集的一些詞,那么他們的分類(lèi)標簽是屬于哪一類(lèi)的,每個(gè)分類(lèi)標簽有哪些人數關(guān)注人數等等。
這樣的話(huà)就能夠實(shí)現為每個(gè)公眾號對應的采集,甚至每個(gè)公眾號里面,有的文章數量較少。為了大家方便閱讀,這里通過(guò)爬取到的詞做統計,看看詞頻,然后根據那些詞看看是不是能夠比較方便的得到他們的分類(lèi)。爬取到詞語(yǔ)一覽表這一篇大概就對爬取到的詞進(jìn)行了統計,這些詞都是比較相關(guān)的,對于公眾號一般經(jīng)常讀的或者一般常寫(xiě)的可以抓取到較為準確的詞匯。
對于爬取到的詞進(jìn)行了一個(gè)下標統計:根據上圖統計,可以看到,目前一共爬取了大概4000左右的詞,每個(gè)詞的上下最多只爬取了7個(gè)節點(diǎn),而且還不是最大的。下一篇主要寫(xiě)實(shí)現內容爬取,如果爬取到的詞類(lèi)型比較多,還要分詞的話(huà),還有點(diǎn)麻煩。所以,就用代碼實(shí)現一下吧。
querylist采集微信公眾號文章(知乎專(zhuān)題微信公眾號內容的批量采集與應用,延續這份分享精神 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 175 次瀏覽 ? 2021-09-03 07:29
)
:///
參考知乎thematic微信公眾號采集批號及申請,作者:飯口團隊負責人
原作者(方口團隊負責人)有句話(huà):我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
這個(gè)系列的文章也是為了延續這種分享精神!
這個(gè)文章系列是基于知乎話(huà)題教程的一步步實(shí)現過(guò)程,在實(shí)現過(guò)程中踩到了一些坑。
原理介紹這里不再贅述,可以參考知乎topic。
代碼改進(jìn)前的準備
原作者使用的是php環(huán)境。如果有能力,可以嘗試其他語(yǔ)言來(lái)實(shí)現,比如python、java等,不過(guò)原作者已經(jīng)給出了部分php代碼,這里也實(shí)現了。
所以你要準備一個(gè)php環(huán)境。 win下推薦使用優(yōu)采云集成環(huán)境,如wamp、xamp、phpstudy等,因為之前電腦里就有wamp環(huán)境,可以直接使用。先配置虛擬域名。但是下面的代碼需要改成自己對應的路徑。配置虛擬域名的教程可以參考我的另一篇文章php本地虛擬域名配置和端口的一些折騰。這里假設我配置的虛擬域名是
修改 rule_default.js 代碼
下面僅給出了一些示例。其他人做同樣的修改(如果沒(méi)有配置虛擬域名,需要將域名改為路徑訪(fǎng)問(wèn),如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函數replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
創(chuàng )建數據庫和數據表
在完善php代碼之前,我們還需要先創(chuàng )建數據庫和數據表。好消息是組長(cháng)已經(jīng)給出了數據表的創(chuàng )建sql語(yǔ)句。修改了一些語(yǔ)法錯誤和關(guān)鍵字重復
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公眾號表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公眾號唯一標識biz',
`collect` int(11) DEFAULT 1 COMMENT '記錄采集時(shí)間的時(shí)間戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章對應的公眾號biz',
`field_id` int(11) NOT NULL COMMENT '微信定義的一個(gè)id,每條文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章標題',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章編碼,防止文章出現emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '閱讀原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面圖片',
`is_multi` int(11) NOT NULL COMMENT '是否多圖文',
`is_top` int(11) NOT NULL COMMENT '是否頭條',
`datetime` int(11) NOT NULL COMMENT '文章時(shí)間戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章閱讀量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章點(diǎn)贊量',
PRIMARY KEY (`id`)
) ;
采集隊列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '讀取中標記',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登錄phpMyAdmin后臺,語(yǔ)言可設置為中文。
注意排序規則設置為utf8_general_ci。
一一執行sql生成數據表。
待續......待續......
希望這個(gè)文章能給你帶來(lái)知識和樂(lè )趣。喜歡博主文章可以加博主好友
如果你有好的文章,也可以給博主投稿。
查看全部
querylist采集微信公眾號文章(知乎專(zhuān)題微信公眾號內容的批量采集與應用,延續這份分享精神
)
:///
參考知乎thematic微信公眾號采集批號及申請,作者:飯口團隊負責人
原作者(方口團隊負責人)有句話(huà):我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
這個(gè)系列的文章也是為了延續這種分享精神!
這個(gè)文章系列是基于知乎話(huà)題教程的一步步實(shí)現過(guò)程,在實(shí)現過(guò)程中踩到了一些坑。
原理介紹這里不再贅述,可以參考知乎topic。
代碼改進(jìn)前的準備
原作者使用的是php環(huán)境。如果有能力,可以嘗試其他語(yǔ)言來(lái)實(shí)現,比如python、java等,不過(guò)原作者已經(jīng)給出了部分php代碼,這里也實(shí)現了。
所以你要準備一個(gè)php環(huán)境。 win下推薦使用優(yōu)采云集成環(huán)境,如wamp、xamp、phpstudy等,因為之前電腦里就有wamp環(huán)境,可以直接使用。先配置虛擬域名。但是下面的代碼需要改成自己對應的路徑。配置虛擬域名的教程可以參考我的另一篇文章php本地虛擬域名配置和端口的一些折騰。這里假設我配置的虛擬域名是
修改 rule_default.js 代碼
下面僅給出了一些示例。其他人做同樣的修改(如果沒(méi)有配置虛擬域名,需要將域名改為路徑訪(fǎng)問(wèn),如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函數replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
創(chuàng )建數據庫和數據表
在完善php代碼之前,我們還需要先創(chuàng )建數據庫和數據表。好消息是組長(cháng)已經(jīng)給出了數據表的創(chuàng )建sql語(yǔ)句。修改了一些語(yǔ)法錯誤和關(guān)鍵字重復
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公眾號表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公眾號唯一標識biz',
`collect` int(11) DEFAULT 1 COMMENT '記錄采集時(shí)間的時(shí)間戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章對應的公眾號biz',
`field_id` int(11) NOT NULL COMMENT '微信定義的一個(gè)id,每條文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章標題',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章編碼,防止文章出現emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '閱讀原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面圖片',
`is_multi` int(11) NOT NULL COMMENT '是否多圖文',
`is_top` int(11) NOT NULL COMMENT '是否頭條',
`datetime` int(11) NOT NULL COMMENT '文章時(shí)間戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章閱讀量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章點(diǎn)贊量',
PRIMARY KEY (`id`)
) ;
采集隊列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '讀取中標記',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登錄phpMyAdmin后臺,語(yǔ)言可設置為中文。
注意排序規則設置為utf8_general_ci。
一一執行sql生成數據表。
待續......待續......
希望這個(gè)文章能給你帶來(lái)知識和樂(lè )趣。喜歡博主文章可以加博主好友

如果你有好的文章,也可以給博主投稿。

querylist采集微信公眾號文章( 微信公眾號文章的GET及方法(二)-)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 179 次瀏覽 ? 2021-09-03 02:08
微信公眾號文章的GET及方法(二)-)
Python 微信公眾號文章crawl
一.Idea
我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
從界面我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
二.接口分析
微信公眾號訪(fǎng)問(wèn):
參數:
action=search_biz
開(kāi)始=0
計數=5
query=官方賬號
token=每個(gè)賬戶(hù)對應的token值
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
所以在這個(gè)界面我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。
獲取公眾號對應的文章界面:
參數:
action=list_ex
開(kāi)始=0
計數=5
fakeid=MjM5NDAwMTA2MA==
type=9
查詢(xún)=
令牌=557131216
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
我們需要在這個(gè)接口中獲取的值是上一步的token和fakeid,這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以獲取到微信公眾號文章的數據了。
三.實(shí)現第一步:
首先我們需要通過(guò)selenium模擬登錄,然后獲取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.請求獲取微信公眾號文章接口,獲取我們需要的文章data
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數據。
我們已經(jīng)實(shí)現了微信公眾號文章的抓取。
四.Summary
通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,當我們在循環(huán)中獲取文章時(shí),一定要設置一個(gè)延遲時(shí)間,否則賬號很容易被封,獲取不到返回的數據。 查看全部
querylist采集微信公眾號文章(
微信公眾號文章的GET及方法(二)-)
Python 微信公眾號文章crawl
一.Idea
我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面


從界面我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
二.接口分析
微信公眾號訪(fǎng)問(wèn):
參數:
action=search_biz
開(kāi)始=0
計數=5
query=官方賬號
token=每個(gè)賬戶(hù)對應的token值
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
所以在這個(gè)界面我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。

獲取公眾號對應的文章界面:
參數:
action=list_ex
開(kāi)始=0
計數=5
fakeid=MjM5NDAwMTA2MA==
type=9
查詢(xún)=
令牌=557131216
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
我們需要在這個(gè)接口中獲取的值是上一步的token和fakeid,這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以獲取到微信公眾號文章的數據了。

三.實(shí)現第一步:
首先我們需要通過(guò)selenium模擬登錄,然后獲取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.請求獲取微信公眾號文章接口,獲取我們需要的文章data
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數據。
我們已經(jīng)實(shí)現了微信公眾號文章的抓取。
四.Summary
通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,當我們在循環(huán)中獲取文章時(shí),一定要設置一個(gè)延遲時(shí)間,否則賬號很容易被封,獲取不到返回的數據。
querylist采集微信公眾號文章(微信公眾號爬取程序分享搞成java的難點(diǎn)在于)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2021-09-03 02:08
最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號爬取的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。需要使用微信的瀏覽器(獲取微信客戶(hù)端的補充參數才能獲取其他平臺的Open),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到的細節問(wèn)題比較多,分享給大家。
系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
nodejs下載地址:我下載的是windows版本,直接下載安裝即可。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。如果在cmd中執行anyproxy --root,就會(huì )安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />
記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
準備工作到此基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,就可以在剛剛打開(kāi)的web界面看到anyproxy抓取到的數據了:
在上面的紅框中,有一個(gè)微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
如果一切順利,你就可以下去了。
這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(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),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(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() !== ""){
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è)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標通過(guò)js向下滑動(dòng)觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是一直存在一個(gè)問(wèn)題,就是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。 查看全部
querylist采集微信公眾號文章(微信公眾號爬取程序分享搞成java的難點(diǎn)在于)
最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號爬取的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。需要使用微信的瀏覽器(獲取微信客戶(hù)端的補充參數才能獲取其他平臺的Open),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到的細節問(wèn)題比較多,分享給大家。
系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
nodejs下載地址:我下載的是windows版本,直接下載安裝即可。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。如果在cmd中執行anyproxy --root,就會(huì )安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />
記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
準備工作到此基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,就可以在剛剛打開(kāi)的web界面看到anyproxy抓取到的數據了:
在上面的紅框中,有一個(gè)微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
如果一切順利,你就可以下去了。
這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(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),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(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() !== ""){
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è)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標通過(guò)js向下滑動(dòng)觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是一直存在一個(gè)問(wèn)題,就是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。
querylist采集微信公眾號文章(Python批量抓取公眾號文章 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 467 次瀏覽 ? 2021-09-02 11:04
)
PS:如需Python學(xué)習資料,可點(diǎn)擊下方鏈接自行獲取
Python免費學(xué)習資料和群交流答案點(diǎn)擊加入
爬取的方法有很多種。今天給大家分享一個(gè)更簡(jiǎn)單的方法,就是通過(guò)微信公眾號后臺的“超鏈接”功能進(jìn)行爬取??赡苡械呐笥堰€沒(méi)有接觸過(guò)微信公眾號后臺,這里放個(gè)圖讓大家了解一下
這里有的朋友可能會(huì )說(shuō),我后臺無(wú)法登錄公眾號,怎么辦? ? ?
沒(méi)關(guān)系,雖然每個(gè)爬蟲(chóng)的目的都是為了得到我們想要的結果,但這不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)是爬取過(guò)程,也就是我們如何獲取目標數據,所以無(wú)法公開(kāi)登錄 看完這篇文章后,后臺的朋友可能無(wú)法獲取到最終爬取結果,但看完這篇文章你也會(huì )有所收獲。
一、前期準備
選擇要抓取的目標公眾號
點(diǎn)擊超鏈接-進(jìn)入編輯超鏈接界面-輸入我們需要抓取的搜索目標公眾號
今天我們以“數據分析”公眾號的爬取為例給大家介紹
點(diǎn)擊公眾號查看每個(gè)文章對應的標題信息
我們這次爬蟲(chóng)的目標是獲取文章的標題和對應的鏈接。
二、開(kāi)始爬取
爬蟲(chóng)的三個(gè)步驟:
1、請求網(wǎng)頁(yè)
首先導入我們使用這個(gè)爬蟲(chóng)需要的第三方庫
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
找到我們抓取的目標數據所在的位置,點(diǎn)擊搜索得到的包,獲取目標URL和請求頭信息
請求網(wǎng)頁(yè)
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
這里的請求頭信息必須加上cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
網(wǎng)頁(yè)的請求結果如下圖所示。紅框標記了我們需要的文章title 和文章 鏈接
2、分析網(wǎng)頁(yè)
從網(wǎng)頁(yè)響應結果我們可以看到,每個(gè)文章的標題和鏈接分別位于“title”標簽和“cover”標簽后面,所以我們可以直接使用正則表達式來(lái)解析它們
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
解析后的結果如下
3、保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
到此這個(gè)爬蟲(chóng)就完成了,我們來(lái)看看最終的結果
完整代碼
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
# 請求網(wǎng)頁(yè)
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
for i in range(2):#設置for循環(huán)實(shí)現翻頁(yè),爬取多頁(yè)內容,這里range括號內的參數可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
# 解析網(wǎng)頁(yè)
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
# print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
# 保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防出發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5 查看全部
querylist采集微信公眾號文章(Python批量抓取公眾號文章
)
PS:如需Python學(xué)習資料,可點(diǎn)擊下方鏈接自行獲取
Python免費學(xué)習資料和群交流答案點(diǎn)擊加入
爬取的方法有很多種。今天給大家分享一個(gè)更簡(jiǎn)單的方法,就是通過(guò)微信公眾號后臺的“超鏈接”功能進(jìn)行爬取??赡苡械呐笥堰€沒(méi)有接觸過(guò)微信公眾號后臺,這里放個(gè)圖讓大家了解一下

這里有的朋友可能會(huì )說(shuō),我后臺無(wú)法登錄公眾號,怎么辦? ? ?
沒(méi)關(guān)系,雖然每個(gè)爬蟲(chóng)的目的都是為了得到我們想要的結果,但這不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)是爬取過(guò)程,也就是我們如何獲取目標數據,所以無(wú)法公開(kāi)登錄 看完這篇文章后,后臺的朋友可能無(wú)法獲取到最終爬取結果,但看完這篇文章你也會(huì )有所收獲。
一、前期準備
選擇要抓取的目標公眾號
點(diǎn)擊超鏈接-進(jìn)入編輯超鏈接界面-輸入我們需要抓取的搜索目標公眾號
今天我們以“數據分析”公眾號的爬取為例給大家介紹

點(diǎn)擊公眾號查看每個(gè)文章對應的標題信息

我們這次爬蟲(chóng)的目標是獲取文章的標題和對應的鏈接。
二、開(kāi)始爬取
爬蟲(chóng)的三個(gè)步驟:
1、請求網(wǎng)頁(yè)
首先導入我們使用這個(gè)爬蟲(chóng)需要的第三方庫
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
找到我們抓取的目標數據所在的位置,點(diǎn)擊搜索得到的包,獲取目標URL和請求頭信息

請求網(wǎng)頁(yè)
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
這里的請求頭信息必須加上cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
網(wǎng)頁(yè)的請求結果如下圖所示。紅框標記了我們需要的文章title 和文章 鏈接

2、分析網(wǎng)頁(yè)
從網(wǎng)頁(yè)響應結果我們可以看到,每個(gè)文章的標題和鏈接分別位于“title”標簽和“cover”標簽后面,所以我們可以直接使用正則表達式來(lái)解析它們
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
解析后的結果如下

3、保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
到此這個(gè)爬蟲(chóng)就完成了,我們來(lái)看看最終的結果

完整代碼
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
# 請求網(wǎng)頁(yè)
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
for i in range(2):#設置for循環(huán)實(shí)現翻頁(yè),爬取多頁(yè)內容,這里range括號內的參數可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
# 解析網(wǎng)頁(yè)
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
# print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
# 保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防出發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5
querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2021-08-31 22:22
)
微信公眾號采集二級目錄生成工具是巧妙偽原創(chuàng )來(lái)?yè)鬩微信公眾號采集+巧妙偽原創(chuàng )+多cms版本的第三版,這個(gè)軟件可以批量偽原創(chuàng )然后批量偽原創(chuàng )檢查。這是非常值得注意的。請先在本地環(huán)境中測試。另外,這個(gè)軟件不能自動(dòng)編碼。
類(lèi)似軟件
版本說(shuō)明
軟件地址
軟件說(shuō)明
1.本軟件的作用:
為優(yōu)采云站長(cháng)準備的,也適合養站的人站群
2.運行過(guò)程:
采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新為網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
3.與上一版本對比:和之前一樣,微信公眾號文章采集,之后使用采集偽原創(chuàng )。不知道這個(gè)算不算偽原創(chuàng ),不過(guò)確實(shí)達到了偽原創(chuàng )的效果,
這個(gè)新版本偽原創(chuàng )的玩法很巧妙。是翻譯。先從中文翻譯成英文,再從英文翻譯成中文??上б惶旆g量有限,可以自行更改IP地址。 (其實(shí)不適合更新太多,一天幾條就可以了,一般如果是老站的話(huà)。關(guān)鍵詞可以快速重新排名)
如何使用
新手站長(cháng)不推薦這個(gè),因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了問(wèn)題。然后來(lái)找我。我也很弱,我也是菜鳥(niǎo)。我不想回答簡(jiǎn)單的問(wèn)題。我不會(huì )復雜。
不是你不問(wèn)我,而是希望你先百度一下,不要再問(wèn)了。有時(shí)同樣的問(wèn)題可能會(huì )被問(wèn)很多次,就會(huì )有脾氣。我是這個(gè)德行的人,請不要摘下來(lái)。還是希望和大家一起進(jìn)步。
查看全部
querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲
)
微信公眾號采集二級目錄生成工具是巧妙偽原創(chuàng )來(lái)?yè)鬩微信公眾號采集+巧妙偽原創(chuàng )+多cms版本的第三版,這個(gè)軟件可以批量偽原創(chuàng )然后批量偽原創(chuàng )檢查。這是非常值得注意的。請先在本地環(huán)境中測試。另外,這個(gè)軟件不能自動(dòng)編碼。
類(lèi)似軟件
版本說(shuō)明
軟件地址
軟件說(shuō)明
1.本軟件的作用:
為優(yōu)采云站長(cháng)準備的,也適合養站的人站群
2.運行過(guò)程:
采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新為網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
3.與上一版本對比:和之前一樣,微信公眾號文章采集,之后使用采集偽原創(chuàng )。不知道這個(gè)算不算偽原創(chuàng ),不過(guò)確實(shí)達到了偽原創(chuàng )的效果,
這個(gè)新版本偽原創(chuàng )的玩法很巧妙。是翻譯。先從中文翻譯成英文,再從英文翻譯成中文??上б惶旆g量有限,可以自行更改IP地址。 (其實(shí)不適合更新太多,一天幾條就可以了,一般如果是老站的話(huà)。關(guān)鍵詞可以快速重新排名)
如何使用
新手站長(cháng)不推薦這個(gè),因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了問(wèn)題。然后來(lái)找我。我也很弱,我也是菜鳥(niǎo)。我不想回答簡(jiǎn)單的問(wèn)題。我不會(huì )復雜。
不是你不問(wèn)我,而是希望你先百度一下,不要再問(wèn)了。有時(shí)同樣的問(wèn)題可能會(huì )被問(wèn)很多次,就會(huì )有脾氣。我是這個(gè)德行的人,請不要摘下來(lái)。還是希望和大家一起進(jìn)步。

querylist采集微信公眾號文章(querylist采集微信公眾號文章采集-微信號采集軟件教程)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 169 次瀏覽 ? 2021-08-31 08:02
querylist采集微信公眾號文章采集-微信公眾號采集軟件是針對微信公眾號進(jìn)行內容抓取的工具,為快速采集微信公眾號文章提供方便。具體請看下面的教程:準備工作安裝并使用:pipinstallworkerget,抓取微信公眾號文章可以從這里下載安裝環(huán)境matplotlibimportpyplotsetup()創(chuàng )建項目并編譯(暫時(shí)先不編譯)#configpyplot.__version__為獲取所需項目的version信息mats_version="1.0"將本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打開(kāi)剛才編譯生成的users/username/.txt文件mats_version="1.0"#template指定一個(gè)或多個(gè)預處理的目錄mats_version_template="[+]pyglass"#當然也可以其他的打開(kāi)users/username/.txt文件并下一步。
點(diǎn)擊下一步,將指定的兩個(gè)選項拖到configure階段。#configsite接下來(lái)才可以開(kāi)始編譯config=pyplot.__version__+mats_version#編譯config_align=["left","right"]將前端配置文件放在同一文件夾下,如果要先編譯文件會(huì )將它在服務(wù)器的預處理目錄下添加絕對路徑,如果要在服務(wù)器編譯文件才需要指定文件路徑。
#windows-win="windows/config"安裝flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#編譯config_alias=["flex-directory","httpcompiler-directory"]#加載到python環(huán)境中如果你的python版本超過(guò)了python的3.6,請使用更新版本。
如果你使用的是3.6,請使用下面的命令:sudoapt-getupdatesudoapt-getupgrade檢查是否完成#gunbuild檢查下flex-directory已安裝,如果沒(méi)有則需要編譯flex-directory為你的系統c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章采集-微信號采集軟件教程)
querylist采集微信公眾號文章采集-微信公眾號采集軟件是針對微信公眾號進(jìn)行內容抓取的工具,為快速采集微信公眾號文章提供方便。具體請看下面的教程:準備工作安裝并使用:pipinstallworkerget,抓取微信公眾號文章可以從這里下載安裝環(huán)境matplotlibimportpyplotsetup()創(chuàng )建項目并編譯(暫時(shí)先不編譯)#configpyplot.__version__為獲取所需項目的version信息mats_version="1.0"將本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打開(kāi)剛才編譯生成的users/username/.txt文件mats_version="1.0"#template指定一個(gè)或多個(gè)預處理的目錄mats_version_template="[+]pyglass"#當然也可以其他的打開(kāi)users/username/.txt文件并下一步。
點(diǎn)擊下一步,將指定的兩個(gè)選項拖到configure階段。#configsite接下來(lái)才可以開(kāi)始編譯config=pyplot.__version__+mats_version#編譯config_align=["left","right"]將前端配置文件放在同一文件夾下,如果要先編譯文件會(huì )將它在服務(wù)器的預處理目錄下添加絕對路徑,如果要在服務(wù)器編譯文件才需要指定文件路徑。
#windows-win="windows/config"安裝flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#編譯config_alias=["flex-directory","httpcompiler-directory"]#加載到python環(huán)境中如果你的python版本超過(guò)了python的3.6,請使用更新版本。
如果你使用的是3.6,請使用下面的命令:sudoapt-getupdatesudoapt-getupgrade檢查是否完成#gunbuild檢查下flex-directory已安裝,如果沒(méi)有則需要編譯flex-directory為你的系統c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。
querylist采集微信公眾號文章(querylist采集微信公眾號文章內容流量,樓上說(shuō)的很清楚了)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 162 次瀏覽 ? 2021-08-29 18:02
querylist采集微信公眾號文章內容流量,
樓上說(shuō)的很清楚了。我補充一點(diǎn),將今日頭條的瀏覽數據導入web,對用戶(hù)進(jìn)行畫(huà)像,提高個(gè)性化推薦率。
我想知道你們具體怎么做的?我也做過(guò)今日頭條的圖文推薦系統。如果要完成公眾號的推薦,個(gè)人認為你們至少需要:基礎數據:頭條號的賬號信息,如頭條號id、簽約、健康度、粉絲量等。產(chǎn)品數據:今日頭條推薦算法的介紹,使用pdf版的論文會(huì )好一些?,F在已有今日頭條的平臺數據,可參考相關(guān)數據建立模型的準確率、召回率等指標,結合實(shí)際情況一起設計模型,根據實(shí)際情況對模型的泛化能力、特征工程等進(jìn)行微調。
模型交叉:比如在泛化能力較差時(shí)對其他數據使用,進(jìn)行特征交叉或者對某個(gè)數據進(jìn)行偏僻標簽,從而提高泛化能力。數據一般有:檢索、關(guān)注、公眾號歷史文章等。相關(guān)性、相似性:模型初期需要考慮特征間相關(guān)性,建立連續、相關(guān)、正負相關(guān)度不等權重特征表達式。對權重特征進(jìn)行聚類(lèi)等方式提高泛化能力。精準關(guān)鍵詞、轉發(fā)量、評論量、點(diǎn)贊量、粉絲量。
只做字節跳動(dòng)的話(huà),今日頭條可以說(shuō)是非常完整的一套產(chǎn)品矩陣。另外一方面,使用推薦系統從業(yè)者,很多都會(huì )注意到背后離不開(kāi)系統的底層架構的搭建。其中包括api接口,代碼開(kāi)發(fā),系統優(yōu)化,反饋系統以及業(yè)務(wù)的指導等。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章內容流量,樓上說(shuō)的很清楚了)
querylist采集微信公眾號文章內容流量,
樓上說(shuō)的很清楚了。我補充一點(diǎn),將今日頭條的瀏覽數據導入web,對用戶(hù)進(jìn)行畫(huà)像,提高個(gè)性化推薦率。
我想知道你們具體怎么做的?我也做過(guò)今日頭條的圖文推薦系統。如果要完成公眾號的推薦,個(gè)人認為你們至少需要:基礎數據:頭條號的賬號信息,如頭條號id、簽約、健康度、粉絲量等。產(chǎn)品數據:今日頭條推薦算法的介紹,使用pdf版的論文會(huì )好一些?,F在已有今日頭條的平臺數據,可參考相關(guān)數據建立模型的準確率、召回率等指標,結合實(shí)際情況一起設計模型,根據實(shí)際情況對模型的泛化能力、特征工程等進(jìn)行微調。
模型交叉:比如在泛化能力較差時(shí)對其他數據使用,進(jìn)行特征交叉或者對某個(gè)數據進(jìn)行偏僻標簽,從而提高泛化能力。數據一般有:檢索、關(guān)注、公眾號歷史文章等。相關(guān)性、相似性:模型初期需要考慮特征間相關(guān)性,建立連續、相關(guān)、正負相關(guān)度不等權重特征表達式。對權重特征進(jìn)行聚類(lèi)等方式提高泛化能力。精準關(guān)鍵詞、轉發(fā)量、評論量、點(diǎn)贊量、粉絲量。
只做字節跳動(dòng)的話(huà),今日頭條可以說(shuō)是非常完整的一套產(chǎn)品矩陣。另外一方面,使用推薦系統從業(yè)者,很多都會(huì )注意到背后離不開(kāi)系統的底層架構的搭建。其中包括api接口,代碼開(kāi)發(fā),系統優(yōu)化,反饋系統以及業(yè)務(wù)的指導等。
爬取微信公眾號怎么做?各種方法的匯總說(shuō)明
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2021-08-27 04:08
爬取微信公眾號怎么做?各種方法的匯總說(shuō)明
爬蟲(chóng)
我經(jīng)常有朋友在公眾號文章爬取方面需要幫助。這次我將各種方法做一個(gè)總結。
目前微信公眾號的抓取方式主要有以下三種:
通過(guò)爬取第三方公眾號文章聚網(wǎng)站并使用微信官方平臺引用文章接口。通過(guò)抓包程序,分析微信app界面通過(guò)第三方公眾號文章聚網(wǎng)站攀取訪(fǎng)問(wèn)公眾號文章
微信公眾號文章未提供搜外功能。直到2013年,微信投資搜狗后,搜狗搜索訪(fǎng)問(wèn)了微信公眾號數據。從此您可以通過(guò)搜狗搜索瀏覽或查詢(xún)相關(guān)公眾號和@。文章。
域名為:
搜狗微信
可以直接搜索公眾號或文章的關(guān)鍵詞。部分熱門(mén)公眾號及時(shí)更新,幾乎與微信同步。
公眾號搜索
所以,可以使用搜狗微信界面抓取一些熱門(mén)公眾號,但是有些小眾公眾號搜索不到,而且搜狗的反抓取機制更新更頻繁,獲取數據的界面變化更快,有經(jīng)常兩三個(gè)月就調整一次,這樣爬蟲(chóng)就容易掛了。這里,推薦使用selenium,爬得更省心。此外,搜狗對每個(gè)ip也有訪(fǎng)問(wèn)限制。訪(fǎng)問(wèn)太頻ip會(huì )被封鎖24小時(shí),需要購買(mǎi)ip池處理。
還有一些其他公眾號文章聚網(wǎng)站(比如門(mén)戶(hù)),也有更新不及時(shí)或者收錄的問(wèn)題。畢竟搜狗這個(gè)親兒子不好。通過(guò)微信公眾平臺引用文章interface
這個(gè)界面比較隱蔽,不能匿名訪(fǎng)問(wèn)。需要有官方賬號。最好注冊一個(gè)新的公眾號,以免被屏蔽。
先說(shuō)具體步驟:先登錄微信公眾號,進(jìn)入首頁(yè)選擇新群發(fā),然后點(diǎn)擊自建圖,在文章edit工具欄中找到超鏈接,如下圖:
點(diǎn)擊超鏈接
點(diǎn)擊這個(gè)超鏈接按鈕,會(huì )彈出一個(gè)對話(huà)框,選擇鏈接輸入法找到文章,如下圖:
找到文章
這里可以輸入公眾號名稱(chēng),回車(chē)后微信會(huì )返回匹配的公眾號列表,如下圖:
搜索公眾號
然后點(diǎn)擊你要搶的公眾號,就會(huì )顯示具體的文章列表,已經(jīng)是倒序了。最新的文章是第一個(gè)。如下圖:
文章List
微信的分頁(yè)機制比較奇怪。每個(gè)公眾號每個(gè)頁(yè)面顯示的數據項數量是不同的。分頁(yè)爬行時(shí)需要處理。
通過(guò)chrome分析網(wǎng)絡(luò )請求的數據,我們基本得到了我們想要的數據,文章鏈接、封面、發(fā)布日期、副標題等,如下圖:
網(wǎng)絡(luò )請求數據
好了,這個(gè)爬蟲(chóng)方法的原理講完了,下面開(kāi)始實(shí)際操作。
因為微信公眾平臺登錄驗證比較嚴格,輸入密碼后手機必須掃碼確認才能登錄,所以最好使用selenium進(jìn)行自動(dòng)化。具體微信界面的分析過(guò)程我就不一一列舉了,直接貼上代碼:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公眾號文章爬蟲(chóng)
'''
def __init__(self):
# 微信公眾號賬號
self.account = '286394973@qq.com'
# 微信公眾號密碼
self.pwd = 'lei4649861'
def create_driver(self):
'''
初始化 webdriver
'''
options = webdriver.ChromeOptions()
# 禁用gpu加速,防止出一些未知bug
options.add_argument('--disable-gpu')
# 這里我用 chromedriver 作為 webdriver
# 可以去 http://chromedriver.chromium.org/downloads 下載你的chrome對應版本
self.driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options)
# 設置一個(gè)隱性等待 5s
self.driver.implicitly_wait(5)
def log(self, msg):
'''
格式化打印
'''
print('------ %s ------' % msg)
def login(self):
'''
登錄拿 cookies
'''
try:
self.create_driver()
# 訪(fǎng)問(wèn)微信公眾平臺
self.driver.get('https://mp.weixin.qq.com/')
# 等待網(wǎng)頁(yè)加載完畢
time.sleep(3)
# 輸入賬號
self.driver.find_element_by_xpath("./*//input[@name='account']").clear()
self.driver.find_element_by_xpath("./*//input[@name='account']").send_keys(self.account)
# 輸入密碼
self.driver.find_element_by_xpath("./*//input[@name='password']").clear()
self.driver.find_element_by_xpath("./*//input[@name='password']").send_keys(self.pwd)
# 點(diǎn)擊登錄
self.driver.find_elements_by_class_name('btn_login')[0].click()
self.log("請拿手機掃碼二維碼登錄公眾號")
# 等待手機掃描
time.sleep(10)
self.log("登錄成功")
# 獲取cookies 然后保存到變量上,后面要用
self.cookies = dict([[x['name'], x['value']] for x in self.driver.get_cookies()])
except Exception as e:
traceback.print_exc()
finally:
# 退出 chorme
self.driver.quit()
def get_article(self, query=''):
try:
url = 'https://mp.weixin.qq.com'
# 設置headers
headers = {
"HOST": "mp.weixin.qq.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
}
# 登錄之后的微信公眾號首頁(yè)url變化為:https://mp.weixin.qq.com/cgi-b ... 51598,
# 從這里獲取token信息
response = requests.get(url=url, cookies=self.cookies)
token = re.findall(r'token=(\d+)', str(response.url))[0]
time.sleep(2)
self.log('正在查詢(xún)[ %s ]相關(guān)公眾號' % query)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
# 搜索微信公眾號接口需要傳入的參數,
# 有三個(gè)變量:微信公眾號token、隨機數random、搜索的微信公眾號名字
params = {
'action': 'search_biz',
'token': token,
'random': random.random(),
'query': query,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0',
'count': '5'
}
# 打開(kāi)搜索微信公眾號接口地址,需要傳入相關(guān)參數信息如:cookies、params、headers
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
# 取搜索結果中的第一個(gè)公眾號
lists = response.json().get('list')[0]
# 獲取這個(gè)公眾號的fakeid,后面爬取公眾號文章需要此字段
fakeid = lists.get('fakeid')
nickname = lists.get('nickname')
# 微信公眾號文章接口地址
search_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
# 搜索文章需要傳入幾個(gè)參數:登錄的公眾號token、要爬取文章的公眾號fakeid、隨機數random
params = {
'action': 'list_ex',
'token': token,
'random': random.random(),
'fakeid': fakeid,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0', # 不同頁(yè),此參數變化,變化規則為每頁(yè)加5
'count': '5',
'query': '',
'type': '9'
}
self.log('正在查詢(xún)公眾號[ %s ]相關(guān)文章' % nickname)
# 打開(kāi)搜索的微信公眾號文章列表頁(yè)
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
for per in response.json().get('app_msg_list', []):
print('title ---> %s' % per.get('title'))
print('link ---> %s' % per.get('link'))
# print('cover ---> %s' % per.get('cover'))
except Exception as e:
traceback.print_exc()
if __name__ == '__main__':
spider = Spider()
spider.login()
spider.get_article('python')
代碼僅供學(xué)習使用,沒(méi)有分頁(yè)查詢(xún)之類(lèi)的。
據網(wǎng)友介紹,這個(gè)界面也有訪(fǎng)問(wèn)頻率限制。一天幾百次不是問(wèn)題。如果訪(fǎng)問(wèn)速度過(guò)快或訪(fǎng)問(wèn)次數過(guò)多,將被封鎖 24 小時(shí)。 查看全部
爬取微信公眾號怎么做?各種方法的匯總說(shuō)明
爬蟲(chóng)
我經(jīng)常有朋友在公眾號文章爬取方面需要幫助。這次我將各種方法做一個(gè)總結。
目前微信公眾號的抓取方式主要有以下三種:
通過(guò)爬取第三方公眾號文章聚網(wǎng)站并使用微信官方平臺引用文章接口。通過(guò)抓包程序,分析微信app界面通過(guò)第三方公眾號文章聚網(wǎng)站攀取訪(fǎng)問(wèn)公眾號文章
微信公眾號文章未提供搜外功能。直到2013年,微信投資搜狗后,搜狗搜索訪(fǎng)問(wèn)了微信公眾號數據。從此您可以通過(guò)搜狗搜索瀏覽或查詢(xún)相關(guān)公眾號和@。文章。
域名為:
搜狗微信
可以直接搜索公眾號或文章的關(guān)鍵詞。部分熱門(mén)公眾號及時(shí)更新,幾乎與微信同步。
公眾號搜索
所以,可以使用搜狗微信界面抓取一些熱門(mén)公眾號,但是有些小眾公眾號搜索不到,而且搜狗的反抓取機制更新更頻繁,獲取數據的界面變化更快,有經(jīng)常兩三個(gè)月就調整一次,這樣爬蟲(chóng)就容易掛了。這里,推薦使用selenium,爬得更省心。此外,搜狗對每個(gè)ip也有訪(fǎng)問(wèn)限制。訪(fǎng)問(wèn)太頻ip會(huì )被封鎖24小時(shí),需要購買(mǎi)ip池處理。
還有一些其他公眾號文章聚網(wǎng)站(比如門(mén)戶(hù)),也有更新不及時(shí)或者收錄的問(wèn)題。畢竟搜狗這個(gè)親兒子不好。通過(guò)微信公眾平臺引用文章interface
這個(gè)界面比較隱蔽,不能匿名訪(fǎng)問(wèn)。需要有官方賬號。最好注冊一個(gè)新的公眾號,以免被屏蔽。
先說(shuō)具體步驟:先登錄微信公眾號,進(jìn)入首頁(yè)選擇新群發(fā),然后點(diǎn)擊自建圖,在文章edit工具欄中找到超鏈接,如下圖:
點(diǎn)擊超鏈接
點(diǎn)擊這個(gè)超鏈接按鈕,會(huì )彈出一個(gè)對話(huà)框,選擇鏈接輸入法找到文章,如下圖:
找到文章
這里可以輸入公眾號名稱(chēng),回車(chē)后微信會(huì )返回匹配的公眾號列表,如下圖:
搜索公眾號
然后點(diǎn)擊你要搶的公眾號,就會(huì )顯示具體的文章列表,已經(jīng)是倒序了。最新的文章是第一個(gè)。如下圖:
文章List
微信的分頁(yè)機制比較奇怪。每個(gè)公眾號每個(gè)頁(yè)面顯示的數據項數量是不同的。分頁(yè)爬行時(shí)需要處理。
通過(guò)chrome分析網(wǎng)絡(luò )請求的數據,我們基本得到了我們想要的數據,文章鏈接、封面、發(fā)布日期、副標題等,如下圖:
網(wǎng)絡(luò )請求數據
好了,這個(gè)爬蟲(chóng)方法的原理講完了,下面開(kāi)始實(shí)際操作。
因為微信公眾平臺登錄驗證比較嚴格,輸入密碼后手機必須掃碼確認才能登錄,所以最好使用selenium進(jìn)行自動(dòng)化。具體微信界面的分析過(guò)程我就不一一列舉了,直接貼上代碼:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公眾號文章爬蟲(chóng)
'''
def __init__(self):
# 微信公眾號賬號
self.account = '286394973@qq.com'
# 微信公眾號密碼
self.pwd = 'lei4649861'
def create_driver(self):
'''
初始化 webdriver
'''
options = webdriver.ChromeOptions()
# 禁用gpu加速,防止出一些未知bug
options.add_argument('--disable-gpu')
# 這里我用 chromedriver 作為 webdriver
# 可以去 http://chromedriver.chromium.org/downloads 下載你的chrome對應版本
self.driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options)
# 設置一個(gè)隱性等待 5s
self.driver.implicitly_wait(5)
def log(self, msg):
'''
格式化打印
'''
print('------ %s ------' % msg)
def login(self):
'''
登錄拿 cookies
'''
try:
self.create_driver()
# 訪(fǎng)問(wèn)微信公眾平臺
self.driver.get('https://mp.weixin.qq.com/')
# 等待網(wǎng)頁(yè)加載完畢
time.sleep(3)
# 輸入賬號
self.driver.find_element_by_xpath("./*//input[@name='account']").clear()
self.driver.find_element_by_xpath("./*//input[@name='account']").send_keys(self.account)
# 輸入密碼
self.driver.find_element_by_xpath("./*//input[@name='password']").clear()
self.driver.find_element_by_xpath("./*//input[@name='password']").send_keys(self.pwd)
# 點(diǎn)擊登錄
self.driver.find_elements_by_class_name('btn_login')[0].click()
self.log("請拿手機掃碼二維碼登錄公眾號")
# 等待手機掃描
time.sleep(10)
self.log("登錄成功")
# 獲取cookies 然后保存到變量上,后面要用
self.cookies = dict([[x['name'], x['value']] for x in self.driver.get_cookies()])
except Exception as e:
traceback.print_exc()
finally:
# 退出 chorme
self.driver.quit()
def get_article(self, query=''):
try:
url = 'https://mp.weixin.qq.com'
# 設置headers
headers = {
"HOST": "mp.weixin.qq.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
}
# 登錄之后的微信公眾號首頁(yè)url變化為:https://mp.weixin.qq.com/cgi-b ... 51598,
# 從這里獲取token信息
response = requests.get(url=url, cookies=self.cookies)
token = re.findall(r'token=(\d+)', str(response.url))[0]
time.sleep(2)
self.log('正在查詢(xún)[ %s ]相關(guān)公眾號' % query)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
# 搜索微信公眾號接口需要傳入的參數,
# 有三個(gè)變量:微信公眾號token、隨機數random、搜索的微信公眾號名字
params = {
'action': 'search_biz',
'token': token,
'random': random.random(),
'query': query,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0',
'count': '5'
}
# 打開(kāi)搜索微信公眾號接口地址,需要傳入相關(guān)參數信息如:cookies、params、headers
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
# 取搜索結果中的第一個(gè)公眾號
lists = response.json().get('list')[0]
# 獲取這個(gè)公眾號的fakeid,后面爬取公眾號文章需要此字段
fakeid = lists.get('fakeid')
nickname = lists.get('nickname')
# 微信公眾號文章接口地址
search_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
# 搜索文章需要傳入幾個(gè)參數:登錄的公眾號token、要爬取文章的公眾號fakeid、隨機數random
params = {
'action': 'list_ex',
'token': token,
'random': random.random(),
'fakeid': fakeid,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0', # 不同頁(yè),此參數變化,變化規則為每頁(yè)加5
'count': '5',
'query': '',
'type': '9'
}
self.log('正在查詢(xún)公眾號[ %s ]相關(guān)文章' % nickname)
# 打開(kāi)搜索的微信公眾號文章列表頁(yè)
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
for per in response.json().get('app_msg_list', []):
print('title ---> %s' % per.get('title'))
print('link ---> %s' % per.get('link'))
# print('cover ---> %s' % per.get('cover'))
except Exception as e:
traceback.print_exc()
if __name__ == '__main__':
spider = Spider()
spider.login()
spider.get_article('python')
代碼僅供學(xué)習使用,沒(méi)有分頁(yè)查詢(xún)之類(lèi)的。
據網(wǎng)友介紹,這個(gè)界面也有訪(fǎng)問(wèn)頻率限制。一天幾百次不是問(wèn)題。如果訪(fǎng)問(wèn)速度過(guò)快或訪(fǎng)問(wèn)次數過(guò)多,將被封鎖 24 小時(shí)。
querylist采集微信公眾號文章(querylist采集微信公眾號文章實(shí)現了關(guān)鍵詞過(guò)濾及數據接口定制)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 155 次瀏覽 ? 2021-09-13 15:02
querylist采集微信公眾號文章,實(shí)現了每篇文章的單篇信息收集,并實(shí)現了相應的關(guān)鍵詞過(guò)濾及數據接口定制。-middleware實(shí)現上述功能,其實(shí)非常簡(jiǎn)單,就是通過(guò)js包裝相應的js,在微信公眾號進(jìn)行引入就可以做到了。另外,enjoyglobaljsresolve,這個(gè)是數據上傳器。
會(huì )有一個(gè)優(yōu)化空間可以讓正常人(如我)也可以公眾號轉碼大海撈針,但是只是很小一部分,因為微信方面根本沒(méi)有對公眾號做跨站請求的格式化。
我來(lái)解釋一下使用爬蟲(chóng)抓取是不是會(huì )破壞原有用戶(hù)關(guān)注的時(shí)間線(xiàn)規律,作為一個(gè)小白,我認為不會(huì )。首先應該沒(méi)有爬蟲(chóng)什么時(shí)候回去爬這個(gè)“答案列表”,也就是能不能找到所有未被編輯的答案。微信這一點(diǎn)上是有點(diǎn)欠考慮的,因為我覺(jué)得如果數據傳輸得太大了,這對微信是一種隱患,因為這讓它變得復雜而冗長(cháng),而且都是僵尸粉,就不要費那事了,最后一天的關(guān)注也會(huì )干擾微信閱讀。
正常來(lái)說(shuō),整個(gè)原生瀏覽器的chrome或ie訪(fǎng)問(wèn)時(shí)間軸是按照推送最早時(shí)間來(lái)的,這樣的話(huà)我們抓取正常用戶(hù)關(guān)注人的話(huà)得在100秒內進(jìn)行采集,但是這也有個(gè)小bug,我們大膽假設,如果微信是推送下午時(shí)間線(xiàn)的話(huà)就會(huì )麻煩的多,因為上午大部分人已經(jīng)不看了。但是我用過(guò)一個(gè)同學(xué)的一個(gè)神奇插件,可以清除本地的緩存,這樣就可以大大減少那些僵尸粉了,當然清除緩存本身肯定有問(wèn)題的,就會(huì )造成頁(yè)面被篡改,最后導致爬蟲(chóng)被屏蔽。
爬蟲(chóng)其實(shí)對用戶(hù)來(lái)說(shuō)是不是很麻煩,個(gè)人認為不是,各位大神可以借鑒一下:我用的插件是github-hi5881166/vczh:vczh.io現在覺(jué)得爬蟲(chóng)的整個(gè)思想和原理一樣,只不過(guò)用js編寫(xiě)而已。有機會(huì )寫(xiě)一寫(xiě)爬蟲(chóng),順便寫(xiě)一下完整的采集方案,歡迎關(guān)注!。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章實(shí)現了關(guān)鍵詞過(guò)濾及數據接口定制)
querylist采集微信公眾號文章,實(shí)現了每篇文章的單篇信息收集,并實(shí)現了相應的關(guān)鍵詞過(guò)濾及數據接口定制。-middleware實(shí)現上述功能,其實(shí)非常簡(jiǎn)單,就是通過(guò)js包裝相應的js,在微信公眾號進(jìn)行引入就可以做到了。另外,enjoyglobaljsresolve,這個(gè)是數據上傳器。
會(huì )有一個(gè)優(yōu)化空間可以讓正常人(如我)也可以公眾號轉碼大海撈針,但是只是很小一部分,因為微信方面根本沒(méi)有對公眾號做跨站請求的格式化。
我來(lái)解釋一下使用爬蟲(chóng)抓取是不是會(huì )破壞原有用戶(hù)關(guān)注的時(shí)間線(xiàn)規律,作為一個(gè)小白,我認為不會(huì )。首先應該沒(méi)有爬蟲(chóng)什么時(shí)候回去爬這個(gè)“答案列表”,也就是能不能找到所有未被編輯的答案。微信這一點(diǎn)上是有點(diǎn)欠考慮的,因為我覺(jué)得如果數據傳輸得太大了,這對微信是一種隱患,因為這讓它變得復雜而冗長(cháng),而且都是僵尸粉,就不要費那事了,最后一天的關(guān)注也會(huì )干擾微信閱讀。
正常來(lái)說(shuō),整個(gè)原生瀏覽器的chrome或ie訪(fǎng)問(wèn)時(shí)間軸是按照推送最早時(shí)間來(lái)的,這樣的話(huà)我們抓取正常用戶(hù)關(guān)注人的話(huà)得在100秒內進(jìn)行采集,但是這也有個(gè)小bug,我們大膽假設,如果微信是推送下午時(shí)間線(xiàn)的話(huà)就會(huì )麻煩的多,因為上午大部分人已經(jīng)不看了。但是我用過(guò)一個(gè)同學(xué)的一個(gè)神奇插件,可以清除本地的緩存,這樣就可以大大減少那些僵尸粉了,當然清除緩存本身肯定有問(wèn)題的,就會(huì )造成頁(yè)面被篡改,最后導致爬蟲(chóng)被屏蔽。
爬蟲(chóng)其實(shí)對用戶(hù)來(lái)說(shuō)是不是很麻煩,個(gè)人認為不是,各位大神可以借鑒一下:我用的插件是github-hi5881166/vczh:vczh.io現在覺(jué)得爬蟲(chóng)的整個(gè)思想和原理一樣,只不過(guò)用js編寫(xiě)而已。有機會(huì )寫(xiě)一寫(xiě)爬蟲(chóng),順便寫(xiě)一下完整的采集方案,歡迎關(guān)注!。
querylist采集微信公眾號文章(工具Python3+版本Fiddler下載地址(圖)下載)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 164 次瀏覽 ? 2021-09-11 08:14
代碼測試有效期至2019/03/08
微信爬蟲(chóng)步驟:
必需品:
我的微信公眾號Fiddler抓包工具Python 3+版
提琴手下載鏈接
HTTP 代理工具也稱(chēng)為抓包工具。主流的抓包工具是Windows平臺的Fiddler,macOS平臺的Charles,阿里開(kāi)源了一個(gè)叫AnyProxy的工具。它們的基本原理類(lèi)似,即通過(guò)在移動(dòng)客戶(hù)端上設置代理IP和端口,所有來(lái)自客戶(hù)端的HTTP和HTTPS請求都會(huì )通過(guò)代理工具。在代理工具中,您可以清楚地看到每個(gè)請求。然后可以分析詳細信息以找出每個(gè)請求的構造方式。搞清楚這些之后,我們就可以用Python來(lái)模擬發(fā)起請求了,然后就可以得到我們想要的數據了。
安裝包超過(guò)4M。配置前,首先確保您的手機和電腦在同一個(gè)局域網(wǎng)內。如果不在同一個(gè)局域網(wǎng)內,可以購買(mǎi)便攜式WiFi,在電腦上搭建一個(gè)極簡(jiǎn)的無(wú)線(xiàn)路由器。一路點(diǎn)擊下一步,完成安裝過(guò)程。
Fiddler 配置選擇工具> Fiddler 選項> 連接 Fiddler 的默認端口為8888,如果該端口已經(jīng)被其他程序占用,需要手動(dòng)更改,勾選允許遠程計算機連接,其他選項即可。 , 配置更新后記得重啟Fiddler。一定要重啟Fiddler,否則代理將失效。 .接下來(lái)需要配置手機,但是這里微信有pc客戶(hù)端,所以不需要配置手機
現在打開(kāi)微信,隨機選擇一個(gè)公眾號,進(jìn)入公眾號的【查看歷史信息】
同時(shí)觀(guān)察 Fiddler 的主面板。當微信從公眾號介紹頁(yè)面進(jìn)入歷史消息頁(yè)面時(shí),已經(jīng)可以在Fiddler上看到請求進(jìn)來(lái)了。這些請求是微信APP向服務(wù)器發(fā)送的請求?,F在簡(jiǎn)單介紹一下這個(gè)請求面板上各個(gè)模塊的含義。
我將上面的主面板分成了 7 個(gè)塊。需要了解每個(gè)區塊的內容,然后才可以使用Python代碼模擬微信請求。 1、服務(wù)器響應結果,200表示服務(wù)器成功響應了2、請求協(xié)議,微信請求協(xié)議是基于HTTPS的,所以之前一定要配置好,否則看不到HTTPS請求。 3、微信服務(wù)器主機名4、請求路徑5、請求行,包括請求方法(GET)、請求協(xié)議(HTTP/1.1)、請求路徑(/mp/profile_ext...)一長(cháng)串參數)6、收錄cookie信息的請求頭。7、微信服務(wù)器返回的響應數據,我們切換到TextView和WebView看看返回的數據是什么樣子的。
TextView模式下的預覽效果為服務(wù)器返回的HTML源代碼
WebView 模式是 HTML 代碼的渲染效果。其實(shí)就是我們在手機微信上看到的效果,但是因為風(fēng)格欠缺,沒(méi)有看到手機上的美化效果。
如果服務(wù)器返回的是Json格式或者XML,也可以切換到對應的頁(yè)面進(jìn)行預覽查看。
開(kāi)始抓?。?br /> 1、擁有微信公眾號
登錄微信公眾號,在菜單欄:素材管理—>新建素材,出現如下頁(yè)面
F12查看網(wǎng)絡(luò ),點(diǎn)擊圖中位置
公眾號和user-Agent的cookies如下
Fakeid和token獲取如下: 查看全部
querylist采集微信公眾號文章(工具Python3+版本Fiddler下載地址(圖)下載)
代碼測試有效期至2019/03/08
微信爬蟲(chóng)步驟:
必需品:
我的微信公眾號Fiddler抓包工具Python 3+版
提琴手下載鏈接
HTTP 代理工具也稱(chēng)為抓包工具。主流的抓包工具是Windows平臺的Fiddler,macOS平臺的Charles,阿里開(kāi)源了一個(gè)叫AnyProxy的工具。它們的基本原理類(lèi)似,即通過(guò)在移動(dòng)客戶(hù)端上設置代理IP和端口,所有來(lái)自客戶(hù)端的HTTP和HTTPS請求都會(huì )通過(guò)代理工具。在代理工具中,您可以清楚地看到每個(gè)請求。然后可以分析詳細信息以找出每個(gè)請求的構造方式。搞清楚這些之后,我們就可以用Python來(lái)模擬發(fā)起請求了,然后就可以得到我們想要的數據了。
安裝包超過(guò)4M。配置前,首先確保您的手機和電腦在同一個(gè)局域網(wǎng)內。如果不在同一個(gè)局域網(wǎng)內,可以購買(mǎi)便攜式WiFi,在電腦上搭建一個(gè)極簡(jiǎn)的無(wú)線(xiàn)路由器。一路點(diǎn)擊下一步,完成安裝過(guò)程。
Fiddler 配置選擇工具> Fiddler 選項> 連接 Fiddler 的默認端口為8888,如果該端口已經(jīng)被其他程序占用,需要手動(dòng)更改,勾選允許遠程計算機連接,其他選項即可。 , 配置更新后記得重啟Fiddler。一定要重啟Fiddler,否則代理將失效。 .接下來(lái)需要配置手機,但是這里微信有pc客戶(hù)端,所以不需要配置手機
現在打開(kāi)微信,隨機選擇一個(gè)公眾號,進(jìn)入公眾號的【查看歷史信息】
同時(shí)觀(guān)察 Fiddler 的主面板。當微信從公眾號介紹頁(yè)面進(jìn)入歷史消息頁(yè)面時(shí),已經(jīng)可以在Fiddler上看到請求進(jìn)來(lái)了。這些請求是微信APP向服務(wù)器發(fā)送的請求?,F在簡(jiǎn)單介紹一下這個(gè)請求面板上各個(gè)模塊的含義。

我將上面的主面板分成了 7 個(gè)塊。需要了解每個(gè)區塊的內容,然后才可以使用Python代碼模擬微信請求。 1、服務(wù)器響應結果,200表示服務(wù)器成功響應了2、請求協(xié)議,微信請求協(xié)議是基于HTTPS的,所以之前一定要配置好,否則看不到HTTPS請求。 3、微信服務(wù)器主機名4、請求路徑5、請求行,包括請求方法(GET)、請求協(xié)議(HTTP/1.1)、請求路徑(/mp/profile_ext...)一長(cháng)串參數)6、收錄cookie信息的請求頭。7、微信服務(wù)器返回的響應數據,我們切換到TextView和WebView看看返回的數據是什么樣子的。
TextView模式下的預覽效果為服務(wù)器返回的HTML源代碼

WebView 模式是 HTML 代碼的渲染效果。其實(shí)就是我們在手機微信上看到的效果,但是因為風(fēng)格欠缺,沒(méi)有看到手機上的美化效果。

如果服務(wù)器返回的是Json格式或者XML,也可以切換到對應的頁(yè)面進(jìn)行預覽查看。
開(kāi)始抓?。?br /> 1、擁有微信公眾號
登錄微信公眾號,在菜單欄:素材管理—>新建素材,出現如下頁(yè)面

F12查看網(wǎng)絡(luò ),點(diǎn)擊圖中位置

公眾號和user-Agent的cookies如下

Fakeid和token獲取如下:
querylist采集微信公眾號文章(puppeteer實(shí)戰:爬取搜狗微信搜索的公眾號文章并寫(xiě)入Excel )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 368 次瀏覽 ? 2021-09-11 08:12
)
在上一本書(shū)中提到,使用puppeteer庫進(jìn)行截圖操作只是簡(jiǎn)單的展示了puppeteer的特性和基本用法。這次我們來(lái)談?wù)勈褂胮uppeteer抓取頁(yè)面數據并寫(xiě)入Excel。
Puppeteer實(shí)戰:抓取搜狗微信搜索到的公眾號文章,寫(xiě)入Excel
背景一:搜狗搜索現在有了根據關(guān)鍵詞查詢(xún)微信公眾號文章的功能,而我們要做的就是爬下指定關(guān)鍵詞的文章,因為這個(gè)需求來(lái)自我 來(lái)自公司業(yè)務(wù)部,所以為了方便同學(xué)們操作查看,還需要把爬取的數據放到Excel中。
用過(guò)之后,感覺(jué)這個(gè)東西并不復雜,只要懂API就行。我認為復雜的是需要考慮各種基本情況。
首先一般網(wǎng)站已經(jīng)進(jìn)行了防爬處理。我們需要以合理的方式繞過(guò)它。比如搜狗搜索就是。一開(kāi)始,我打算讀取a標簽的href屬性,然后直接在瀏覽器中打開(kāi)鏈接。但是在嘗試之后,我發(fā)現我能夠做到這一點(diǎn)。估計搜狗做了一些反爬行動(dòng)。這樣做將報告 IP 異常。所以我放棄了,使用puppeteer的page.click方法來(lái)解決這個(gè)問(wèn)題,因為puppeteer本質(zhì)上是通過(guò)模擬真實(shí)用戶(hù)的點(diǎn)擊操作來(lái)實(shí)現的,所以不會(huì )受到反爬機制的影響。
另外一個(gè)是因為爬蟲(chóng)是微信文章,我們還需要考慮微信文章本身的一些情況,比如文章被發(fā)布者刪除或移動(dòng),文章被舉報,或者這個(gè)文章時(shí)分享另一篇文章文章Wait...
總之,我覺(jué)得用puppeteer寫(xiě)的爬蟲(chóng)腳本跟業(yè)務(wù)是強耦合的,所以我個(gè)人覺(jué)得代碼本身沒(méi)有參考意義。不過(guò)還是可以看看自己在寫(xiě)過(guò)程中遇到的各種奇怪的問(wèn)題,或許可以為大家解決遇到的問(wèn)題提供一些思路。
完整代碼如下:
exportExcel 導出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章標題", "文章URL", "作者名(公眾號)", "發(fā)布日期", "內容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 寫(xiě)xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("寫(xiě)入成功!");
});
}
}; 查看全部
querylist采集微信公眾號文章(puppeteer實(shí)戰:爬取搜狗微信搜索的公眾號文章并寫(xiě)入Excel
)
在上一本書(shū)中提到,使用puppeteer庫進(jìn)行截圖操作只是簡(jiǎn)單的展示了puppeteer的特性和基本用法。這次我們來(lái)談?wù)勈褂胮uppeteer抓取頁(yè)面數據并寫(xiě)入Excel。
Puppeteer實(shí)戰:抓取搜狗微信搜索到的公眾號文章,寫(xiě)入Excel
背景一:搜狗搜索現在有了根據關(guān)鍵詞查詢(xún)微信公眾號文章的功能,而我們要做的就是爬下指定關(guān)鍵詞的文章,因為這個(gè)需求來(lái)自我 來(lái)自公司業(yè)務(wù)部,所以為了方便同學(xué)們操作查看,還需要把爬取的數據放到Excel中。
用過(guò)之后,感覺(jué)這個(gè)東西并不復雜,只要懂API就行。我認為復雜的是需要考慮各種基本情況。
首先一般網(wǎng)站已經(jīng)進(jìn)行了防爬處理。我們需要以合理的方式繞過(guò)它。比如搜狗搜索就是。一開(kāi)始,我打算讀取a標簽的href屬性,然后直接在瀏覽器中打開(kāi)鏈接。但是在嘗試之后,我發(fā)現我能夠做到這一點(diǎn)。估計搜狗做了一些反爬行動(dòng)。這樣做將報告 IP 異常。所以我放棄了,使用puppeteer的page.click方法來(lái)解決這個(gè)問(wèn)題,因為puppeteer本質(zhì)上是通過(guò)模擬真實(shí)用戶(hù)的點(diǎn)擊操作來(lái)實(shí)現的,所以不會(huì )受到反爬機制的影響。
另外一個(gè)是因為爬蟲(chóng)是微信文章,我們還需要考慮微信文章本身的一些情況,比如文章被發(fā)布者刪除或移動(dòng),文章被舉報,或者這個(gè)文章時(shí)分享另一篇文章文章Wait...
總之,我覺(jué)得用puppeteer寫(xiě)的爬蟲(chóng)腳本跟業(yè)務(wù)是強耦合的,所以我個(gè)人覺(jué)得代碼本身沒(méi)有參考意義。不過(guò)還是可以看看自己在寫(xiě)過(guò)程中遇到的各種奇怪的問(wèn)題,或許可以為大家解決遇到的問(wèn)題提供一些思路。
完整代碼如下:
exportExcel 導出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章標題", "文章URL", "作者名(公眾號)", "發(fā)布日期", "內容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 寫(xiě)xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("寫(xiě)入成功!");
});
}
};
querylist采集微信公眾號文章(如何抓取微信公眾號的所有文章 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 373 次瀏覽 ? 2021-09-07 17:59
)
準備階段
為了實(shí)現這個(gè)爬蟲(chóng),我們需要使用以下工具
另外,這個(gè)爬蟲(chóng)程序使用了微信公眾號后臺編輯素材接口。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要有一個(gè)官方帳號。
圖1
正式開(kāi)始
我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
圖2
接下來(lái),按 F12,打開(kāi) Chrome 的開(kāi)發(fā)者工具,然后選擇網(wǎng)絡(luò )
圖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 requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求無(wú)效。我們需要在requests中設置headers參數,并傳入Cookie和User-Agent來(lái)模擬登錄
由于頭信息的內容每次都會(huì )變化,所以我把這些內容放在一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后閱讀
# 讀取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
appmsgid 是每條推文的唯一標識符,aid 是每條推文的唯一標識符。
圖6
其實(shí)除了cookies,URL中的token參數也會(huì )用來(lái)限制爬蟲(chóng),所以上面代碼的輸出很可能是{'base_resp': {'ret': 200040,'err_msg ':'無(wú)效的 csrf 令牌'}}
接下來(lái),我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取所有文章 JSON 并保存。
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['cookie'],
"User-Agent": config['user_agent']
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
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()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的內容中為空則結束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
在上面的代碼中,我還在“wechat.yaml”文件中存儲了fakeid和token。這是因為 fakeid 是每個(gè)公眾號的唯一標識符,令牌會(huì )經(jīng)常變化。這個(gè)信息可以通過(guò)解析URL獲取,也可以在開(kāi)發(fā)者工具中查看
圖7
爬取一段時(shí)間后,會(huì )遇到以下問(wèn)題
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此時(shí)在公眾號后臺嘗試插入超鏈接時(shí),會(huì )遇到如下提示
圖8
這是公眾號的流量限制,通常需要等待30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,你可能需要申請多個(gè)公眾號,可能需要對抗微信公眾號登錄系統,或者你可能需要設置代理池。
但是我不需要工業(yè)級的爬蟲(chóng),我只想爬取自己的公眾號信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,運行。我不想用自己的興趣挑戰別人的工作。
最后,將結果保存為 JSON 格式。
# 保存結果為JSON
json_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))
或者提取文章identifier、標題、網(wǎng)址、發(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 = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list)) 查看全部
querylist采集微信公眾號文章(如何抓取微信公眾號的所有文章
)
準備階段
為了實(shí)現這個(gè)爬蟲(chóng),我們需要使用以下工具
另外,這個(gè)爬蟲(chóng)程序使用了微信公眾號后臺編輯素材接口。原理是當我們插入超鏈接時(shí),微信會(huì )調用一個(gè)特殊的API(見(jiàn)下圖)來(lái)獲取指定公眾號的文章列表。因此,我們還需要有一個(gè)官方帳號。
圖1
正式開(kāi)始
我們需要登錄微信公眾號,點(diǎn)擊素材管理,點(diǎn)擊新建圖文消息,然后點(diǎn)擊上面的超鏈接。
圖2
接下來(lái),按 F12,打開(kāi) Chrome 的開(kāi)發(fā)者工具,然后選擇網(wǎng)絡(luò )
圖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 requests
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B
requests.get(url).json()
# {'base_resp': {'ret': 200003, 'err_msg': 'invalid session'}}
之所以能在瀏覽器上獲取資源,是因為我們登錄了微信公眾號后臺。而Python沒(méi)有我們的登錄信息,所以請求無(wú)效。我們需要在requests中設置headers參數,并傳入Cookie和User-Agent來(lái)模擬登錄
由于頭信息的內容每次都會(huì )變化,所以我把這些內容放在一個(gè)單獨的文件中,即“wechat.yaml”,信息如下
cookie: ua_id=wuzWM9FKE14...
user_agent: Mozilla/5.0...
你只需要稍后閱讀
# 讀取cookie和user_agent
import yaml
with open("wechat.yaml", "r") as file:
file_data = file.read()
config = yaml.safe_load(file_data)
headers = {
"Cookie": config['cookie'],
"User-Agent": config['user_agent']
}
requests.get(url, headers=headers, verify=False).json()
在返回的JSON中,我們可以看到每個(gè)文章的標題(title)、摘要(digest)、鏈接(link)、推送時(shí)間(update_time)和封面地址(cover)。
appmsgid 是每條推文的唯一標識符,aid 是每條推文的唯一標識符。
圖6
其實(shí)除了cookies,URL中的token參數也會(huì )用來(lái)限制爬蟲(chóng),所以上面代碼的輸出很可能是{'base_resp': {'ret': 200040,'err_msg ':'無(wú)效的 csrf 令牌'}}
接下來(lái),我們編寫(xiě)一個(gè)循環(huán)來(lái)獲取所有文章 JSON 并保存。
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['cookie'],
"User-Agent": config['user_agent']
}
# 請求參數
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
begin = "0"
params = {
"action": "list_ex",
"begin": begin,
"count": "5",
"fakeid": config['fakeid'],
"type": "9",
"token": config['token'],
"lang": "zh_CN",
"f": "json",
"ajax": "1"
}
# 存放結果
app_msg_list = []
# 在不知道公眾號有多少文章的情況下,使用while語(yǔ)句
# 也方便重新運行時(shí)設置頁(yè)數
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()['base_resp']['ret'] == 200013:
print("frequencey control, stop at {}".format(str(begin)))
break
# 如果返回的內容中為空則結束
if len(resp.json()['app_msg_list']) == 0:
print("all ariticle parsed")
break
app_msg_list.append(resp.json())
# 翻頁(yè)
i += 1
在上面的代碼中,我還在“wechat.yaml”文件中存儲了fakeid和token。這是因為 fakeid 是每個(gè)公眾號的唯一標識符,令牌會(huì )經(jīng)常變化。這個(gè)信息可以通過(guò)解析URL獲取,也可以在開(kāi)發(fā)者工具中查看
圖7
爬取一段時(shí)間后,會(huì )遇到以下問(wèn)題
{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}
此時(shí)在公眾號后臺嘗試插入超鏈接時(shí),會(huì )遇到如下提示
圖8
這是公眾號的流量限制,通常需要等待30-60分鐘才能繼續。為了完美處理這個(gè)問(wèn)題,你可能需要申請多個(gè)公眾號,可能需要對抗微信公眾號登錄系統,或者你可能需要設置代理池。
但是我不需要工業(yè)級的爬蟲(chóng),我只想爬取自己的公眾號信息,所以等了一個(gè)小時(shí),再次登錄公眾號,獲取cookie和token,運行。我不想用自己的興趣挑戰別人的工作。
最后,將結果保存為 JSON 格式。
# 保存結果為JSON
json_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))
或者提取文章identifier、標題、網(wǎng)址、發(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 = '"{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], str(item['create_time']))
info_list.append(info)
# save as csv
with open("app_msg_list.csv", "w") as file:
file.writelines("\n".join(info_list))
querylist采集微信公眾號文章( IOP出版社與Charlesworth集團合作成功研發(fā)“文章追蹤”功能 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 230 次瀏覽 ? 2021-09-07 02:17
IOP出版社與Charlesworth集團合作成功研發(fā)“文章追蹤”功能
)
IOP Publishing 微信公眾號新推出“文章tracking”功能
2020 年 11 月 27 日加布??里埃爾
此處提供此頁(yè)面的英文版本
近期,IOP Publishing與Charlesworth Group合作,成功將Charlesworth自主研發(fā)的微信產(chǎn)品——“文章tracking”功能納入“IOP Publishing”微信公眾號功能菜單?,F在,所有向IOP Press期刊投稿的中國作者都可以通過(guò)微信使用公眾號“文章tracking”功能,實(shí)時(shí)查看文章投稿狀態(tài)。以前,作者只能登錄IOP Science網(wǎng)站查看文章?tīng)顟B(tài)。
通過(guò)Charlesworth Group提供的技術(shù)支持,來(lái)自中國的作者可以在公眾號提交文章ID,立即獲得文章的狀態(tài)信息。使用微信追蹤文章大大降低了中國用戶(hù)在國外訪(fǎng)問(wèn)網(wǎng)站時(shí)可能遇到的速度和連接問(wèn)題。同時(shí),將“文章tracking”功能納入微信,大大提升了中國作者社區的用戶(hù)體驗,助力“IOP出版社”公眾號成為中國作者獲取信息的重要平臺和服務(wù)。
“文章tracking”功能的網(wǎng)關(guān)由 Charlesworth Group 開(kāi)發(fā)。該技術(shù)獲得了 2020 年出版業(yè) ALPSP 創(chuàng )新獎的提名??梢詫l(fā)布者自己的平臺和后臺系統集成到微信中,并提供營(yíng)銷(xiāo)工具和分析儀表盤(pán),讓發(fā)布者可以管理其微信公眾號的方方面面。
查爾斯沃思集團首席執行官邁克爾·埃文斯表示:“IOP Publishing 在中國擁有廣泛的客戶(hù)群。通過(guò)與查爾斯沃思集團合作開(kāi)發(fā)該技術(shù)解決方案,作者可以從“IOP Publishing”的微信公眾號獲取信息。更多服務(wù)。通過(guò)整合‘文章tracking’,IOP Press的中國作者可以獲得更好的用戶(hù)體驗,并與其他已添加此功能的出版商一起在公眾號中享受微信查看文章方便快捷狀態(tài)?!?br /> 操作指南第一步
查看全部
querylist采集微信公眾號文章(
IOP出版社與Charlesworth集團合作成功研發(fā)“文章追蹤”功能
)
IOP Publishing 微信公眾號新推出“文章tracking”功能
2020 年 11 月 27 日加布??里埃爾

此處提供此頁(yè)面的英文版本
近期,IOP Publishing與Charlesworth Group合作,成功將Charlesworth自主研發(fā)的微信產(chǎn)品——“文章tracking”功能納入“IOP Publishing”微信公眾號功能菜單?,F在,所有向IOP Press期刊投稿的中國作者都可以通過(guò)微信使用公眾號“文章tracking”功能,實(shí)時(shí)查看文章投稿狀態(tài)。以前,作者只能登錄IOP Science網(wǎng)站查看文章?tīng)顟B(tài)。
通過(guò)Charlesworth Group提供的技術(shù)支持,來(lái)自中國的作者可以在公眾號提交文章ID,立即獲得文章的狀態(tài)信息。使用微信追蹤文章大大降低了中國用戶(hù)在國外訪(fǎng)問(wèn)網(wǎng)站時(shí)可能遇到的速度和連接問(wèn)題。同時(shí),將“文章tracking”功能納入微信,大大提升了中國作者社區的用戶(hù)體驗,助力“IOP出版社”公眾號成為中國作者獲取信息的重要平臺和服務(wù)。
“文章tracking”功能的網(wǎng)關(guān)由 Charlesworth Group 開(kāi)發(fā)。該技術(shù)獲得了 2020 年出版業(yè) ALPSP 創(chuàng )新獎的提名??梢詫l(fā)布者自己的平臺和后臺系統集成到微信中,并提供營(yíng)銷(xiāo)工具和分析儀表盤(pán),讓發(fā)布者可以管理其微信公眾號的方方面面。
查爾斯沃思集團首席執行官邁克爾·埃文斯表示:“IOP Publishing 在中國擁有廣泛的客戶(hù)群。通過(guò)與查爾斯沃思集團合作開(kāi)發(fā)該技術(shù)解決方案,作者可以從“IOP Publishing”的微信公眾號獲取信息。更多服務(wù)。通過(guò)整合‘文章tracking’,IOP Press的中國作者可以獲得更好的用戶(hù)體驗,并與其他已添加此功能的出版商一起在公眾號中享受微信查看文章方便快捷狀態(tài)?!?br /> 操作指南第一步

querylist采集微信公眾號文章(搜狗微信中會(huì )怎么樣?小編講解思路及講解方法)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 216 次瀏覽 ? 2021-09-07 02:12
這個(gè)文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接。小編覺(jué)得還不錯?,F在分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
本文主要講解思路,代碼部分請自行解決
獲取搜狗微信當天信息排名
指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
登錄微信公眾號鏈接獲取cookie信息
由于微信公眾平臺模擬登錄未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息
固定鏈接可以在這里轉換
代碼部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快導致需要輸入驗證碼
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公眾號文章permanent鏈接的詳細內容。更多詳情請關(guān)注Gxl其他相關(guān)文章! 查看全部
querylist采集微信公眾號文章(搜狗微信中會(huì )怎么樣?小編講解思路及講解方法)
這個(gè)文章主要介紹python如何抓取搜狗微信公眾號文章永久鏈接。小編覺(jué)得還不錯?,F在分享給大家,給大家參考。跟著(zhù)小編一起來(lái)看看吧。
本文主要講解思路,代碼部分請自行解決
獲取搜狗微信當天信息排名
指定輸入關(guān)鍵字,通過(guò)scrapy抓取公眾號
登錄微信公眾號鏈接獲取cookie信息
由于微信公眾平臺模擬登錄未解決,需要手動(dòng)登錄實(shí)時(shí)獲取cookie信息




固定鏈接可以在這里轉換
代碼部分
def parse(self, response):
item = SougouItem()
item["title"] = response.xpath('//title/text()').extract_first()
print("**"*5, item["title"],"**"*5)
name = input("----------請輸入需要搜索的信息:")
print(name)
url = "http://weixin.sogou.com/weixin ... ot%3B
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name":name})
搜狗微信訪(fǎng)問(wèn)頻率會(huì )過(guò)快導致需要輸入驗證碼
def parse_two(self, response):
print(response.url)
name = response.meta["name"]
resp = response.xpath('//ul[@class="news-list"]/li')
s = 1
# 判斷url 是否是需要輸入驗證碼
res = re.search("from", response.url) # 需要驗證碼驗證
if res:
print(response.url)
img = response.xpath('//img/@src').extract()
print(img)
url_img = "http://weixin.sogou.com/antispider/"+ img[1]
print(url_img)
url_img = requests.get(url_img).content with open("urli.jpg", "wb") as f:
f.write(url_img) # f.close()
img = input("請輸入驗證碼:")
print(img)
url = response.url
r = re.search(r"from=(.*)",url).group(1)
print(r)
postData = {"c":img,"r":r,"v":"5"}
url = "http://weixin.sogou.com/antispider/thank.php"
yield scrapy.FormRequest(url=url, formdata=postData, callback=self.parse_two,meta={"name":name})
# 不需要驗證碼驗證
else:
for res, i in zip(resp, range(1, 10)):
item = SougouItem()
item["url"] = res.xpath('.//p[1]/a/@href').extract_first()
item["name"] = name
print("第%d條" % i) # 轉化永久鏈接
headers = {"Host": "mp.weixin.qq.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B,
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cookie": "noticeLoginFlag=1; pgv_pvi=5269297152; pt2gguin=o1349184918; RK=ph4smy/QWu; ptcz=f3eb6ede5db921d0ada7f1713e6d1ca516d200fec57d602e677245490fcb7f1e; pgv_pvid=1033302674; o_cookie=1349184918; pac_uid=1_1349184918; ua_id=4nooSvHNkTOjpIpgAAAAAFX9OSNcLApfsluzwfClLW8=; mm_lang=zh_CN; noticeLoginFlag=1; remember_acct=Liangkai318; rewardsn=; wxtokenkey=777; pgv_si=s1944231936; uuid=700c40c965347f0925a8e8fdcc1e003e; ticket=023fc8861356b01527983c2c4765ef80903bf3d7; ticket_id=gh_6923d82780e4; cert=L_cE4aRdaZeDnzao3xEbMkcP3Kwuejoi; data_bizuin=3075391054; bizuin=3208078327; data_ticket=XrzOnrV9Odc80hJLtk8vFjTLI1vd7kfKJ9u+DzvaeeHxZkMXbv9kcWk/Pmqx/9g7; slave_sid=SWRKNmFyZ1NkM002Rk9NR0RRVGY5VFdMd1lXSkExWGtPcWJaREkzQ1BESEcyQkNLVlQ3YnB4OFNoNmtRZzdFdGpnVGlHak9LMjJ5eXBNVEgxZDlZb1BZMnlfN1hKdnJsV0NKallsQW91Zjk5Y3prVjlQRDNGYUdGUWNFNEd6eTRYT1FSOEQxT0MwR01Ja0Vo; slave_user=gh_6923d82780e4; xid=7b2245140217dbb3c5c0a552d46b9664; openid2ticket_oTr5Ot_B4nrDSj14zUxlXg8yrzws=D/B6//xK73BoO+mKE2EAjdcgIXNPw/b5PEDTDWM6t+4="}
respon = requests.get(url=item["url"]).content
gongzhongh = etree.HTML(respon).xpath('//a[@id="post-user"]/text()')[0]
# times = etree.HTML(respon).xpath('//*[@id="post-date"]/text()')[0]
title_one = etree.HTML(respon).xpath('//*[@id="activity-name"]/text()')[0].split()[0]
print(gongzhongh, title_one)
item["tit"] = title_one
item["gongzhongh"] = gongzhongh
# item["times"] = times
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + gongzhongh + "&begin=0&count=5"
# wenzhang_url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
resp = requests.get(url=url, headers=headers).content
print(resp)
faskeids = json.loads(resp.decode("utf-8"))
try:
list_fask = faskeids["list"] except Exception as f:
print("**********[INFO]:請求失敗,登陸失敗, 請重新登陸*************")
return
for fask in list_fask:
fakeid = fask["fakeid"]
nickname = fask["nickname"] if nickname == item["gongzhongh"]:
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + fakeid + "&type=9"
# url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] + "&fakeid=MzA5MzMxMDk3OQ%3D%3D&type=9"
url = "https://mp.weixin.qq.com/cgi-b ... ot%3B + item["tit"] +"&fakeid=" + fakeid +"&type=9"
resp = requests.get(url=url, headers=headers).content
app = json.loads(resp.decode("utf-8"))["app_msg_list"]
item["aid"] = app["aid"]
item["appmsgid"] = app["appmsgid"]
item["cover"] = app["cover"]
item["digest"] = app["digest"]
item["url_link"] = app["link"]
item["tit"] = app["title"]
print(item)
time.sleep(10) # time.sleep(5)
# dict_wengzhang = json.loads(resp.decode("utf-8"))
# app_msg_list = dict_wengzhang["app_msg_list"]
# print(len(app_msg_list))
# for app in app_msg_list:
# print(app)
# title = app["title"]
# if title == item["tit"]:
# item["url_link"] = app["link"]
# updata_time = app["update_time"]
# item["times"] = time.strftime("%Y-%m-%d %H:%M:%S", updata_time)
# print("最終鏈接為:", item["url_link"])
# yield item
# else:
# print(app["title"], item["tit"])
# print("與所選文章不同放棄")
# # item["tit"] = app["title"]
# # item["url_link"] = app["link"]
# # yield item
# else:
# print(nickname, item["gongzhongh"])
# print("與所選公眾號不一致放棄")
# time.sleep(100)
# yield item
if response.xpath('//a[@class="np"]'):
s += 1
url = "http://weixin.sogou.com/weixin ... 2Bstr(s) # time.sleep(3)
yield scrapy.Request(url=url, callback=self.parse_two, meta={"name": name})
以上是python如何抓取搜狗微信公眾號文章permanent鏈接的詳細內容。更多詳情請關(guān)注Gxl其他相關(guān)文章!
querylist采集微信公眾號文章(騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 179 次瀏覽 ? 2021-09-06 16:06
querylist采集微信公眾號文章,一般需要反爬蟲(chóng)掃描文章末尾二維碼進(jìn)行反爬蟲(chóng),文章鏈接為文章正文href,圖片為文章一部分。在微信后臺放入本頁(yè)面地址即可。代碼如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid從0開(kāi)始遞增,微信id為i13)scanner:微信反爬蟲(chóng)采集系統分析文章頁(yè)面,與app端進(jìn)行對比,并取出我們需要采集到文章列表model:用于爬取分析文章信息,已獲取第一個(gè)按鈕text+#,鼠標移動(dòng)到text里可以獲取到實(shí)際字符,點(diǎn)擊text進(jìn)行識別即可獲取text信息keyword:獲取上標取出下標即為分析文章條目,獲取上標得到頁(yè)面中所有的內容,點(diǎn)擊text進(jìn)行獲取條目類(lèi)別contentboolean注冊安卓版注冊完成以后需要用vuerouter注冊安卓瀏覽器,在手機登錄openinstall微信后臺,獲取安卓瀏覽器keywordid,取出同名detail標簽model對應分析軟件:appium,免費開(kāi)源工具,可自定義綁定工具,fiddler調試工具部署公眾號,獲取二維碼,打開(kāi)后臺就可以獲取獲取到微信公眾號的列表secondlife類(lèi),進(jìn)行分析。
appium+vuerouter
請先把爬蟲(chóng)分析功能能力提升一下。
#騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案,最后還是appium的微信采集功能最強大。但是為什么最后還是選擇了appium,而不是webdriver呢?因為我非常喜歡appium,與其它機器學(xué)習工具相比,使用appium非常容易上手,只要會(huì )計算機基礎就可以用它來(lái)實(shí)現復雜的機器學(xué)習功能。騰訊開(kāi)發(fā)的proactive.js很好用,用得也很順手。
還有它不止是采集微信公眾號文章信息,我還發(fā)現它已經(jīng)開(kāi)始支持抓取企業(yè)的店鋪、知乎等多個(gè)平臺的公眾號。并且proactive.js在中國市場(chǎng)幾乎是免費的。 查看全部
querylist采集微信公眾號文章(騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案)
querylist采集微信公眾號文章,一般需要反爬蟲(chóng)掃描文章末尾二維碼進(jìn)行反爬蟲(chóng),文章鏈接為文章正文href,圖片為文章一部分。在微信后臺放入本頁(yè)面地址即可。代碼如下:main方法:初始化需要用到:微信id:微信id/tagid(tagid從0開(kāi)始遞增,微信id為i13)scanner:微信反爬蟲(chóng)采集系統分析文章頁(yè)面,與app端進(jìn)行對比,并取出我們需要采集到文章列表model:用于爬取分析文章信息,已獲取第一個(gè)按鈕text+#,鼠標移動(dòng)到text里可以獲取到實(shí)際字符,點(diǎn)擊text進(jìn)行識別即可獲取text信息keyword:獲取上標取出下標即為分析文章條目,獲取上標得到頁(yè)面中所有的內容,點(diǎn)擊text進(jìn)行獲取條目類(lèi)別contentboolean注冊安卓版注冊完成以后需要用vuerouter注冊安卓瀏覽器,在手機登錄openinstall微信后臺,獲取安卓瀏覽器keywordid,取出同名detail標簽model對應分析軟件:appium,免費開(kāi)源工具,可自定義綁定工具,fiddler調試工具部署公眾號,獲取二維碼,打開(kāi)后臺就可以獲取獲取到微信公眾號的列表secondlife類(lèi),進(jìn)行分析。
appium+vuerouter
請先把爬蟲(chóng)分析功能能力提升一下。
#騰訊appium微信采集深度探索篇其實(shí)我分析了n種方案,最后還是appium的微信采集功能最強大。但是為什么最后還是選擇了appium,而不是webdriver呢?因為我非常喜歡appium,與其它機器學(xué)習工具相比,使用appium非常容易上手,只要會(huì )計算機基礎就可以用它來(lái)實(shí)現復雜的機器學(xué)習功能。騰訊開(kāi)發(fā)的proactive.js很好用,用得也很順手。
還有它不止是采集微信公眾號文章信息,我還發(fā)現它已經(jīng)開(kāi)始支持抓取企業(yè)的店鋪、知乎等多個(gè)平臺的公眾號。并且proactive.js在中國市場(chǎng)幾乎是免費的。
querylist采集微信公眾號文章(ios微信公眾號文章數據可視化千里之行始于足下)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 141 次瀏覽 ? 2021-09-06 14:01
querylist采集微信公眾號文章內容時(shí),需要到微信公眾號后臺的后臺歷史消息里查找自己需要的歷史文章,前期使用websocket后臺自帶的,很慢,沒(méi)有收到定期發(fā)送的消息,網(wǎng)上也有很多方法嘗試,常用方法如下:1.用socket,同一ip多次查詢(xún)(每次次間隔3秒),然后用sendblock傳回消息2.用xmlhttprequest動(dòng)態(tài)網(wǎng)頁(yè)獲取-querylist.html,設置頭信息,然后傳回消息。如果時(shí)間和語(yǔ)言允許,java還是用tomcat服務(wù)器作為后臺,同一ip多次查詢(xún)也可以。
ios微信公眾號文章數據可視化爬蟲(chóng)
千里之行始于足下。websocket是一個(gè)關(guān)于網(wǎng)絡(luò )傳輸的協(xié)議。采用網(wǎng)絡(luò )連接時(shí),數據傳輸可靠性非常高。你的微信公眾號不是第一個(gè)采用這個(gè)協(xié)議來(lái)作為關(guān)系數據的。你上哪里發(fā)請求呢?服務(wù)器上并沒(méi)有對應的開(kāi)源協(xié)議。推薦你c#和mysql使用websocket(我自己調用的-xinaya),數據傳輸沒(méi)問(wèn)題??梢院?jiǎn)單的基于php或者.net做網(wǎng)頁(yè)上部分信息來(lái)交互。
我這里有,部分免費。
微信公眾號文章文章鏈接:
有代碼可以使用canvas畫(huà)圖
使用websocket、xmlhttprequest、socket
公眾號文章的基本模型可以歸納為如下幾種:json串,這里主要指公眾號一般后臺自動(dòng)生成,比如昵稱(chēng)、賬號、關(guān)注號、點(diǎn)贊數、轉發(fā)數,用json格式收到后推送到前端。文章id,一般由兩個(gè)或者兩個(gè)以上的json對象構成,用來(lái)收到推送消息,一般會(huì )存在你的域名里,通過(guò)id獲取該字段。文章簡(jiǎn)介,一般用個(gè)json對象記錄,大致可以用datetime類(lèi)類(lèi)型進(jìn)行記錄。
推送訂閱號消息,推送公眾號菜單,通過(guò)event的方式。推送訂閱號消息,推送微信群消息,推送電話(huà)聯(lián)系人消息,推送好友消息,推送通知消息。公眾號文章的文章主體信息:標題、開(kāi)頭、中間、尾聲、確認完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。 查看全部
querylist采集微信公眾號文章(ios微信公眾號文章數據可視化千里之行始于足下)
querylist采集微信公眾號文章內容時(shí),需要到微信公眾號后臺的后臺歷史消息里查找自己需要的歷史文章,前期使用websocket后臺自帶的,很慢,沒(méi)有收到定期發(fā)送的消息,網(wǎng)上也有很多方法嘗試,常用方法如下:1.用socket,同一ip多次查詢(xún)(每次次間隔3秒),然后用sendblock傳回消息2.用xmlhttprequest動(dòng)態(tài)網(wǎng)頁(yè)獲取-querylist.html,設置頭信息,然后傳回消息。如果時(shí)間和語(yǔ)言允許,java還是用tomcat服務(wù)器作為后臺,同一ip多次查詢(xún)也可以。
ios微信公眾號文章數據可視化爬蟲(chóng)
千里之行始于足下。websocket是一個(gè)關(guān)于網(wǎng)絡(luò )傳輸的協(xié)議。采用網(wǎng)絡(luò )連接時(shí),數據傳輸可靠性非常高。你的微信公眾號不是第一個(gè)采用這個(gè)協(xié)議來(lái)作為關(guān)系數據的。你上哪里發(fā)請求呢?服務(wù)器上并沒(méi)有對應的開(kāi)源協(xié)議。推薦你c#和mysql使用websocket(我自己調用的-xinaya),數據傳輸沒(méi)問(wèn)題??梢院?jiǎn)單的基于php或者.net做網(wǎng)頁(yè)上部分信息來(lái)交互。
我這里有,部分免費。
微信公眾號文章文章鏈接:
有代碼可以使用canvas畫(huà)圖
使用websocket、xmlhttprequest、socket
公眾號文章的基本模型可以歸納為如下幾種:json串,這里主要指公眾號一般后臺自動(dòng)生成,比如昵稱(chēng)、賬號、關(guān)注號、點(diǎn)贊數、轉發(fā)數,用json格式收到后推送到前端。文章id,一般由兩個(gè)或者兩個(gè)以上的json對象構成,用來(lái)收到推送消息,一般會(huì )存在你的域名里,通過(guò)id獲取該字段。文章簡(jiǎn)介,一般用個(gè)json對象記錄,大致可以用datetime類(lèi)類(lèi)型進(jìn)行記錄。
推送訂閱號消息,推送公眾號菜單,通過(guò)event的方式。推送訂閱號消息,推送微信群消息,推送電話(huà)聯(lián)系人消息,推送好友消息,推送通知消息。公眾號文章的文章主體信息:標題、開(kāi)頭、中間、尾聲、確認完成。用字段“jsontext"表示:text{text}jsontext{'appid':'xxx','content':'xxx','content':'xxx','content':'xxx','content':'xxx','expires':'xxx','license':'xxx','recipient':'xxx','ticket':'xxx','character':'xxx','content-type':'xxx','encoding':'xxx','documentjson':'xxx','contentdata':'xxx','content':'xxx','content':'xxx','content-name':'xxx','content':'xxx','content':'xxx','text':'xxx','text':'xxx','text':'xxx','text':。
querylist采集微信公眾號文章(sock優(yōu)采云采集器微信公眾號文章網(wǎng)頁(yè),ctrlist和urllist的功能)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 159 次瀏覽 ? 2021-09-06 07:02
querylist采集微信公眾號文章網(wǎng)頁(yè),最后轉化為詞典存到analyzer中。taglist采集關(guān)鍵詞到單個(gè)analyzer進(jìn)行排序。因為詞典一次只能抓取一個(gè)網(wǎng)頁(yè),所以都是按照最常見(jiàn)的、排名最靠前的句子抓取的。相當于一個(gè)抓取網(wǎng)頁(yè)的熱詞池。ctrlist采集微信小程序實(shí)時(shí)的ctr、點(diǎn)擊流網(wǎng)頁(yè)數據。tcplist、urllist采集已經(jīng)抓取到的資源地址進(jìn)行統計。
ctrlist就是抓取微信開(kāi)發(fā)平臺提供的源碼。taglist采集已經(jīng)抓取到的資源地址進(jìn)行統計。taglist還有web服務(wù)端。ctrlist基本是集成了taglist和urllist的功能。
可以參考我這篇總結。
socket抓取分頁(yè)列表站:analyzer/click.py爬蟲(chóng)語(yǔ)言:python,c++,
ctrlist主要用于各大前端公司采集js關(guān)鍵字,
我用的是一款叫微信開(kāi)發(fā)抓取工具,抓取的方式很簡(jiǎn)單,將微信公眾號的文章網(wǎng)頁(yè)網(wǎng)址發(fā)送到我們公眾號服務(wù)器上,然后我們就可以在公眾號文章網(wǎng)頁(yè)源代碼里面獲取到相應的數據。抓取過(guò)程簡(jiǎn)單,
看自己的需求,比如快速抓取一個(gè)頁(yè)面的代碼:ctrlist:這個(gè)可以做一個(gè)單頁(yè)面項目ctrlistr:只抓取了前端, 查看全部
querylist采集微信公眾號文章(sock優(yōu)采云采集器微信公眾號文章網(wǎng)頁(yè),ctrlist和urllist的功能)
querylist采集微信公眾號文章網(wǎng)頁(yè),最后轉化為詞典存到analyzer中。taglist采集關(guān)鍵詞到單個(gè)analyzer進(jìn)行排序。因為詞典一次只能抓取一個(gè)網(wǎng)頁(yè),所以都是按照最常見(jiàn)的、排名最靠前的句子抓取的。相當于一個(gè)抓取網(wǎng)頁(yè)的熱詞池。ctrlist采集微信小程序實(shí)時(shí)的ctr、點(diǎn)擊流網(wǎng)頁(yè)數據。tcplist、urllist采集已經(jīng)抓取到的資源地址進(jìn)行統計。
ctrlist就是抓取微信開(kāi)發(fā)平臺提供的源碼。taglist采集已經(jīng)抓取到的資源地址進(jìn)行統計。taglist還有web服務(wù)端。ctrlist基本是集成了taglist和urllist的功能。
可以參考我這篇總結。
socket抓取分頁(yè)列表站:analyzer/click.py爬蟲(chóng)語(yǔ)言:python,c++,
ctrlist主要用于各大前端公司采集js關(guān)鍵字,
我用的是一款叫微信開(kāi)發(fā)抓取工具,抓取的方式很簡(jiǎn)單,將微信公眾號的文章網(wǎng)頁(yè)網(wǎng)址發(fā)送到我們公眾號服務(wù)器上,然后我們就可以在公眾號文章網(wǎng)頁(yè)源代碼里面獲取到相應的數據。抓取過(guò)程簡(jiǎn)單,
看自己的需求,比如快速抓取一個(gè)頁(yè)面的代碼:ctrlist:這個(gè)可以做一個(gè)單頁(yè)面項目ctrlistr:只抓取了前端,
querylist采集微信公眾號文章(更新日志v20200520修復一個(gè)嚴重問(wèn)題導致批量黑白直播下載官網(wǎng)使用)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 417 次瀏覽 ? 2021-09-06 03:30
微信公眾號文章batch黑白直播下載官網(wǎng)軟件是一款可以幫助用戶(hù)批量處理采集微信公號內容的工具,支持文章和圖片批量黑白直播下載官網(wǎng),支持按關(guān)鍵詞相關(guān)內容搜索 黑白直播下載官網(wǎng),功能非常強大,有需要的用戶(hù)不要錯過(guò),歡迎使用黑白直播下載官網(wǎng)!
使用說(shuō)明
1、在設置中心開(kāi)啟該功能。
2、按照提示重啟軟件,確認安裝證書(shū)。
3、登錄電腦微信,選擇公眾號,查看歷史或點(diǎn)擊文章文章,返回軟件查看軟件底部提醒是否變紅(紅色表示在后臺工作
進(jìn)行中)。
4、黑白直播官網(wǎng)下載完成后自動(dòng)完成。
注意事項
1、只能一一獲取微信公眾號,請勿打開(kāi)更多軟件,否則會(huì )出現意想不到的問(wèn)題!
2、 如果發(fā)現網(wǎng)絡(luò )不通,請正確關(guān)閉軟件。如果還是不行,請重新打開(kāi)軟件幾次,然后再關(guān)閉。
3、背景分析文章的文章數和黑白直播下載官網(wǎng)的文章數大多不一致,因為部分文章已經(jīng)被刪除或者屏蔽了,但是找到的文章數量總是很大
從黑白直播官網(wǎng)下載的文章數。
4、如有問(wèn)題,請一次性詳細描述清楚,并將失敗的請求鏈接或操作步驟提供給論壇或我的博客。
更新日志
v20200520
修復了導致批量黑白直播下載官網(wǎng)無(wú)法下載黑白直播官網(wǎng)的嚴重問(wèn)題。之前的微信文章
只有黑白直播下載官網(wǎng)原創(chuàng )文章
v20200428
修復評論交互時(shí)顯示“作者”的問(wèn)題
修復標題重復點(diǎn)
修復搜狗搜索特殊字符編碼問(wèn)題
v20200426
添加格式化的json并輸出到文件
修復之前的公眾號文章無(wú)法從黑白直播官網(wǎng)下載的問(wèn)題 查看全部
querylist采集微信公眾號文章(更新日志v20200520修復一個(gè)嚴重問(wèn)題導致批量黑白直播下載官網(wǎng)使用)
微信公眾號文章batch黑白直播下載官網(wǎng)軟件是一款可以幫助用戶(hù)批量處理采集微信公號內容的工具,支持文章和圖片批量黑白直播下載官網(wǎng),支持按關(guān)鍵詞相關(guān)內容搜索 黑白直播下載官網(wǎng),功能非常強大,有需要的用戶(hù)不要錯過(guò),歡迎使用黑白直播下載官網(wǎng)!

使用說(shuō)明
1、在設置中心開(kāi)啟該功能。
2、按照提示重啟軟件,確認安裝證書(shū)。
3、登錄電腦微信,選擇公眾號,查看歷史或點(diǎn)擊文章文章,返回軟件查看軟件底部提醒是否變紅(紅色表示在后臺工作
進(jìn)行中)。
4、黑白直播官網(wǎng)下載完成后自動(dòng)完成。
注意事項
1、只能一一獲取微信公眾號,請勿打開(kāi)更多軟件,否則會(huì )出現意想不到的問(wèn)題!
2、 如果發(fā)現網(wǎng)絡(luò )不通,請正確關(guān)閉軟件。如果還是不行,請重新打開(kāi)軟件幾次,然后再關(guān)閉。
3、背景分析文章的文章數和黑白直播下載官網(wǎng)的文章數大多不一致,因為部分文章已經(jīng)被刪除或者屏蔽了,但是找到的文章數量總是很大
從黑白直播官網(wǎng)下載的文章數。
4、如有問(wèn)題,請一次性詳細描述清楚,并將失敗的請求鏈接或操作步驟提供給論壇或我的博客。
更新日志
v20200520
修復了導致批量黑白直播下載官網(wǎng)無(wú)法下載黑白直播官網(wǎng)的嚴重問(wèn)題。之前的微信文章
只有黑白直播下載官網(wǎng)原創(chuàng )文章
v20200428
修復評論交互時(shí)顯示“作者”的問(wèn)題
修復標題重復點(diǎn)
修復搜狗搜索特殊字符編碼問(wèn)題
v20200426
添加格式化的json并輸出到文件
修復之前的公眾號文章無(wú)法從黑白直播官網(wǎng)下載的問(wèn)題
querylist采集微信公眾號文章(解放雙手【軟件特色】搜索支持搜索文章一鍵下載)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2021-09-04 18:23
13、支持搜索文章一鍵下載、自定義選擇下載、多線(xiàn)程下載全部;
14、支持驗證碼自動(dòng)編碼,解放雙手
[軟件功能]
1、搜索所有微信公眾號文章至關(guān)鍵詞,支持搜索指定時(shí)間段內的相關(guān)內容,支持文章內容導出word、pdf、excle格式;
2、一鍵采集指定公眾號文章的所有歷史記錄,支持文章內容批量導出word和pdf格式(文章原排版,文字+圖片);
3、可以按照發(fā)布時(shí)間、標題、公眾號對關(guān)鍵詞search相關(guān)文章內容進(jìn)行排序,支持標題去重,搜索結果二次搜索;
4、關(guān)鍵詞search文章支持通過(guò)公眾號和關(guān)鍵詞屏蔽,所有不想看的內容都過(guò)濾掉,支持拖拽選擇,一鍵屏蔽;
5、內置驗證碼自動(dòng)打印,自動(dòng)IP切換功能,解放雙手,操作更便捷;
6、文章Content 頁(yè)面支持關(guān)鍵詞搜索,快速查明是否需要文章;
7、保存搜索關(guān)鍵詞history,搜索過(guò)去關(guān)鍵詞,直接從搜索歷史中拉取關(guān)鍵詞,輸入更方便;
8、內置大量快捷鍵,勾選文章,搜索內容更方便、更人性化;
9、一鍵搜索所有微信公眾號文章,按時(shí)間段搜索;
10、支持公眾號關(guān)鍵詞filtering,以及title關(guān)鍵詞filtering;
11、支持查詢(xún)單個(gè)公眾號的所有海量發(fā)帖記錄;
12、支持搜索結果、公眾號、時(shí)間、標題排序;
13、支持一鍵導出搜索結果,方便查看。 查看全部
querylist采集微信公眾號文章(解放雙手【軟件特色】搜索支持搜索文章一鍵下載)
13、支持搜索文章一鍵下載、自定義選擇下載、多線(xiàn)程下載全部;
14、支持驗證碼自動(dòng)編碼,解放雙手

[軟件功能]
1、搜索所有微信公眾號文章至關(guān)鍵詞,支持搜索指定時(shí)間段內的相關(guān)內容,支持文章內容導出word、pdf、excle格式;
2、一鍵采集指定公眾號文章的所有歷史記錄,支持文章內容批量導出word和pdf格式(文章原排版,文字+圖片);
3、可以按照發(fā)布時(shí)間、標題、公眾號對關(guān)鍵詞search相關(guān)文章內容進(jìn)行排序,支持標題去重,搜索結果二次搜索;
4、關(guān)鍵詞search文章支持通過(guò)公眾號和關(guān)鍵詞屏蔽,所有不想看的內容都過(guò)濾掉,支持拖拽選擇,一鍵屏蔽;
5、內置驗證碼自動(dòng)打印,自動(dòng)IP切換功能,解放雙手,操作更便捷;
6、文章Content 頁(yè)面支持關(guān)鍵詞搜索,快速查明是否需要文章;
7、保存搜索關(guān)鍵詞history,搜索過(guò)去關(guān)鍵詞,直接從搜索歷史中拉取關(guān)鍵詞,輸入更方便;
8、內置大量快捷鍵,勾選文章,搜索內容更方便、更人性化;
9、一鍵搜索所有微信公眾號文章,按時(shí)間段搜索;
10、支持公眾號關(guān)鍵詞filtering,以及title關(guān)鍵詞filtering;
11、支持查詢(xún)單個(gè)公眾號的所有海量發(fā)帖記錄;
12、支持搜索結果、公眾號、時(shí)間、標題排序;
13、支持一鍵導出搜索結果,方便查看。
querylist采集微信公眾號文章(querylist采集微信公眾號文章大小為6m,方案根據需要調整)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-09-03 16:03
querylist采集微信公眾號文章大小為6m,方案根據需要調整。內容采集:每個(gè)公眾號對應的文章都可以采集下來(lái),利用requests.session或者requests庫即可抓取。內容爬?。簩ξ恼逻M(jìn)行信息提取、選擇、插入保存等等,利用workerman即可實(shí)現。會(huì )同步push到服務(wù)器上,另外抓取公眾號的話(huà)還可以做二次更新。
文章采集通過(guò)mysql實(shí)現。這種方式對數據的要求較低,雖然抓取的時(shí)候有一定的延遲,但是每個(gè)微信公眾號的文章數量有限,通過(guò)人工進(jìn)行抓取就ok。對于內容爬取,每個(gè)微信公眾號的文章數量有限,那么就需要盡可能多的建表,實(shí)現不同的爬取,好提取一些具有共性的特征信息,比如這里采集的一些詞,那么他們的分類(lèi)標簽是屬于哪一類(lèi)的,每個(gè)分類(lèi)標簽有哪些人數關(guān)注人數等等。
這樣的話(huà)就能夠實(shí)現為每個(gè)公眾號對應的采集,甚至每個(gè)公眾號里面,有的文章數量較少。為了大家方便閱讀,這里通過(guò)爬取到的詞做統計,看看詞頻,然后根據那些詞看看是不是能夠比較方便的得到他們的分類(lèi)。爬取到詞語(yǔ)一覽表這一篇大概就對爬取到的詞進(jìn)行了統計,這些詞都是比較相關(guān)的,對于公眾號一般經(jīng)常讀的或者一般常寫(xiě)的可以抓取到較為準確的詞匯。
對于爬取到的詞進(jìn)行了一個(gè)下標統計:根據上圖統計,可以看到,目前一共爬取了大概4000左右的詞,每個(gè)詞的上下最多只爬取了7個(gè)節點(diǎn),而且還不是最大的。下一篇主要寫(xiě)實(shí)現內容爬取,如果爬取到的詞類(lèi)型比較多,還要分詞的話(huà),還有點(diǎn)麻煩。所以,就用代碼實(shí)現一下吧。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章大小為6m,方案根據需要調整)
querylist采集微信公眾號文章大小為6m,方案根據需要調整。內容采集:每個(gè)公眾號對應的文章都可以采集下來(lái),利用requests.session或者requests庫即可抓取。內容爬?。簩ξ恼逻M(jìn)行信息提取、選擇、插入保存等等,利用workerman即可實(shí)現。會(huì )同步push到服務(wù)器上,另外抓取公眾號的話(huà)還可以做二次更新。
文章采集通過(guò)mysql實(shí)現。這種方式對數據的要求較低,雖然抓取的時(shí)候有一定的延遲,但是每個(gè)微信公眾號的文章數量有限,通過(guò)人工進(jìn)行抓取就ok。對于內容爬取,每個(gè)微信公眾號的文章數量有限,那么就需要盡可能多的建表,實(shí)現不同的爬取,好提取一些具有共性的特征信息,比如這里采集的一些詞,那么他們的分類(lèi)標簽是屬于哪一類(lèi)的,每個(gè)分類(lèi)標簽有哪些人數關(guān)注人數等等。
這樣的話(huà)就能夠實(shí)現為每個(gè)公眾號對應的采集,甚至每個(gè)公眾號里面,有的文章數量較少。為了大家方便閱讀,這里通過(guò)爬取到的詞做統計,看看詞頻,然后根據那些詞看看是不是能夠比較方便的得到他們的分類(lèi)。爬取到詞語(yǔ)一覽表這一篇大概就對爬取到的詞進(jìn)行了統計,這些詞都是比較相關(guān)的,對于公眾號一般經(jīng)常讀的或者一般常寫(xiě)的可以抓取到較為準確的詞匯。
對于爬取到的詞進(jìn)行了一個(gè)下標統計:根據上圖統計,可以看到,目前一共爬取了大概4000左右的詞,每個(gè)詞的上下最多只爬取了7個(gè)節點(diǎn),而且還不是最大的。下一篇主要寫(xiě)實(shí)現內容爬取,如果爬取到的詞類(lèi)型比較多,還要分詞的話(huà),還有點(diǎn)麻煩。所以,就用代碼實(shí)現一下吧。
querylist采集微信公眾號文章(知乎專(zhuān)題微信公眾號內容的批量采集與應用,延續這份分享精神 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 175 次瀏覽 ? 2021-09-03 07:29
)
:///
參考知乎thematic微信公眾號采集批號及申請,作者:飯口團隊負責人
原作者(方口團隊負責人)有句話(huà):我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
這個(gè)系列的文章也是為了延續這種分享精神!
這個(gè)文章系列是基于知乎話(huà)題教程的一步步實(shí)現過(guò)程,在實(shí)現過(guò)程中踩到了一些坑。
原理介紹這里不再贅述,可以參考知乎topic。
代碼改進(jìn)前的準備
原作者使用的是php環(huán)境。如果有能力,可以嘗試其他語(yǔ)言來(lái)實(shí)現,比如python、java等,不過(guò)原作者已經(jīng)給出了部分php代碼,這里也實(shí)現了。
所以你要準備一個(gè)php環(huán)境。 win下推薦使用優(yōu)采云集成環(huán)境,如wamp、xamp、phpstudy等,因為之前電腦里就有wamp環(huán)境,可以直接使用。先配置虛擬域名。但是下面的代碼需要改成自己對應的路徑。配置虛擬域名的教程可以參考我的另一篇文章php本地虛擬域名配置和端口的一些折騰。這里假設我配置的虛擬域名是
修改 rule_default.js 代碼
下面僅給出了一些示例。其他人做同樣的修改(如果沒(méi)有配置虛擬域名,需要將域名改為路徑訪(fǎng)問(wèn),如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函數replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
創(chuàng )建數據庫和數據表
在完善php代碼之前,我們還需要先創(chuàng )建數據庫和數據表。好消息是組長(cháng)已經(jīng)給出了數據表的創(chuàng )建sql語(yǔ)句。修改了一些語(yǔ)法錯誤和關(guān)鍵字重復
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公眾號表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公眾號唯一標識biz',
`collect` int(11) DEFAULT 1 COMMENT '記錄采集時(shí)間的時(shí)間戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章對應的公眾號biz',
`field_id` int(11) NOT NULL COMMENT '微信定義的一個(gè)id,每條文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章標題',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章編碼,防止文章出現emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '閱讀原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面圖片',
`is_multi` int(11) NOT NULL COMMENT '是否多圖文',
`is_top` int(11) NOT NULL COMMENT '是否頭條',
`datetime` int(11) NOT NULL COMMENT '文章時(shí)間戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章閱讀量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章點(diǎn)贊量',
PRIMARY KEY (`id`)
) ;
采集隊列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '讀取中標記',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登錄phpMyAdmin后臺,語(yǔ)言可設置為中文。
注意排序規則設置為utf8_general_ci。
一一執行sql生成數據表。
待續......待續......
希望這個(gè)文章能給你帶來(lái)知識和樂(lè )趣。喜歡博主文章可以加博主好友
如果你有好的文章,也可以給博主投稿。
查看全部
querylist采集微信公眾號文章(知乎專(zhuān)題微信公眾號內容的批量采集與應用,延續這份分享精神
)
:///
參考知乎thematic微信公眾號采集批號及申請,作者:飯口團隊負責人
原作者(方口團隊負責人)有句話(huà):我的方法來(lái)自于很多同事的分享精神,所以我會(huì )延續這種精神,分享我的成果。
這個(gè)系列的文章也是為了延續這種分享精神!
這個(gè)文章系列是基于知乎話(huà)題教程的一步步實(shí)現過(guò)程,在實(shí)現過(guò)程中踩到了一些坑。
原理介紹這里不再贅述,可以參考知乎topic。
代碼改進(jìn)前的準備
原作者使用的是php環(huán)境。如果有能力,可以嘗試其他語(yǔ)言來(lái)實(shí)現,比如python、java等,不過(guò)原作者已經(jīng)給出了部分php代碼,這里也實(shí)現了。
所以你要準備一個(gè)php環(huán)境。 win下推薦使用優(yōu)采云集成環(huán)境,如wamp、xamp、phpstudy等,因為之前電腦里就有wamp環(huán)境,可以直接使用。先配置虛擬域名。但是下面的代碼需要改成自己對應的路徑。配置虛擬域名的教程可以參考我的另一篇文章php本地虛擬域名配置和端口的一些折騰。這里假設我配置的虛擬域名是
修改 rule_default.js 代碼
下面僅給出了一些示例。其他人做同樣的修改(如果沒(méi)有配置虛擬域名,需要將域名改為路徑訪(fǎng)問(wèn),如localhost/weixin/,直接修改即可):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
HttpPost(ret[1],req.url,"/getMsgJson.php");
var http = require('http');
http.get('http://hojun.weixin.com/getWxHis.php', function(res) {
res.on('data', function(chunk){
callback(chunk+serverResData);
})
});
------------------
var options = {
method: "POST",
host: "hojun.weixin.com",
port: 80,
path: path,//接收程序的路徑和文件名
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
"Content-Length": content.length
}
};
找到要修改的函數replaceRequestOption:
1
2
3
4
5
6
7
8
replaceRequestOption : function(req,option){
var newOption = option;
if(/google/i.test(newOption.headers.host)){
newOption.hostname = "www.baidu.com";
newOption.port = "80";
}
return newOption;
},
創(chuàng )建數據庫和數據表
在完善php代碼之前,我們還需要先創(chuàng )建數據庫和數據表。好消息是組長(cháng)已經(jīng)給出了數據表的創(chuàng )建sql語(yǔ)句。修改了一些語(yǔ)法錯誤和關(guān)鍵字重復
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
微信公眾號表
CREATE TABLE `weixin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) DEFAULT ' ' COMMENT '公眾號唯一標識biz',
`collect` int(11) DEFAULT 1 COMMENT '記錄采集時(shí)間的時(shí)間戳',
PRIMARY KEY (`id`)
) ;
微信文章表
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`biz` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '文章對應的公眾號biz',
`field_id` int(11) NOT NULL COMMENT '微信定義的一個(gè)id,每條文章唯一',
`title` varchar(255) NOT NULL DEFAULT ' ' COMMENT '文章標題',
`title_encode` text CHARACTER SET utf8 NOT NULL COMMENT '文章編碼,防止文章出現emoji',
`digest` varchar(500) NOT NULL DEFAULT ' ' COMMENT '文章摘要',
`content_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '文章地址',
`source_url` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '閱讀原文地址',
`cover` varchar(500) CHARACTER SET utf8 NOT NULL COMMENT '封面圖片',
`is_multi` int(11) NOT NULL COMMENT '是否多圖文',
`is_top` int(11) NOT NULL COMMENT '是否頭條',
`datetime` int(11) NOT NULL COMMENT '文章時(shí)間戳',
`readNum` int(11) NOT NULL DEFAULT 1 COMMENT '文章閱讀量',
`likeNum` int(11) NOT NULL DEFAULT 0 COMMENT '文章點(diǎn)贊量',
PRIMARY KEY (`id`)
) ;
采集隊列表
CREATE TABLE `tmplist` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content_url` varchar(255) DEFAULT NULL COMMENT '文章地址',
`load` int(11) DEFAULT 0 COMMENT '讀取中標記',
PRIMARY KEY (`id`),
UNIQUE KEY `content_url` (`content_url`)
) ;
登錄phpMyAdmin后臺,語(yǔ)言可設置為中文。
注意排序規則設置為utf8_general_ci。
一一執行sql生成數據表。
待續......待續......
希望這個(gè)文章能給你帶來(lái)知識和樂(lè )趣。喜歡博主文章可以加博主好友

如果你有好的文章,也可以給博主投稿。

querylist采集微信公眾號文章( 微信公眾號文章的GET及方法(二)-)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 179 次瀏覽 ? 2021-09-03 02:08
微信公眾號文章的GET及方法(二)-)
Python 微信公眾號文章crawl
一.Idea
我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
從界面我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
二.接口分析
微信公眾號訪(fǎng)問(wèn):
參數:
action=search_biz
開(kāi)始=0
計數=5
query=官方賬號
token=每個(gè)賬戶(hù)對應的token值
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
所以在這個(gè)界面我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。
獲取公眾號對應的文章界面:
參數:
action=list_ex
開(kāi)始=0
計數=5
fakeid=MjM5NDAwMTA2MA==
type=9
查詢(xún)=
令牌=557131216
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
我們需要在這個(gè)接口中獲取的值是上一步的token和fakeid,這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以獲取到微信公眾號文章的數據了。
三.實(shí)現第一步:
首先我們需要通過(guò)selenium模擬登錄,然后獲取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.請求獲取微信公眾號文章接口,獲取我們需要的文章data
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數據。
我們已經(jīng)實(shí)現了微信公眾號文章的抓取。
四.Summary
通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,當我們在循環(huán)中獲取文章時(shí),一定要設置一個(gè)延遲時(shí)間,否則賬號很容易被封,獲取不到返回的數據。 查看全部
querylist采集微信公眾號文章(
微信公眾號文章的GET及方法(二)-)
Python 微信公眾號文章crawl
一.Idea
我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面


從界面我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
二.接口分析
微信公眾號訪(fǎng)問(wèn):
參數:
action=search_biz
開(kāi)始=0
計數=5
query=官方賬號
token=每個(gè)賬戶(hù)對應的token值
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
所以在這個(gè)界面我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后可以通過(guò)網(wǎng)頁(yè)鏈接獲取token。

獲取公眾號對應的文章界面:
參數:
action=list_ex
開(kāi)始=0
計數=5
fakeid=MjM5NDAwMTA2MA==
type=9
查詢(xún)=
令牌=557131216
lang=zh_CN
f=json
ajax=1
請求方法:
獲取
我們需要在這個(gè)接口中獲取的值是上一步的token和fakeid,這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以獲取到微信公眾號文章的數據了。

三.實(shí)現第一步:
首先我們需要通過(guò)selenium模擬登錄,然后獲取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.請求獲取微信公眾號文章接口,獲取我們需要的文章data
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數據。
我們已經(jīng)實(shí)現了微信公眾號文章的抓取。
四.Summary
通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,當我們在循環(huán)中獲取文章時(shí),一定要設置一個(gè)延遲時(shí)間,否則賬號很容易被封,獲取不到返回的數據。
querylist采集微信公眾號文章(微信公眾號爬取程序分享搞成java的難點(diǎn)在于)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2021-09-03 02:08
最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號爬取的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。需要使用微信的瀏覽器(獲取微信客戶(hù)端的補充參數才能獲取其他平臺的Open),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到的細節問(wèn)題比較多,分享給大家。
系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
nodejs下載地址:我下載的是windows版本,直接下載安裝即可。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。如果在cmd中執行anyproxy --root,就會(huì )安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />
記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
準備工作到此基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,就可以在剛剛打開(kāi)的web界面看到anyproxy抓取到的數據了:
在上面的紅框中,有一個(gè)微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
如果一切順利,你就可以下去了。
這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(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),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(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() !== ""){
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è)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標通過(guò)js向下滑動(dòng)觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是一直存在一個(gè)問(wèn)題,就是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。 查看全部
querylist采集微信公眾號文章(微信公眾號爬取程序分享搞成java的難點(diǎn)在于)
最近需要爬取微信公眾號的文章信息。上網(wǎng)查了一下,發(fā)現微信公眾號爬取的難點(diǎn)是公眾號文章的鏈接在PC端打不開(kāi)。需要使用微信的瀏覽器(獲取微信客戶(hù)端的補充參數才能獲取其他平臺的Open),給爬蟲(chóng)程序帶來(lái)很大的麻煩。后來(lái)在知乎上看到一個(gè)大牛用php寫(xiě)的微信公眾號爬蟲(chóng)程序,他按照大佬的思路直接做了java。改造過(guò)程中遇到的細節問(wèn)題比較多,分享給大家。
系統的基本思想是在安卓模擬器上運行微信。模擬器設置代理,通過(guò)代理服務(wù)器攔截微信數據,并將獲取到的數據發(fā)送給自己的程序進(jìn)行處理。
需要準備的環(huán)境:nodejs、anyproxy代理、Android模擬器
nodejs下載地址:我下載的是windows版本,直接下載安裝即可。安裝完成后,直接運行C:\Program Files\nodejs\npm.cmd自動(dòng)配置環(huán)境。
anyproxy安裝:上一步安裝好nodejs后,在cmd中直接運行npm install -g anyproxy就會(huì )安裝
互聯(lián)網(wǎng)上只有一個(gè) Android 模擬器,很多。
首先安裝代理服務(wù)器的證書(shū)。 Anyproxy 默認不解析 https 鏈接。安裝證書(shū)后即可解決。如果在cmd中執行anyproxy --root,就會(huì )安裝證書(shū)。之后,您必須在模擬器上下載證書(shū)。
然后輸入anyproxy -i命令開(kāi)啟代理服務(wù)。 (記得加參數?。?br />
記住這個(gè)ip和端口,然后安卓模擬器的代理就會(huì )用到這個(gè)?,F在用瀏覽器打開(kāi)網(wǎng)頁(yè)::8002/ 這是anyproxy的網(wǎng)頁(yè)界面,用于顯示http傳輸數據。
點(diǎn)擊上方紅框中的菜單,會(huì )顯示一個(gè)二維碼。使用安卓模擬器掃碼識別。模擬器(手機)會(huì )下載證書(shū)并安裝。
現在我們準備為模擬器設置代理,代理模式設置為手動(dòng),代理ip為運行anyproxy的機器的ip,端口為8001
準備工作到此基本完成,在模擬器上打開(kāi)微信,開(kāi)通公眾號文章,就可以在剛剛打開(kāi)的web界面看到anyproxy抓取到的數據了:
在上面的紅框中,有一個(gè)微信文章的鏈接,點(diǎn)進(jìn)去查看具體數據。如果響應正文中沒(méi)有任何內容,則可能是證書(shū)安裝有問(wèn)題。
如果一切順利,你就可以下去了。
這里我們依靠代理服務(wù)來(lái)抓取微信數據,但是我們不能抓取一條數據,只能自己操作微信。最好手動(dòng)復制。所以我們需要微信客戶(hù)端自己跳轉到頁(yè)面。這時(shí)候可以使用anyproxy來(lái)攔截微信服務(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),里面的注釋也解釋的很清楚,按照邏輯來(lái)理解就好了,問(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() !== ""){
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è)面可以關(guān)閉。如果被拒絕,則會(huì )觸發(fā)一個(gè)js事件,發(fā)送獲取json數據(下一頁(yè)內容)的??請求。還有公眾號文章的鏈接,以及文章的閱讀量和喜歡的鏈接(返回json數據)。這些鏈接的形式是固定的,可以通過(guò)邏輯判斷來(lái)區分。這里的問(wèn)題是,如果所有的歷史頁(yè)面都需要爬取,怎么做。我的想法是模擬鼠標通過(guò)js向下滑動(dòng)觸發(fā)提交加載列表下一部分的請求?;蛘咧苯邮褂胊nyproxy分析滑動(dòng)加載請求,直接將請求發(fā)送到微信服務(wù)器。但是一直存在一個(gè)問(wèn)題,就是如何判斷沒(méi)有剩余數據。我正在抓取最新數據。我暫時(shí)沒(méi)有這個(gè)需求,以后可能需要。有需要的可以試試。
querylist采集微信公眾號文章(Python批量抓取公眾號文章 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 467 次瀏覽 ? 2021-09-02 11:04
)
PS:如需Python學(xué)習資料,可點(diǎn)擊下方鏈接自行獲取
Python免費學(xué)習資料和群交流答案點(diǎn)擊加入
爬取的方法有很多種。今天給大家分享一個(gè)更簡(jiǎn)單的方法,就是通過(guò)微信公眾號后臺的“超鏈接”功能進(jìn)行爬取??赡苡械呐笥堰€沒(méi)有接觸過(guò)微信公眾號后臺,這里放個(gè)圖讓大家了解一下
這里有的朋友可能會(huì )說(shuō),我后臺無(wú)法登錄公眾號,怎么辦? ? ?
沒(méi)關(guān)系,雖然每個(gè)爬蟲(chóng)的目的都是為了得到我們想要的結果,但這不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)是爬取過(guò)程,也就是我們如何獲取目標數據,所以無(wú)法公開(kāi)登錄 看完這篇文章后,后臺的朋友可能無(wú)法獲取到最終爬取結果,但看完這篇文章你也會(huì )有所收獲。
一、前期準備
選擇要抓取的目標公眾號
點(diǎn)擊超鏈接-進(jìn)入編輯超鏈接界面-輸入我們需要抓取的搜索目標公眾號
今天我們以“數據分析”公眾號的爬取為例給大家介紹
點(diǎn)擊公眾號查看每個(gè)文章對應的標題信息
我們這次爬蟲(chóng)的目標是獲取文章的標題和對應的鏈接。
二、開(kāi)始爬取
爬蟲(chóng)的三個(gè)步驟:
1、請求網(wǎng)頁(yè)
首先導入我們使用這個(gè)爬蟲(chóng)需要的第三方庫
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
找到我們抓取的目標數據所在的位置,點(diǎn)擊搜索得到的包,獲取目標URL和請求頭信息
請求網(wǎng)頁(yè)
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
這里的請求頭信息必須加上cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
網(wǎng)頁(yè)的請求結果如下圖所示。紅框標記了我們需要的文章title 和文章 鏈接
2、分析網(wǎng)頁(yè)
從網(wǎng)頁(yè)響應結果我們可以看到,每個(gè)文章的標題和鏈接分別位于“title”標簽和“cover”標簽后面,所以我們可以直接使用正則表達式來(lái)解析它們
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
解析后的結果如下
3、保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
到此這個(gè)爬蟲(chóng)就完成了,我們來(lái)看看最終的結果
完整代碼
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
# 請求網(wǎng)頁(yè)
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
for i in range(2):#設置for循環(huán)實(shí)現翻頁(yè),爬取多頁(yè)內容,這里range括號內的參數可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
# 解析網(wǎng)頁(yè)
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
# print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
# 保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防出發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5 查看全部
querylist采集微信公眾號文章(Python批量抓取公眾號文章
)
PS:如需Python學(xué)習資料,可點(diǎn)擊下方鏈接自行獲取
Python免費學(xué)習資料和群交流答案點(diǎn)擊加入
爬取的方法有很多種。今天給大家分享一個(gè)更簡(jiǎn)單的方法,就是通過(guò)微信公眾號后臺的“超鏈接”功能進(jìn)行爬取??赡苡械呐笥堰€沒(méi)有接觸過(guò)微信公眾號后臺,這里放個(gè)圖讓大家了解一下

這里有的朋友可能會(huì )說(shuō),我后臺無(wú)法登錄公眾號,怎么辦? ? ?
沒(méi)關(guān)系,雖然每個(gè)爬蟲(chóng)的目的都是為了得到我們想要的結果,但這不是我們學(xué)習的重點(diǎn)。我們學(xué)習的重點(diǎn)是爬取過(guò)程,也就是我們如何獲取目標數據,所以無(wú)法公開(kāi)登錄 看完這篇文章后,后臺的朋友可能無(wú)法獲取到最終爬取結果,但看完這篇文章你也會(huì )有所收獲。
一、前期準備
選擇要抓取的目標公眾號
點(diǎn)擊超鏈接-進(jìn)入編輯超鏈接界面-輸入我們需要抓取的搜索目標公眾號
今天我們以“數據分析”公眾號的爬取為例給大家介紹

點(diǎn)擊公眾號查看每個(gè)文章對應的標題信息

我們這次爬蟲(chóng)的目標是獲取文章的標題和對應的鏈接。
二、開(kāi)始爬取
爬蟲(chóng)的三個(gè)步驟:
1、請求網(wǎng)頁(yè)
首先導入我們使用這個(gè)爬蟲(chóng)需要的第三方庫
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
找到我們抓取的目標數據所在的位置,點(diǎn)擊搜索得到的包,獲取目標URL和請求頭信息

請求網(wǎng)頁(yè)
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
url='https://mp.weixin.qq.com/cgi-b ... 39%3B
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
print(html)
這里的請求頭信息必須加上cookie信息,否則無(wú)法獲取網(wǎng)頁(yè)信息
網(wǎng)頁(yè)的請求結果如下圖所示。紅框標記了我們需要的文章title 和文章 鏈接

2、分析網(wǎng)頁(yè)
從網(wǎng)頁(yè)響應結果我們可以看到,每個(gè)文章的標題和鏈接分別位于“title”標簽和“cover”標簽后面,所以我們可以直接使用正則表達式來(lái)解析它們
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
解析后的結果如下

3、保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防觸發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
到此這個(gè)爬蟲(chóng)就完成了,我們來(lái)看看最終的結果

完整代碼
import re#用來(lái)解析網(wǎng)頁(yè)
import requests#用來(lái)請求網(wǎng)頁(yè)
import csv#用來(lái)保存數據
import time#用來(lái)設置每次爬取間隔的時(shí)間
# 請求網(wǎng)頁(yè)
index=0
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'cookie': 'pgv_pvi=2389011456; RK=x4Sdy3WsT4; ptcz=4a2fe0ffda6742a230c94f168291afcce2bd001e5d6615132b55da90559cd463; pgv_pvid=6989331736; _ga=GA1.2.735850052.1585832762; ptui_loginuin=1207020736; ua_id=iJuK7hnHjcUE0e2dAAAAAHzCRcatCWOiHc-hdkhSDL4=; __guid=166713058.1972731636944397800.1590316882436.5461; openid2ticket_oY8wqwesgvgkdQ69wUeM5UxhOV5c=ION52/k2w4M3o44iht5BRt5yCyxP/3IaRXJ84RIpRZA=; mm_lang=zh_CN; pac_uid=0_5ecd1592971c3; uin=o1240069166; skey=@YLtvDuKyj; pgv_info=ssid=s4875389884; pgv_si=s8410697728; uuid=62839906b2a77b5f098cd91979af8b33; rand_info=CAESIC53TQFCwjIe4ZsrTRKvSs+ocfs4UTsj9swrrNwosjCd; slave_bizuin=3240807523; data_bizuin=3240807523; bizuin=3240807523; data_ticket=AiTk/OFWXCKxhaenCvEuP06mwWTI6YqCyt+74hoaXaNtKBbcnq//ZTXHzqByMhK6; slave_sid=YndxeFhCSkU5OUJtdFYycW9zN29FcG51NU5GNElBM3I2RF9wVjJBRGx2bWxrTXdiMDZFYzllUWNaMlN4N0RsOTlVMDRxZFZEMjJXdlRZcXBVOGptQ2ZDSVZiOEJlQW5BZDVCWlkzSnJ6WWNPWVRiN1J0cldCd0pvbTc3RGRiMm9pZ3ZISTl6WWhDUmNCZ2s3; slave_user=gh_5d822fe7fd08; xid=9794daa60db66fcf7a65c4054e3d68ce; mmad_session=43d4e5247a6b025b67ba3abd48d27a309ec4713911b6ef6f23cddb4b9953e771354ad1572fbc3fa895051725e95abb887cf2d03e9864084974db75c8588189699ea5b20b8fe35073831446ef98d24de600f107fe69d79646a3dd2907ab712e1f11de1c56c245721266e7088080fefde3; ts_last=mp.weixin.qq.com/cgi-bin/frame; ts_uid=1963034896; monitor_count=15'
}#請求頭信息,這里cookie信息必須添加,否則得不到網(wǎng)頁(yè)信息
for i in range(2):#設置for循環(huán)實(shí)現翻頁(yè),爬取多頁(yè)內容,這里range括號內的參數可以更改
url='https://mp.weixin.qq.com/cgi-b ... 2Bstr(index)+'&count=5&fakeid=MjM5MjAxMDM4MA==&type=9&query=&token=59293242&lang=zh_CN&f=json&ajax=1'
response=requests.get(url,headers=headers)#得到響應內容
response.encoding='utf-8'#設置響應內容為utf-8格式
html=response.text#得到網(wǎng)頁(yè)的文本形式
# 解析網(wǎng)頁(yè)
title=re.findall('"title":"(.*?)"',html)#得到文章標題
cover=re.findall('"cover":"(.*?)"',html)#得到文章鏈接
all=zip(title,cover)#利用zip方法,將兩個(gè)列表中的數據一一對應
# print(list(all))#list是對zip方法得到的數據進(jìn)行解壓
# 保存數據
for data in all:#for循環(huán)遍歷列表
time.sleep(3)#每爬取一篇文章間隔3秒,以防出發(fā)反爬
with open('C:\\Users\\Administrator\\Desktop\\爬取公眾號文章.csv','a',encoding='utf-8-sig') as file:
#將數據保存到桌面
write=csv.writer(file)
write.writerow(data)
pass
pass
index += 5
querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2021-08-31 22:22
)
微信公眾號采集二級目錄生成工具是巧妙偽原創(chuàng )來(lái)?yè)鬩微信公眾號采集+巧妙偽原創(chuàng )+多cms版本的第三版,這個(gè)軟件可以批量偽原創(chuàng )然后批量偽原創(chuàng )檢查。這是非常值得注意的。請先在本地環(huán)境中測試。另外,這個(gè)軟件不能自動(dòng)編碼。
類(lèi)似軟件
版本說(shuō)明
軟件地址
軟件說(shuō)明
1.本軟件的作用:
為優(yōu)采云站長(cháng)準備的,也適合養站的人站群
2.運行過(guò)程:
采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新為網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
3.與上一版本對比:和之前一樣,微信公眾號文章采集,之后使用采集偽原創(chuàng )。不知道這個(gè)算不算偽原創(chuàng ),不過(guò)確實(shí)達到了偽原創(chuàng )的效果,
這個(gè)新版本偽原創(chuàng )的玩法很巧妙。是翻譯。先從中文翻譯成英文,再從英文翻譯成中文??上б惶旆g量有限,可以自行更改IP地址。 (其實(shí)不適合更新太多,一天幾條就可以了,一般如果是老站的話(huà)。關(guān)鍵詞可以快速重新排名)
如何使用
新手站長(cháng)不推薦這個(gè),因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了問(wèn)題。然后來(lái)找我。我也很弱,我也是菜鳥(niǎo)。我不想回答簡(jiǎn)單的問(wèn)題。我不會(huì )復雜。
不是你不問(wèn)我,而是希望你先百度一下,不要再問(wèn)了。有時(shí)同樣的問(wèn)題可能會(huì )被問(wèn)很多次,就會(huì )有脾氣。我是這個(gè)德行的人,請不要摘下來(lái)。還是希望和大家一起進(jìn)步。
查看全部
querylist采集微信公眾號文章(微信公眾號采集二級目錄生成工具是一款第三版巧妙偽原創(chuàng )來(lái)襲
)
微信公眾號采集二級目錄生成工具是巧妙偽原創(chuàng )來(lái)?yè)鬩微信公眾號采集+巧妙偽原創(chuàng )+多cms版本的第三版,這個(gè)軟件可以批量偽原創(chuàng )然后批量偽原創(chuàng )檢查。這是非常值得注意的。請先在本地環(huán)境中測試。另外,這個(gè)軟件不能自動(dòng)編碼。
類(lèi)似軟件
版本說(shuō)明
軟件地址
軟件說(shuō)明
1.本軟件的作用:
為優(yōu)采云站長(cháng)準備的,也適合養站的人站群
2.運行過(guò)程:
采集微信文章,然后偽原創(chuàng )點(diǎn)擊這些文章,然后更新為網(wǎng)站。整個(gè)過(guò)程是全自動(dòng)的。無(wú)需打開(kāi)后臺,通過(guò)數據庫發(fā)送。因此,需要生成靜態(tài)頁(yè)面。
3.與上一版本對比:和之前一樣,微信公眾號文章采集,之后使用采集偽原創(chuàng )。不知道這個(gè)算不算偽原創(chuàng ),不過(guò)確實(shí)達到了偽原創(chuàng )的效果,
這個(gè)新版本偽原創(chuàng )的玩法很巧妙。是翻譯。先從中文翻譯成英文,再從英文翻譯成中文??上б惶旆g量有限,可以自行更改IP地址。 (其實(shí)不適合更新太多,一天幾條就可以了,一般如果是老站的話(huà)。關(guān)鍵詞可以快速重新排名)
如何使用
新手站長(cháng)不推薦這個(gè),因為這個(gè)軟件是用來(lái)偷懶的,新手最好不要偷懶,重點(diǎn)是怕新手不懂概念,遇到問(wèn)題也解決不了問(wèn)題。然后來(lái)找我。我也很弱,我也是菜鳥(niǎo)。我不想回答簡(jiǎn)單的問(wèn)題。我不會(huì )復雜。
不是你不問(wèn)我,而是希望你先百度一下,不要再問(wèn)了。有時(shí)同樣的問(wèn)題可能會(huì )被問(wèn)很多次,就會(huì )有脾氣。我是這個(gè)德行的人,請不要摘下來(lái)。還是希望和大家一起進(jìn)步。

querylist采集微信公眾號文章(querylist采集微信公眾號文章采集-微信號采集軟件教程)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 169 次瀏覽 ? 2021-08-31 08:02
querylist采集微信公眾號文章采集-微信公眾號采集軟件是針對微信公眾號進(jìn)行內容抓取的工具,為快速采集微信公眾號文章提供方便。具體請看下面的教程:準備工作安裝并使用:pipinstallworkerget,抓取微信公眾號文章可以從這里下載安裝環(huán)境matplotlibimportpyplotsetup()創(chuàng )建項目并編譯(暫時(shí)先不編譯)#configpyplot.__version__為獲取所需項目的version信息mats_version="1.0"將本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打開(kāi)剛才編譯生成的users/username/.txt文件mats_version="1.0"#template指定一個(gè)或多個(gè)預處理的目錄mats_version_template="[+]pyglass"#當然也可以其他的打開(kāi)users/username/.txt文件并下一步。
點(diǎn)擊下一步,將指定的兩個(gè)選項拖到configure階段。#configsite接下來(lái)才可以開(kāi)始編譯config=pyplot.__version__+mats_version#編譯config_align=["left","right"]將前端配置文件放在同一文件夾下,如果要先編譯文件會(huì )將它在服務(wù)器的預處理目錄下添加絕對路徑,如果要在服務(wù)器編譯文件才需要指定文件路徑。
#windows-win="windows/config"安裝flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#編譯config_alias=["flex-directory","httpcompiler-directory"]#加載到python環(huán)境中如果你的python版本超過(guò)了python的3.6,請使用更新版本。
如果你使用的是3.6,請使用下面的命令:sudoapt-getupdatesudoapt-getupgrade檢查是否完成#gunbuild檢查下flex-directory已安裝,如果沒(méi)有則需要編譯flex-directory為你的系統c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章采集-微信號采集軟件教程)
querylist采集微信公眾號文章采集-微信公眾號采集軟件是針對微信公眾號進(jìn)行內容抓取的工具,為快速采集微信公眾號文章提供方便。具體請看下面的教程:準備工作安裝并使用:pipinstallworkerget,抓取微信公眾號文章可以從這里下載安裝環(huán)境matplotlibimportpyplotsetup()創(chuàng )建項目并編譯(暫時(shí)先不編譯)#configpyplot.__version__為獲取所需項目的version信息mats_version="1.0"將本地配置文件放到本地的users/username/.txt文件里。
#pathtothetemplatepyplot.__version__="1.0"用txt命令打開(kāi)剛才編譯生成的users/username/.txt文件mats_version="1.0"#template指定一個(gè)或多個(gè)預處理的目錄mats_version_template="[+]pyglass"#當然也可以其他的打開(kāi)users/username/.txt文件并下一步。
點(diǎn)擊下一步,將指定的兩個(gè)選項拖到configure階段。#configsite接下來(lái)才可以開(kāi)始編譯config=pyplot.__version__+mats_version#編譯config_align=["left","right"]將前端配置文件放在同一文件夾下,如果要先編譯文件會(huì )將它在服務(wù)器的預處理目錄下添加絕對路徑,如果要在服務(wù)器編譯文件才需要指定文件路徑。
#windows-win="windows/config"安裝flex-directory和httpcompiler-directory#matplotlib-import_pyplot.__version__="1.0"#編譯config_alias=["flex-directory","httpcompiler-directory"]#加載到python環(huán)境中如果你的python版本超過(guò)了python的3.6,請使用更新版本。
如果你使用的是3.6,請使用下面的命令:sudoapt-getupdatesudoapt-getupgrade檢查是否完成#gunbuild檢查下flex-directory已安裝,如果沒(méi)有則需要編譯flex-directory為你的系統c:\users\administrator\.bind:\flex-directory-project\python.exe#fastddf_project指定的variabled:\flex-directory-project\python.exe\flash.exe#letfs_perf_root()%pathfs_perf_root()%path\flex-directory-project\flash.exe\fps.exe#setpython_path=d:\flex-directory-project\python.exe\python.exe\python.exe.\flex-directory-project\flash.exeset_path=d:\flex-directory-project\python.exe\python.exe\python.exe#configurewww_imagemats_version="1.0。
querylist采集微信公眾號文章(querylist采集微信公眾號文章內容流量,樓上說(shuō)的很清楚了)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 162 次瀏覽 ? 2021-08-29 18:02
querylist采集微信公眾號文章內容流量,
樓上說(shuō)的很清楚了。我補充一點(diǎn),將今日頭條的瀏覽數據導入web,對用戶(hù)進(jìn)行畫(huà)像,提高個(gè)性化推薦率。
我想知道你們具體怎么做的?我也做過(guò)今日頭條的圖文推薦系統。如果要完成公眾號的推薦,個(gè)人認為你們至少需要:基礎數據:頭條號的賬號信息,如頭條號id、簽約、健康度、粉絲量等。產(chǎn)品數據:今日頭條推薦算法的介紹,使用pdf版的論文會(huì )好一些?,F在已有今日頭條的平臺數據,可參考相關(guān)數據建立模型的準確率、召回率等指標,結合實(shí)際情況一起設計模型,根據實(shí)際情況對模型的泛化能力、特征工程等進(jìn)行微調。
模型交叉:比如在泛化能力較差時(shí)對其他數據使用,進(jìn)行特征交叉或者對某個(gè)數據進(jìn)行偏僻標簽,從而提高泛化能力。數據一般有:檢索、關(guān)注、公眾號歷史文章等。相關(guān)性、相似性:模型初期需要考慮特征間相關(guān)性,建立連續、相關(guān)、正負相關(guān)度不等權重特征表達式。對權重特征進(jìn)行聚類(lèi)等方式提高泛化能力。精準關(guān)鍵詞、轉發(fā)量、評論量、點(diǎn)贊量、粉絲量。
只做字節跳動(dòng)的話(huà),今日頭條可以說(shuō)是非常完整的一套產(chǎn)品矩陣。另外一方面,使用推薦系統從業(yè)者,很多都會(huì )注意到背后離不開(kāi)系統的底層架構的搭建。其中包括api接口,代碼開(kāi)發(fā),系統優(yōu)化,反饋系統以及業(yè)務(wù)的指導等。 查看全部
querylist采集微信公眾號文章(querylist采集微信公眾號文章內容流量,樓上說(shuō)的很清楚了)
querylist采集微信公眾號文章內容流量,
樓上說(shuō)的很清楚了。我補充一點(diǎn),將今日頭條的瀏覽數據導入web,對用戶(hù)進(jìn)行畫(huà)像,提高個(gè)性化推薦率。
我想知道你們具體怎么做的?我也做過(guò)今日頭條的圖文推薦系統。如果要完成公眾號的推薦,個(gè)人認為你們至少需要:基礎數據:頭條號的賬號信息,如頭條號id、簽約、健康度、粉絲量等。產(chǎn)品數據:今日頭條推薦算法的介紹,使用pdf版的論文會(huì )好一些?,F在已有今日頭條的平臺數據,可參考相關(guān)數據建立模型的準確率、召回率等指標,結合實(shí)際情況一起設計模型,根據實(shí)際情況對模型的泛化能力、特征工程等進(jìn)行微調。
模型交叉:比如在泛化能力較差時(shí)對其他數據使用,進(jìn)行特征交叉或者對某個(gè)數據進(jìn)行偏僻標簽,從而提高泛化能力。數據一般有:檢索、關(guān)注、公眾號歷史文章等。相關(guān)性、相似性:模型初期需要考慮特征間相關(guān)性,建立連續、相關(guān)、正負相關(guān)度不等權重特征表達式。對權重特征進(jìn)行聚類(lèi)等方式提高泛化能力。精準關(guān)鍵詞、轉發(fā)量、評論量、點(diǎn)贊量、粉絲量。
只做字節跳動(dòng)的話(huà),今日頭條可以說(shuō)是非常完整的一套產(chǎn)品矩陣。另外一方面,使用推薦系統從業(yè)者,很多都會(huì )注意到背后離不開(kāi)系統的底層架構的搭建。其中包括api接口,代碼開(kāi)發(fā),系統優(yōu)化,反饋系統以及業(yè)務(wù)的指導等。
爬取微信公眾號怎么做?各種方法的匯總說(shuō)明
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2021-08-27 04:08
爬取微信公眾號怎么做?各種方法的匯總說(shuō)明
爬蟲(chóng)
我經(jīng)常有朋友在公眾號文章爬取方面需要幫助。這次我將各種方法做一個(gè)總結。
目前微信公眾號的抓取方式主要有以下三種:
通過(guò)爬取第三方公眾號文章聚網(wǎng)站并使用微信官方平臺引用文章接口。通過(guò)抓包程序,分析微信app界面通過(guò)第三方公眾號文章聚網(wǎng)站攀取訪(fǎng)問(wèn)公眾號文章
微信公眾號文章未提供搜外功能。直到2013年,微信投資搜狗后,搜狗搜索訪(fǎng)問(wèn)了微信公眾號數據。從此您可以通過(guò)搜狗搜索瀏覽或查詢(xún)相關(guān)公眾號和@。文章。
域名為:
搜狗微信
可以直接搜索公眾號或文章的關(guān)鍵詞。部分熱門(mén)公眾號及時(shí)更新,幾乎與微信同步。
公眾號搜索
所以,可以使用搜狗微信界面抓取一些熱門(mén)公眾號,但是有些小眾公眾號搜索不到,而且搜狗的反抓取機制更新更頻繁,獲取數據的界面變化更快,有經(jīng)常兩三個(gè)月就調整一次,這樣爬蟲(chóng)就容易掛了。這里,推薦使用selenium,爬得更省心。此外,搜狗對每個(gè)ip也有訪(fǎng)問(wèn)限制。訪(fǎng)問(wèn)太頻ip會(huì )被封鎖24小時(shí),需要購買(mǎi)ip池處理。
還有一些其他公眾號文章聚網(wǎng)站(比如門(mén)戶(hù)),也有更新不及時(shí)或者收錄的問(wèn)題。畢竟搜狗這個(gè)親兒子不好。通過(guò)微信公眾平臺引用文章interface
這個(gè)界面比較隱蔽,不能匿名訪(fǎng)問(wèn)。需要有官方賬號。最好注冊一個(gè)新的公眾號,以免被屏蔽。
先說(shuō)具體步驟:先登錄微信公眾號,進(jìn)入首頁(yè)選擇新群發(fā),然后點(diǎn)擊自建圖,在文章edit工具欄中找到超鏈接,如下圖:
點(diǎn)擊超鏈接
點(diǎn)擊這個(gè)超鏈接按鈕,會(huì )彈出一個(gè)對話(huà)框,選擇鏈接輸入法找到文章,如下圖:
找到文章
這里可以輸入公眾號名稱(chēng),回車(chē)后微信會(huì )返回匹配的公眾號列表,如下圖:
搜索公眾號
然后點(diǎn)擊你要搶的公眾號,就會(huì )顯示具體的文章列表,已經(jīng)是倒序了。最新的文章是第一個(gè)。如下圖:
文章List
微信的分頁(yè)機制比較奇怪。每個(gè)公眾號每個(gè)頁(yè)面顯示的數據項數量是不同的。分頁(yè)爬行時(shí)需要處理。
通過(guò)chrome分析網(wǎng)絡(luò )請求的數據,我們基本得到了我們想要的數據,文章鏈接、封面、發(fā)布日期、副標題等,如下圖:
網(wǎng)絡(luò )請求數據
好了,這個(gè)爬蟲(chóng)方法的原理講完了,下面開(kāi)始實(shí)際操作。
因為微信公眾平臺登錄驗證比較嚴格,輸入密碼后手機必須掃碼確認才能登錄,所以最好使用selenium進(jìn)行自動(dòng)化。具體微信界面的分析過(guò)程我就不一一列舉了,直接貼上代碼:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公眾號文章爬蟲(chóng)
'''
def __init__(self):
# 微信公眾號賬號
self.account = '286394973@qq.com'
# 微信公眾號密碼
self.pwd = 'lei4649861'
def create_driver(self):
'''
初始化 webdriver
'''
options = webdriver.ChromeOptions()
# 禁用gpu加速,防止出一些未知bug
options.add_argument('--disable-gpu')
# 這里我用 chromedriver 作為 webdriver
# 可以去 http://chromedriver.chromium.org/downloads 下載你的chrome對應版本
self.driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options)
# 設置一個(gè)隱性等待 5s
self.driver.implicitly_wait(5)
def log(self, msg):
'''
格式化打印
'''
print('------ %s ------' % msg)
def login(self):
'''
登錄拿 cookies
'''
try:
self.create_driver()
# 訪(fǎng)問(wèn)微信公眾平臺
self.driver.get('https://mp.weixin.qq.com/')
# 等待網(wǎng)頁(yè)加載完畢
time.sleep(3)
# 輸入賬號
self.driver.find_element_by_xpath("./*//input[@name='account']").clear()
self.driver.find_element_by_xpath("./*//input[@name='account']").send_keys(self.account)
# 輸入密碼
self.driver.find_element_by_xpath("./*//input[@name='password']").clear()
self.driver.find_element_by_xpath("./*//input[@name='password']").send_keys(self.pwd)
# 點(diǎn)擊登錄
self.driver.find_elements_by_class_name('btn_login')[0].click()
self.log("請拿手機掃碼二維碼登錄公眾號")
# 等待手機掃描
time.sleep(10)
self.log("登錄成功")
# 獲取cookies 然后保存到變量上,后面要用
self.cookies = dict([[x['name'], x['value']] for x in self.driver.get_cookies()])
except Exception as e:
traceback.print_exc()
finally:
# 退出 chorme
self.driver.quit()
def get_article(self, query=''):
try:
url = 'https://mp.weixin.qq.com'
# 設置headers
headers = {
"HOST": "mp.weixin.qq.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
}
# 登錄之后的微信公眾號首頁(yè)url變化為:https://mp.weixin.qq.com/cgi-b ... 51598,
# 從這里獲取token信息
response = requests.get(url=url, cookies=self.cookies)
token = re.findall(r'token=(\d+)', str(response.url))[0]
time.sleep(2)
self.log('正在查詢(xún)[ %s ]相關(guān)公眾號' % query)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
# 搜索微信公眾號接口需要傳入的參數,
# 有三個(gè)變量:微信公眾號token、隨機數random、搜索的微信公眾號名字
params = {
'action': 'search_biz',
'token': token,
'random': random.random(),
'query': query,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0',
'count': '5'
}
# 打開(kāi)搜索微信公眾號接口地址,需要傳入相關(guān)參數信息如:cookies、params、headers
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
# 取搜索結果中的第一個(gè)公眾號
lists = response.json().get('list')[0]
# 獲取這個(gè)公眾號的fakeid,后面爬取公眾號文章需要此字段
fakeid = lists.get('fakeid')
nickname = lists.get('nickname')
# 微信公眾號文章接口地址
search_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
# 搜索文章需要傳入幾個(gè)參數:登錄的公眾號token、要爬取文章的公眾號fakeid、隨機數random
params = {
'action': 'list_ex',
'token': token,
'random': random.random(),
'fakeid': fakeid,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0', # 不同頁(yè),此參數變化,變化規則為每頁(yè)加5
'count': '5',
'query': '',
'type': '9'
}
self.log('正在查詢(xún)公眾號[ %s ]相關(guān)文章' % nickname)
# 打開(kāi)搜索的微信公眾號文章列表頁(yè)
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
for per in response.json().get('app_msg_list', []):
print('title ---> %s' % per.get('title'))
print('link ---> %s' % per.get('link'))
# print('cover ---> %s' % per.get('cover'))
except Exception as e:
traceback.print_exc()
if __name__ == '__main__':
spider = Spider()
spider.login()
spider.get_article('python')
代碼僅供學(xué)習使用,沒(méi)有分頁(yè)查詢(xún)之類(lèi)的。
據網(wǎng)友介紹,這個(gè)界面也有訪(fǎng)問(wèn)頻率限制。一天幾百次不是問(wèn)題。如果訪(fǎng)問(wèn)速度過(guò)快或訪(fǎng)問(wèn)次數過(guò)多,將被封鎖 24 小時(shí)。 查看全部
爬取微信公眾號怎么做?各種方法的匯總說(shuō)明
爬蟲(chóng)
我經(jīng)常有朋友在公眾號文章爬取方面需要幫助。這次我將各種方法做一個(gè)總結。
目前微信公眾號的抓取方式主要有以下三種:
通過(guò)爬取第三方公眾號文章聚網(wǎng)站并使用微信官方平臺引用文章接口。通過(guò)抓包程序,分析微信app界面通過(guò)第三方公眾號文章聚網(wǎng)站攀取訪(fǎng)問(wèn)公眾號文章
微信公眾號文章未提供搜外功能。直到2013年,微信投資搜狗后,搜狗搜索訪(fǎng)問(wèn)了微信公眾號數據。從此您可以通過(guò)搜狗搜索瀏覽或查詢(xún)相關(guān)公眾號和@。文章。
域名為:
搜狗微信
可以直接搜索公眾號或文章的關(guān)鍵詞。部分熱門(mén)公眾號及時(shí)更新,幾乎與微信同步。
公眾號搜索
所以,可以使用搜狗微信界面抓取一些熱門(mén)公眾號,但是有些小眾公眾號搜索不到,而且搜狗的反抓取機制更新更頻繁,獲取數據的界面變化更快,有經(jīng)常兩三個(gè)月就調整一次,這樣爬蟲(chóng)就容易掛了。這里,推薦使用selenium,爬得更省心。此外,搜狗對每個(gè)ip也有訪(fǎng)問(wèn)限制。訪(fǎng)問(wèn)太頻ip會(huì )被封鎖24小時(shí),需要購買(mǎi)ip池處理。
還有一些其他公眾號文章聚網(wǎng)站(比如門(mén)戶(hù)),也有更新不及時(shí)或者收錄的問(wèn)題。畢竟搜狗這個(gè)親兒子不好。通過(guò)微信公眾平臺引用文章interface
這個(gè)界面比較隱蔽,不能匿名訪(fǎng)問(wèn)。需要有官方賬號。最好注冊一個(gè)新的公眾號,以免被屏蔽。
先說(shuō)具體步驟:先登錄微信公眾號,進(jìn)入首頁(yè)選擇新群發(fā),然后點(diǎn)擊自建圖,在文章edit工具欄中找到超鏈接,如下圖:
點(diǎn)擊超鏈接
點(diǎn)擊這個(gè)超鏈接按鈕,會(huì )彈出一個(gè)對話(huà)框,選擇鏈接輸入法找到文章,如下圖:
找到文章
這里可以輸入公眾號名稱(chēng),回車(chē)后微信會(huì )返回匹配的公眾號列表,如下圖:
搜索公眾號
然后點(diǎn)擊你要搶的公眾號,就會(huì )顯示具體的文章列表,已經(jīng)是倒序了。最新的文章是第一個(gè)。如下圖:
文章List
微信的分頁(yè)機制比較奇怪。每個(gè)公眾號每個(gè)頁(yè)面顯示的數據項數量是不同的。分頁(yè)爬行時(shí)需要處理。
通過(guò)chrome分析網(wǎng)絡(luò )請求的數據,我們基本得到了我們想要的數據,文章鏈接、封面、發(fā)布日期、副標題等,如下圖:
網(wǎng)絡(luò )請求數據
好了,這個(gè)爬蟲(chóng)方法的原理講完了,下面開(kāi)始實(shí)際操作。
因為微信公眾平臺登錄驗證比較嚴格,輸入密碼后手機必須掃碼確認才能登錄,所以最好使用selenium進(jìn)行自動(dòng)化。具體微信界面的分析過(guò)程我就不一一列舉了,直接貼上代碼:
import re
import time
import random
import traceback
import requests
from selenium import webdriver
class Spider(object):
'''
微信公眾號文章爬蟲(chóng)
'''
def __init__(self):
# 微信公眾號賬號
self.account = '286394973@qq.com'
# 微信公眾號密碼
self.pwd = 'lei4649861'
def create_driver(self):
'''
初始化 webdriver
'''
options = webdriver.ChromeOptions()
# 禁用gpu加速,防止出一些未知bug
options.add_argument('--disable-gpu')
# 這里我用 chromedriver 作為 webdriver
# 可以去 http://chromedriver.chromium.org/downloads 下載你的chrome對應版本
self.driver = webdriver.Chrome(executable_path='./chromedriver', chrome_options=options)
# 設置一個(gè)隱性等待 5s
self.driver.implicitly_wait(5)
def log(self, msg):
'''
格式化打印
'''
print('------ %s ------' % msg)
def login(self):
'''
登錄拿 cookies
'''
try:
self.create_driver()
# 訪(fǎng)問(wèn)微信公眾平臺
self.driver.get('https://mp.weixin.qq.com/')
# 等待網(wǎng)頁(yè)加載完畢
time.sleep(3)
# 輸入賬號
self.driver.find_element_by_xpath("./*//input[@name='account']").clear()
self.driver.find_element_by_xpath("./*//input[@name='account']").send_keys(self.account)
# 輸入密碼
self.driver.find_element_by_xpath("./*//input[@name='password']").clear()
self.driver.find_element_by_xpath("./*//input[@name='password']").send_keys(self.pwd)
# 點(diǎn)擊登錄
self.driver.find_elements_by_class_name('btn_login')[0].click()
self.log("請拿手機掃碼二維碼登錄公眾號")
# 等待手機掃描
time.sleep(10)
self.log("登錄成功")
# 獲取cookies 然后保存到變量上,后面要用
self.cookies = dict([[x['name'], x['value']] for x in self.driver.get_cookies()])
except Exception as e:
traceback.print_exc()
finally:
# 退出 chorme
self.driver.quit()
def get_article(self, query=''):
try:
url = 'https://mp.weixin.qq.com'
# 設置headers
headers = {
"HOST": "mp.weixin.qq.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
}
# 登錄之后的微信公眾號首頁(yè)url變化為:https://mp.weixin.qq.com/cgi-b ... 51598,
# 從這里獲取token信息
response = requests.get(url=url, cookies=self.cookies)
token = re.findall(r'token=(\d+)', str(response.url))[0]
time.sleep(2)
self.log('正在查詢(xún)[ %s ]相關(guān)公眾號' % query)
search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
# 搜索微信公眾號接口需要傳入的參數,
# 有三個(gè)變量:微信公眾號token、隨機數random、搜索的微信公眾號名字
params = {
'action': 'search_biz',
'token': token,
'random': random.random(),
'query': query,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0',
'count': '5'
}
# 打開(kāi)搜索微信公眾號接口地址,需要傳入相關(guān)參數信息如:cookies、params、headers
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
# 取搜索結果中的第一個(gè)公眾號
lists = response.json().get('list')[0]
# 獲取這個(gè)公眾號的fakeid,后面爬取公眾號文章需要此字段
fakeid = lists.get('fakeid')
nickname = lists.get('nickname')
# 微信公眾號文章接口地址
search_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
# 搜索文章需要傳入幾個(gè)參數:登錄的公眾號token、要爬取文章的公眾號fakeid、隨機數random
params = {
'action': 'list_ex',
'token': token,
'random': random.random(),
'fakeid': fakeid,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'begin': '0', # 不同頁(yè),此參數變化,變化規則為每頁(yè)加5
'count': '5',
'query': '',
'type': '9'
}
self.log('正在查詢(xún)公眾號[ %s ]相關(guān)文章' % nickname)
# 打開(kāi)搜索的微信公眾號文章列表頁(yè)
response = requests.get(search_url, cookies=self.cookies, headers=headers, params=params)
time.sleep(2)
for per in response.json().get('app_msg_list', []):
print('title ---> %s' % per.get('title'))
print('link ---> %s' % per.get('link'))
# print('cover ---> %s' % per.get('cover'))
except Exception as e:
traceback.print_exc()
if __name__ == '__main__':
spider = Spider()
spider.login()
spider.get_article('python')
代碼僅供學(xué)習使用,沒(méi)有分頁(yè)查詢(xún)之類(lèi)的。
據網(wǎng)友介紹,這個(gè)界面也有訪(fǎng)問(wèn)頻率限制。一天幾百次不是問(wèn)題。如果訪(fǎng)問(wèn)速度過(guò)快或訪(fǎng)問(wèn)次數過(guò)多,將被封鎖 24 小時(shí)。