
querylist采集微信公眾號文章
高蒙2017/02/0613:491.0w瀏覽0評論
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2021-08-27 04:04
首頁(yè) ?PHP 筆記? 如何使用 php采集微信公號文章方法
如何使用php采集微信公號文章
高萌 2017/02/06 13:491.0w 瀏覽 0 條評論 PHP
最近有采集微信公號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于列表地址的獲取,我們后面再研究。在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),是的
最近有采集微信官方號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于list地址的獲取,我們以后再研究。
在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版本)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。
以下是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步完善。
/**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?'http://mp.weixin.qq.com';
private???$wxgzherr=?'公眾號二維碼下載失敗=>';
private???$wximgerr=?'圖片下載失敗=>';
private???$direrr??=?'文件夾創(chuàng )建失??!';
private???$fileerr?=?'資源不存在!';
private???$dirurl??=?'';
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir='',$qcode=false)
????{
$this->dirurl?=?$dir?:'/Uploads/'.date('Ymd',time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array('msg'=>$this->direrr,'code'=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array('msg'=>$this->fileerr,'code'=>500)));
????????}
????????//?內容主體
????????preg_match('/[\s\S]*?/',$file,$content);
????????//?標題
????????preg_match('/(.*?)/',$file,$title);
????????$title?=?$title?$title[1]:'';
????????//?時(shí)間
????????preg_match('/(.*?)/',$file,$time);
????????$time?=?$time?strtotime($time[1]):'';
????????//?公眾號
????????preg_match('/(.*?)/',$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:'';
????????//?微信號
????????preg_match('/([\s\S]*?)/',$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:'';
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match('/window.sg_qr_code="(.*?)";/',$file,$qcode);
????????????$qcodeurl?=?str_replace('\x26amp;','&',$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match('/(.*?)/',$file,$tag);
????????$tag?=?$tag?$tag[1]:'';
????????//?圖片
????????preg_match_all('//',$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?'data-src';
????????????$new[]?=?'src';
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array('content'=>$content,'title'=>$title,'time'=>$time,'wxgzh'=>$wxgzh,'wxh'=>$wxh,'qcode'=>$qcode?:'','tag'=>$tag?:'','comment'=>$comment);
????????return?json_encode(array('data'=>$data,'code'=>200,'msg'=>'ok'));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir='',$image='')
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array('jpeg','png','jpg');
????????$filename?=?$dir.'/'.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode('=',$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?'.'.$ext[1];
????????}else{
????????????$filename?.=?'.gif';
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url='')
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace('/s','/mp/getcomment',$url).'%3D';
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.'/error.log',date('Y-m-d?H:i:s',time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=''){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
使用方法:
$url?=?'';
$article?=?new?DownWxArticle();
$article->get_file_article($url,'',true); 查看全部
高蒙2017/02/0613:491.0w瀏覽0評論
首頁(yè) ?PHP 筆記? 如何使用 php采集微信公號文章方法
如何使用php采集微信公號文章
高萌 2017/02/06 13:491.0w 瀏覽 0 條評論 PHP
最近有采集微信公號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于列表地址的獲取,我們后面再研究。在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),是的
最近有采集微信官方號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于list地址的獲取,我們以后再研究。
在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版本)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。
以下是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步完善。
/**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?'http://mp.weixin.qq.com';
private???$wxgzherr=?'公眾號二維碼下載失敗=>';
private???$wximgerr=?'圖片下載失敗=>';
private???$direrr??=?'文件夾創(chuàng )建失??!';
private???$fileerr?=?'資源不存在!';
private???$dirurl??=?'';
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir='',$qcode=false)
????{
$this->dirurl?=?$dir?:'/Uploads/'.date('Ymd',time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array('msg'=>$this->direrr,'code'=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array('msg'=>$this->fileerr,'code'=>500)));
????????}
????????//?內容主體
????????preg_match('/[\s\S]*?/',$file,$content);
????????//?標題
????????preg_match('/(.*?)/',$file,$title);
????????$title?=?$title?$title[1]:'';
????????//?時(shí)間
????????preg_match('/(.*?)/',$file,$time);
????????$time?=?$time?strtotime($time[1]):'';
????????//?公眾號
????????preg_match('/(.*?)/',$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:'';
????????//?微信號
????????preg_match('/([\s\S]*?)/',$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:'';
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match('/window.sg_qr_code="(.*?)";/',$file,$qcode);
????????????$qcodeurl?=?str_replace('\x26amp;','&',$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match('/(.*?)/',$file,$tag);
????????$tag?=?$tag?$tag[1]:'';
????????//?圖片
????????preg_match_all('//',$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?'data-src';
????????????$new[]?=?'src';
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array('content'=>$content,'title'=>$title,'time'=>$time,'wxgzh'=>$wxgzh,'wxh'=>$wxh,'qcode'=>$qcode?:'','tag'=>$tag?:'','comment'=>$comment);
????????return?json_encode(array('data'=>$data,'code'=>200,'msg'=>'ok'));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir='',$image='')
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array('jpeg','png','jpg');
????????$filename?=?$dir.'/'.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode('=',$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?'.'.$ext[1];
????????}else{
????????????$filename?.=?'.gif';
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url='')
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace('/s','/mp/getcomment',$url).'%3D';
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.'/error.log',date('Y-m-d?H:i:s',time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=''){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
使用方法:
$url?=?'';
$article?=?new?DownWxArticle();
$article->get_file_article($url,'',true);
微軟翻譯百度百科微信公眾號文章文章內容內容
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2021-08-25 19:05
querylist采集微信公眾號文章內容
1、文件查看txt文件。
2、輸入requesturl地址參數。
3、按回車(chē)鍵。
自己在家做爬蟲(chóng)三個(gè)步驟:1.找兩篇自己想要的文章,下載文章;2.把下載下來(lái)的文章全部request一次,再下載下一篇;3.批量處理所有的圖片,并且命名為json參數,當然,其中還有一點(diǎn)機智。
百度,
...
-us/windows/hardware/msie/30.0.2015/scripts/jsdebug.conf
使用微軟翻譯百度百科微信公眾號文章...
留意官方文檔:微信公眾號網(wǎng)頁(yè)使用的數據接口都是有文檔說(shuō)明的。
以前用騰訊統計!
實(shí)踐中,我這邊通常是一次性request有幾千的圖片然后就writecode寫(xiě)入數據庫。成功率在80%多。感覺(jué)更多還是和熟練程度有關(guān)吧。
官方有相關(guān)的文檔,
微信公眾號文章有很多參數組成比如說(shuō)頭圖,公眾號標題,注冊時(shí)間,文章列表,是否包含廣告字樣等。微信公眾號推送文章,首先第一步就是獲取圖片url,然后再查詢(xún)請求,請求的參數就是公眾號名稱(chēng),文章文章標題,文章內容,原文鏈接,圖片url等。 查看全部
微軟翻譯百度百科微信公眾號文章文章內容內容
querylist采集微信公眾號文章內容
1、文件查看txt文件。
2、輸入requesturl地址參數。
3、按回車(chē)鍵。
自己在家做爬蟲(chóng)三個(gè)步驟:1.找兩篇自己想要的文章,下載文章;2.把下載下來(lái)的文章全部request一次,再下載下一篇;3.批量處理所有的圖片,并且命名為json參數,當然,其中還有一點(diǎn)機智。
百度,
...
-us/windows/hardware/msie/30.0.2015/scripts/jsdebug.conf
使用微軟翻譯百度百科微信公眾號文章...
留意官方文檔:微信公眾號網(wǎng)頁(yè)使用的數據接口都是有文檔說(shuō)明的。
以前用騰訊統計!
實(shí)踐中,我這邊通常是一次性request有幾千的圖片然后就writecode寫(xiě)入數據庫。成功率在80%多。感覺(jué)更多還是和熟練程度有關(guān)吧。
官方有相關(guān)的文檔,
微信公眾號文章有很多參數組成比如說(shuō)頭圖,公眾號標題,注冊時(shí)間,文章列表,是否包含廣告字樣等。微信公眾號推送文章,首先第一步就是獲取圖片url,然后再查詢(xún)請求,請求的參數就是公眾號名稱(chēng),文章文章標題,文章內容,原文鏈接,圖片url等。
搜狗搜索采集公眾號歷史消息(圖)問(wèn)題解析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2021-08-24 07:37
通過(guò)搜狗搜索采集公眾號的歷史記錄存在一些問(wèn)題:
1、有驗證碼;
2、歷史消息列表只有最近10條群發(fā)消息;
3、文章地址有有效期;
4、據說(shuō)批量采集需要改ip;
通過(guò)我之前的文章方法,沒(méi)有出現這樣的問(wèn)題,雖然采集系統設置不像傳統的采集器寫(xiě)規則爬行那么簡(jiǎn)單。但是batch采集構建一次后的效率還是可以的。而且采集的文章地址是永久有效的,你可以通過(guò)采集獲取一個(gè)公眾號的所有歷史信息。
先從公眾號文章的鏈接地址說(shuō)起:
1、微信右上角菜單復制的鏈接地址:
2、從歷史消息列表中獲取的地址:
#wechat_redirect
3、完整真實(shí)地址:
%3D%3D&devicetype=iOS10.1.1&version=16050120&nettype=WIFI&fontScale=100&pass_ticket=FGRyGfXLPEa4AeOsIZu7KFJo6CiXOZex83Y5YBRglW4%3D&1w_head
以上三個(gè)地址是同一篇文章文章的地址,在不同位置獲取時(shí)得到三個(gè)完全不同的結果。
和歷史新聞頁(yè)面一樣,微信也有自動(dòng)添加參數的機制。第一個(gè)地址是通過(guò)復制鏈接獲得的,看起來(lái)像一個(gè)變相的代碼。其實(shí)沒(méi)用,我們不去想。第二個(gè)地址是通過(guò)上面文章介紹的方法從json文章歷史消息列表中得到的鏈接地址,我們可以把這個(gè)地址保存到數據庫中。然后就可以通過(guò)這個(gè)地址從服務(wù)器獲取文章的內容了。第三個(gè)鏈接添加參數后,目的是讓文章頁(yè)面中的閱讀js獲取閱讀和點(diǎn)贊的json結果。在我們之前的文章方法中,因為文章頁(yè)面是由客戶(hù)端打開(kāi)顯示的,因為有這些參數,文章頁(yè)面中的js會(huì )自動(dòng)獲取閱讀量,所以我們可以通過(guò)代理服務(wù)獲取這個(gè)文章的閱讀量。
本文章的內容是根據本專(zhuān)欄前面文章介紹的方法獲得的大量微信文章,我們詳細研究了如何獲取文章內容和其他一些有用的信息。方法。
?。ㄎ恼耹ist 保存在我的數據庫中,一些字段)
1、Get文章源代碼:
文章源代碼可以通過(guò)php函數file_get_content()讀入一個(gè)變量。因為微信文章的源碼可以從瀏覽器打開(kāi),這里就不貼了,以免浪費頁(yè)面空間。
2、源代碼中的有用信息:
1)原創(chuàng )內容:
原創(chuàng )內容收錄在一個(gè)標簽中,通過(guò)php代碼獲?。?br /> <p> 查看全部
搜狗搜索采集公眾號歷史消息(圖)問(wèn)題解析
通過(guò)搜狗搜索采集公眾號的歷史記錄存在一些問(wèn)題:
1、有驗證碼;
2、歷史消息列表只有最近10條群發(fā)消息;
3、文章地址有有效期;
4、據說(shuō)批量采集需要改ip;
通過(guò)我之前的文章方法,沒(méi)有出現這樣的問(wèn)題,雖然采集系統設置不像傳統的采集器寫(xiě)規則爬行那么簡(jiǎn)單。但是batch采集構建一次后的效率還是可以的。而且采集的文章地址是永久有效的,你可以通過(guò)采集獲取一個(gè)公眾號的所有歷史信息。
先從公眾號文章的鏈接地址說(shuō)起:
1、微信右上角菜單復制的鏈接地址:
2、從歷史消息列表中獲取的地址:
#wechat_redirect
3、完整真實(shí)地址:
%3D%3D&devicetype=iOS10.1.1&version=16050120&nettype=WIFI&fontScale=100&pass_ticket=FGRyGfXLPEa4AeOsIZu7KFJo6CiXOZex83Y5YBRglW4%3D&1w_head
以上三個(gè)地址是同一篇文章文章的地址,在不同位置獲取時(shí)得到三個(gè)完全不同的結果。
和歷史新聞頁(yè)面一樣,微信也有自動(dòng)添加參數的機制。第一個(gè)地址是通過(guò)復制鏈接獲得的,看起來(lái)像一個(gè)變相的代碼。其實(shí)沒(méi)用,我們不去想。第二個(gè)地址是通過(guò)上面文章介紹的方法從json文章歷史消息列表中得到的鏈接地址,我們可以把這個(gè)地址保存到數據庫中。然后就可以通過(guò)這個(gè)地址從服務(wù)器獲取文章的內容了。第三個(gè)鏈接添加參數后,目的是讓文章頁(yè)面中的閱讀js獲取閱讀和點(diǎn)贊的json結果。在我們之前的文章方法中,因為文章頁(yè)面是由客戶(hù)端打開(kāi)顯示的,因為有這些參數,文章頁(yè)面中的js會(huì )自動(dòng)獲取閱讀量,所以我們可以通過(guò)代理服務(wù)獲取這個(gè)文章的閱讀量。
本文章的內容是根據本專(zhuān)欄前面文章介紹的方法獲得的大量微信文章,我們詳細研究了如何獲取文章內容和其他一些有用的信息。方法。

?。ㄎ恼耹ist 保存在我的數據庫中,一些字段)
1、Get文章源代碼:
文章源代碼可以通過(guò)php函數file_get_content()讀入一個(gè)變量。因為微信文章的源碼可以從瀏覽器打開(kāi),這里就不貼了,以免浪費頁(yè)面空間。
2、源代碼中的有用信息:
1)原創(chuàng )內容:
原創(chuàng )內容收錄在一個(gè)標簽中,通過(guò)php代碼獲?。?br /> <p>
querylist采集微信公眾號文章文章的關(guān)鍵詞解析服務(wù)參考
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 169 次瀏覽 ? 2021-08-22 21:05
querylist采集微信公眾號文章的關(guān)鍵詞,并不完全是文章中的關(guān)鍵詞,而是“信息流”里的一些包含公眾號相關(guān)關(guān)鍵詞的詞。也就是你點(diǎn)開(kāi)“信息流”,頁(yè)面里會(huì )出現公眾號文章的鏈接(你在輸入框里輸入關(guān)鍵詞時(shí),它并不要求你給文章添加關(guān)鍵詞)。在在篩選出的鏈接頁(yè)面的右上角,會(huì )看到一個(gè)藍色方框的token,即唯一的權威token。
發(fā)現querylist的作用,關(guān)鍵詞過(guò)濾,
querylist是一個(gè)文章關(guān)鍵詞的數據庫,通過(guò)文章標題點(diǎn)擊querylist查看文章,
querylist提供了你所關(guān)注的文章的一些常見(jiàn)的關(guān)鍵詞。關(guān)鍵詞解析服務(wù)一般用于分發(fā)效果的衡量。有時(shí)可以通過(guò)監測關(guān)鍵詞的變化情況進(jìn)行分發(fā)的質(zhì)量和效果的衡量。
分享querylist,供參考
querylist不能理解為鏈接數量,可以理解為你給這篇文章添加關(guān)鍵詞時(shí)的“信息流”位置。
在文章詳情頁(yè)面的主圖是一個(gè)唯一的query地址,在這個(gè)query地址下,又會(huì )有很多很多的文章在你的瀏覽過(guò)程中展示,每篇文章都是獨立,不會(huì )共享id。在文章詳情頁(yè)面頂部的顯示文章時(shí),展示的query地址不只是顯示文章這一個(gè),每一篇文章會(huì )有不同的展示位置。而在文章詳情頁(yè)面中是所有顯示的文章都要顯示。因此,文章詳情頁(yè)只能展示這一篇文章,既可以鏈接到這一篇文章,也可以分別鏈接到n篇文章。
所以,當這一篇文章被多篇文章顯示之后,說(shuō)明這一篇沒(méi)有被多篇文章展示,屬于臨時(shí)狀態(tài),過(guò)一段時(shí)間后,再重新搜索一遍它,再次確認被多篇文章展示過(guò)。所以,querylist不是文章數量,而是query地址。不能理解為鏈接數量。 查看全部
querylist采集微信公眾號文章文章的關(guān)鍵詞解析服務(wù)參考
querylist采集微信公眾號文章的關(guān)鍵詞,并不完全是文章中的關(guān)鍵詞,而是“信息流”里的一些包含公眾號相關(guān)關(guān)鍵詞的詞。也就是你點(diǎn)開(kāi)“信息流”,頁(yè)面里會(huì )出現公眾號文章的鏈接(你在輸入框里輸入關(guān)鍵詞時(shí),它并不要求你給文章添加關(guān)鍵詞)。在在篩選出的鏈接頁(yè)面的右上角,會(huì )看到一個(gè)藍色方框的token,即唯一的權威token。
發(fā)現querylist的作用,關(guān)鍵詞過(guò)濾,
querylist是一個(gè)文章關(guān)鍵詞的數據庫,通過(guò)文章標題點(diǎn)擊querylist查看文章,
querylist提供了你所關(guān)注的文章的一些常見(jiàn)的關(guān)鍵詞。關(guān)鍵詞解析服務(wù)一般用于分發(fā)效果的衡量。有時(shí)可以通過(guò)監測關(guān)鍵詞的變化情況進(jìn)行分發(fā)的質(zhì)量和效果的衡量。
分享querylist,供參考
querylist不能理解為鏈接數量,可以理解為你給這篇文章添加關(guān)鍵詞時(shí)的“信息流”位置。
在文章詳情頁(yè)面的主圖是一個(gè)唯一的query地址,在這個(gè)query地址下,又會(huì )有很多很多的文章在你的瀏覽過(guò)程中展示,每篇文章都是獨立,不會(huì )共享id。在文章詳情頁(yè)面頂部的顯示文章時(shí),展示的query地址不只是顯示文章這一個(gè),每一篇文章會(huì )有不同的展示位置。而在文章詳情頁(yè)面中是所有顯示的文章都要顯示。因此,文章詳情頁(yè)只能展示這一篇文章,既可以鏈接到這一篇文章,也可以分別鏈接到n篇文章。
所以,當這一篇文章被多篇文章顯示之后,說(shuō)明這一篇沒(méi)有被多篇文章展示,屬于臨時(shí)狀態(tài),過(guò)一段時(shí)間后,再重新搜索一遍它,再次確認被多篇文章展示過(guò)。所以,querylist不是文章數量,而是query地址。不能理解為鏈接數量。
微信文章自動(dòng)化爬取過(guò)程中出現的問(wèn)題及解決辦法!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 183 次瀏覽 ? 2021-08-21 03:30
實(shí)現功能
微信賬號目前可以獲取具體指標:biz、昵稱(chēng)、微信ID、頭像、二維碼、個(gè)人資料、認證、認證信息、賬號主題、歸屬地等
WeChat文章目前可用的具體指標(包括但不限于):閱讀數、點(diǎn)贊(瀏覽)數、評論內容和總評論數、正文內容、圖片、視頻地址、是否原創(chuàng )、永久鏈接原文等
實(shí)施技術(shù)和工具
經(jīng)過(guò)大量長(cháng)期測試,保證微信客戶(hù)端采集300公眾號每天文章數據穩定運行,不會(huì )被封號。如果您頻繁訪(fǎng)問(wèn)微信公眾號的歷史消息頁(yè)面,將被禁止24小時(shí)。
目前比較好的策略:訪(fǎng)問(wèn)文章頁(yè)面后休眠5秒,訪(fǎng)問(wèn)微信公眾號歷史消息頁(yè)面后休眠150秒。
微信購買(mǎi)渠道qq客服:1653925422 60元購買(mǎi)了一個(gè)非實(shí)名微信賬號。購買(mǎi)賬號后,不得添加好友,否則將被微信賬號永久屏蔽為營(yíng)銷(xiāo)賬號。僅用于訪(fǎng)問(wèn)微信。公眾號文章不會(huì )被封。
詳細設計
1、 先準備一批微信公眾號biz,爬進(jìn)redis隊列。
數據庫設計
兩個(gè)redis消息隊列
1、微信公眾號業(yè)務(wù)隊列待抓取
wechat_biz_quene list 先進(jìn)先出隊列
復制代碼
2、獲取的微信文章detail頁(yè)面url隊列用于遍歷獲取的歷史文章對應的閱讀、點(diǎn)贊、評論。
<p>2、在模擬器中打開(kāi)微信atx框架,模擬點(diǎn)擊要運行的第一個(gè)公眾號拼接的歷史消息界面,后續流程和數據流邏輯如下圖所示 查看全部
微信文章自動(dòng)化爬取過(guò)程中出現的問(wèn)題及解決辦法!
實(shí)現功能
微信賬號目前可以獲取具體指標:biz、昵稱(chēng)、微信ID、頭像、二維碼、個(gè)人資料、認證、認證信息、賬號主題、歸屬地等
WeChat文章目前可用的具體指標(包括但不限于):閱讀數、點(diǎn)贊(瀏覽)數、評論內容和總評論數、正文內容、圖片、視頻地址、是否原創(chuàng )、永久鏈接原文等
實(shí)施技術(shù)和工具
經(jīng)過(guò)大量長(cháng)期測試,保證微信客戶(hù)端采集300公眾號每天文章數據穩定運行,不會(huì )被封號。如果您頻繁訪(fǎng)問(wèn)微信公眾號的歷史消息頁(yè)面,將被禁止24小時(shí)。
目前比較好的策略:訪(fǎng)問(wèn)文章頁(yè)面后休眠5秒,訪(fǎng)問(wèn)微信公眾號歷史消息頁(yè)面后休眠150秒。
微信購買(mǎi)渠道qq客服:1653925422 60元購買(mǎi)了一個(gè)非實(shí)名微信賬號。購買(mǎi)賬號后,不得添加好友,否則將被微信賬號永久屏蔽為營(yíng)銷(xiāo)賬號。僅用于訪(fǎng)問(wèn)微信。公眾號文章不會(huì )被封。
詳細設計
1、 先準備一批微信公眾號biz,爬進(jìn)redis隊列。
數據庫設計
兩個(gè)redis消息隊列
1、微信公眾號業(yè)務(wù)隊列待抓取
wechat_biz_quene list 先進(jìn)先出隊列
復制代碼
2、獲取的微信文章detail頁(yè)面url隊列用于遍歷獲取的歷史文章對應的閱讀、點(diǎn)贊、評論。
<p>2、在模擬器中打開(kāi)微信atx框架,模擬點(diǎn)擊要運行的第一個(gè)公眾號拼接的歷史消息界面,后續流程和數據流邏輯如下圖所示
jsonp對文本的post方式提供支持的querylist集合:xxxpost提交的請求
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 91 次瀏覽 ? 2021-08-20 01:03
querylist采集微信公眾號文章信息的querylist集合。請求url“/”返回querylist集合:xxxtitletextcontent\wx:href=''\wx:src=''\wx:msg=''\request'''url這個(gè)路徑下,有“\\users\\{{username}}"”字段,記錄的是用戶(hù)信息如果請求的url不是users,請使用post方式發(fā)送請求,如果沒(méi)有請求過(guò),就直接返回請求頭和文本。
表單域可以請求到文本。msg字段不支持enctype屬性。jsonp對文本的post方式提供支持,通過(guò)參數可以獲取具體內容,如果參數是一個(gè)multipart/form-data格式的字段則post傳輸的數據可以是post、get、head等。請求querylist集合格式url:xxxrequesturl:msg/{{username}}返回的querylist集合:xxxpost提交的請求的querylist集合:xxxmultipart/form-data提交的請求的表單數據格式:[xxx][{{username}}]dataheader限制:post以json格式請求時(shí),請提供dataheader。
提交表單數據時(shí),需要提供binding字段,詳見(jiàn)表單提交-materialdesign總結book-home微信公眾號圖書(shū)分類(lèi):圖書(shū)分類(lèi)querylist集合:{{圖書(shū)名}}|{{圖書(shū)書(shū)架編號}}+{{isblank}}-{{isblank}}-{{username}}main-endmain-endlocation="/main/"launch-process10微信啟動(dòng)按鈕,可以指定定位到相應的位置,注意不要跨域。 查看全部
jsonp對文本的post方式提供支持的querylist集合:xxxpost提交的請求
querylist采集微信公眾號文章信息的querylist集合。請求url“/”返回querylist集合:xxxtitletextcontent\wx:href=''\wx:src=''\wx:msg=''\request'''url這個(gè)路徑下,有“\\users\\{{username}}"”字段,記錄的是用戶(hù)信息如果請求的url不是users,請使用post方式發(fā)送請求,如果沒(méi)有請求過(guò),就直接返回請求頭和文本。
表單域可以請求到文本。msg字段不支持enctype屬性。jsonp對文本的post方式提供支持,通過(guò)參數可以獲取具體內容,如果參數是一個(gè)multipart/form-data格式的字段則post傳輸的數據可以是post、get、head等。請求querylist集合格式url:xxxrequesturl:msg/{{username}}返回的querylist集合:xxxpost提交的請求的querylist集合:xxxmultipart/form-data提交的請求的表單數據格式:[xxx][{{username}}]dataheader限制:post以json格式請求時(shí),請提供dataheader。
提交表單數據時(shí),需要提供binding字段,詳見(jiàn)表單提交-materialdesign總結book-home微信公眾號圖書(shū)分類(lèi):圖書(shū)分類(lèi)querylist集合:{{圖書(shū)名}}|{{圖書(shū)書(shū)架編號}}+{{isblank}}-{{isblank}}-{{username}}main-endmain-endlocation="/main/"launch-process10微信啟動(dòng)按鈕,可以指定定位到相應的位置,注意不要跨域。
企業(yè)做好網(wǎng)絡(luò )營(yíng)銷(xiāo)需要六大策略,你做對了嗎?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2021-08-17 22:03
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的公司從事網(wǎng)絡(luò )營(yíng)銷(xiāo)。之前也有一篇文章企業(yè)如何進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)的文章(歡迎點(diǎn)擊《企業(yè)做網(wǎng)絡(luò )營(yíng)銷(xiāo)的六大策略》),但是很多企業(yè)都急于進(jìn)入電商圈,有網(wǎng)絡(luò )營(yíng)銷(xiāo)中的許多禁忌。網(wǎng)絡(luò )營(yíng)銷(xiāo)要想成功,必須避免以下八個(gè)問(wèn)題:
1、立即開(kāi)始,沒(méi)有任何計劃
很多公司一開(kāi)始對網(wǎng)絡(luò )營(yíng)銷(xiāo)并沒(méi)有一個(gè)清晰的認識。大多數企業(yè)的管理者意識到應該通過(guò)報紙、電視等媒體進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo),通過(guò)朋友的介紹,或者業(yè)務(wù)員的鼓動(dòng),通過(guò)互聯(lián)網(wǎng)擴大業(yè)務(wù)和銷(xiāo)售。于是我立即安排人員聯(lián)系制作網(wǎng)站,發(fā)布信息,投入線(xiàn)上推廣。整個(gè)網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程在沒(méi)有任何計劃的情況下展開(kāi)。一段時(shí)間后,不僅沒(méi)有效果,還失去了繼續堅持網(wǎng)絡(luò )營(yíng)銷(xiāo)的信心和興趣,出現了公司退出公司宣布退出等悲劇。
眾所周知,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一個(gè)“頂級”工程,涉及到很多方面。需要結合自身實(shí)際情況,有明確的企業(yè)定位。沒(méi)有定位,就沒(méi)有營(yíng)銷(xiāo)。然后,分析消費者的需求,制定周密、科學(xué)的計劃以取得成功。從啟動(dòng)網(wǎng)站建設、企業(yè)信息發(fā)布,到制定推廣預算、選擇網(wǎng)絡(luò )營(yíng)銷(xiāo)方式、安排專(zhuān)職網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣、客服、文案等,一切工作安排到位,持之以恒,使公司的網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程可以順利進(jìn)行。只有這樣,才能為最終達到理想的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果打下基礎。
2、營(yíng)銷(xiāo)型網(wǎng)站的建設強調設計和輕應用
打造企業(yè)網(wǎng)站是開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)非常重要的一環(huán),尤其是打造面向營(yíng)銷(xiāo)的網(wǎng)站。然而,事實(shí)上,大多數企業(yè)網(wǎng)站并沒(méi)有在網(wǎng)絡(luò )營(yíng)銷(xiāo)中發(fā)揮應有的作用。這與公司對網(wǎng)站construction的理解分不開(kāi)。大多數公司認為網(wǎng)站是公司的網(wǎng)上形象,越漂亮越好。美術(shù)設計、Flash動(dòng)畫(huà)、企業(yè)形象成為企業(yè)最關(guān)注的領(lǐng)域。至于網(wǎng)站是否滿(mǎn)足網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,是否方便日后的功能添加或調整,暫不考慮。負責網(wǎng)站制作的服務(wù)事業(yè)部也盲目迎合公司喜好,在表現形式上下功夫,提高網(wǎng)站的建設成本,當然也不負責內部功能和營(yíng)銷(xiāo)應用.
網(wǎng)站construction 是服務(wù)于網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,這個(gè)要明確。 網(wǎng)站施工要設計和應用并重。不僅要注重企業(yè)形象展示,還要明確網(wǎng)站的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)功能和流程,注重產(chǎn)品或服務(wù)展示、用戶(hù)交互、信息檢索、客戶(hù)體驗等方面的建設。 ,讓網(wǎng)站更實(shí)用有效 和諧簡(jiǎn)單,讓網(wǎng)站具有營(yíng)銷(xiāo)力、傳播力和轉化力。
3、盲目進(jìn)行垃圾郵件營(yíng)銷(xiāo)、海量信息等
很多企業(yè)在面對網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí),都不知所措。許多公司選擇向各種平臺發(fā)送垃圾郵件或大量信息,例如 BBS 和博客。雖然短期內企業(yè)可以看到一些網(wǎng)絡(luò )營(yíng)銷(xiāo)效果,比如網(wǎng)站訪(fǎng)問(wèn)量的增加等,但從長(cháng)遠來(lái)看,企業(yè)遭受的損失遠遠大于網(wǎng)絡(luò )營(yíng)銷(xiāo)取得的效果.
一是企業(yè)形象受損。垃圾郵件深受網(wǎng)友的厭惡。大多數垃圾郵件都是企業(yè)誠信缺失、產(chǎn)品質(zhì)量差,甚至惡意欺詐和非法產(chǎn)品。企業(yè)一旦與垃圾郵件相關(guān)聯(lián),其在消費者心目中的形象就會(huì )大打折扣。
其次,一旦企業(yè)習慣了這種低成本、自害的網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣方式,一味追求低報酬、高回報的畸形網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,對投資回報缺乏正確認識,將難以接受真正健康有益的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)和產(chǎn)品,錯失網(wǎng)絡(luò )營(yíng)銷(xiāo)和企業(yè)發(fā)展的良機。企業(yè)要結合自身發(fā)展情況,有一套適合自己的推廣渠道。
4、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品跟風(fēng)買(mǎi)
目前,網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品種類(lèi)繁多,加上銷(xiāo)售人員的聰明才智,企業(yè)在產(chǎn)品選擇上有很多困惑。我們經(jīng)常會(huì )發(fā)現,一旦某個(gè)行業(yè)的幾家公司使用了某種網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,同行業(yè)的其他公司就會(huì )陸續購買(mǎi)。
很多網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)商已經(jīng)掌握了公司的購買(mǎi)和比較心理,通過(guò)行業(yè)客戶(hù)會(huì )議、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品行業(yè)說(shuō)明會(huì )等會(huì )議,充分發(fā)揮“客戶(hù)見(jiàn)證”和“推薦”的作用。技能使企業(yè)能夠削弱自己的判斷力,跟隨他人的選擇,或者盲目競爭和購買(mǎi)。實(shí)踐證明,適合你的產(chǎn)品才是好產(chǎn)品。跟風(fēng)購買(mǎi)的網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品往往不僅不是最合適的,而且由于過(guò)度使用,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果越來(lái)越差。創(chuàng )業(yè)者要懂得放棄,學(xué)會(huì )選擇。
5、利用搜索引擎競拍產(chǎn)品,等待兔子
目前,谷歌、雅虎、百度等搜索引擎競價(jià)產(chǎn)品是網(wǎng)絡(luò )營(yíng)銷(xiāo)的主流產(chǎn)品,越來(lái)越多的企業(yè)選擇搜索引擎競價(jià)產(chǎn)品。大多數企業(yè)并不知道在購買(mǎi)了有競爭力的產(chǎn)品后,他們需要定期進(jìn)行優(yōu)化和維護,而只是等待客戶(hù)上門(mén)。這種效果只會(huì )變得更糟。
搜索引擎競價(jià)的效果是由很多因素組成的。日常消費預算、關(guān)鍵詞上詞數、報表分析等維護工作的好壞,將直接影響搜索引擎競價(jià)產(chǎn)品的效果。企業(yè)在使用競價(jià)產(chǎn)品時(shí),不能坐以待斃,而應定期對其進(jìn)行維護和優(yōu)化。如果他們能把握“以用戶(hù)體驗為中心”的原則,努力提升用戶(hù)的感受,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果才能得到提升。 .
6、線(xiàn)上營(yíng)銷(xiāo)和線(xiàn)下?tīng)I銷(xiāo)完全分離
網(wǎng)絡(luò )營(yíng)銷(xiāo)是整體營(yíng)銷(xiāo)戰略的一部分,是實(shí)現企業(yè)銷(xiāo)售和盈利的重要手段。需要線(xiàn)上線(xiàn)下有效結合才能取得顯著(zhù)效果。許多公司認為互聯(lián)網(wǎng)只是一種媒介。即使他們已經(jīng)實(shí)現了在線(xiàn)營(yíng)銷(xiāo),他們也可以通過(guò)互聯(lián)網(wǎng)推廣他們的公司和產(chǎn)品,提高他們的品牌知名度和企業(yè)形象。這是一種不完整的網(wǎng)絡(luò )營(yíng)銷(xiāo)意識。沒(méi)有線(xiàn)下參與的網(wǎng)絡(luò )營(yíng)銷(xiāo)不是真正的網(wǎng)絡(luò )營(yíng)銷(xiāo),難以達到“營(yíng)銷(xiāo)”和“銷(xiāo)售”的終極目標。
其實(shí),網(wǎng)絡(luò )營(yíng)銷(xiāo)的作用遠不止這些。對于線(xiàn)下體驗較多的企業(yè),要抓住線(xiàn)上宣傳推廣的作用,再線(xiàn)下提升客戶(hù)體驗,從而采集銷(xiāo)售線(xiàn)索,挖掘潛在客戶(hù),線(xiàn)下與線(xiàn)上相結合,最終達成交易,并為企業(yè)創(chuàng )造利潤。
7、信息采集方法一勞永逸
采集信息是一種流行的“網(wǎng)絡(luò )營(yíng)銷(xiāo)方式”。許多網(wǎng)站通過(guò)編寫(xiě)程序或使用采集軟件從其他網(wǎng)站那里抓取大量需要的網(wǎng)絡(luò )信息來(lái)豐富他們的網(wǎng)站內容。這樣,網(wǎng)站的內容快速豐富,搜索引擎收錄頁(yè)面的數量也可以快速增加,可以快速吸引訪(fǎng)問(wèn)者,增加流量。然而事實(shí)證明,沒(méi)有成功的網(wǎng)站來(lái)自信息采集,成功的網(wǎng)絡(luò )營(yíng)銷(xiāo)也沒(méi)有那么簡(jiǎn)單。
Information采集可以采集到大量需要的信息,但信息質(zhì)量參差不齊,大部分是互聯(lián)網(wǎng)上重復性高的內容,對搜索引擎不起作用。對于用戶(hù)來(lái)說(shuō),只是網(wǎng)站的另一個(gè)克隆,沒(méi)有吸引力。對于網(wǎng)站內容的建設,企業(yè)還是要腳踏實(shí)地,做有自己特色和原創(chuàng )精神的內容,少積累多,用心培養忠實(shí)用戶(hù),豐富網(wǎng)站一些案例研究。 @的內容逐漸通向成功。
8、Background 數據,重統計多于分析
世界上有沒(méi)有哪位創(chuàng )業(yè)者在進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)最不注重網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果?但在現實(shí)中,很多企業(yè)在對網(wǎng)絡(luò )營(yíng)銷(xiāo)效果的評價(jià)中,大多偏重統計,忽視分析。在網(wǎng)絡(luò )營(yíng)銷(xiāo)效果方面,網(wǎng)站的訪(fǎng)問(wèn)量和網(wǎng)站的排名是普遍關(guān)注的內容。用戶(hù)回訪(fǎng)率、用戶(hù)來(lái)源分析、關(guān)鍵詞分析等更深入的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果分析沒(méi)有得到重視。
全面的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果評估應該包括網(wǎng)站訪(fǎng)問(wèn)量、用戶(hù)粘性、來(lái)源分析、搜索引擎關(guān)鍵詞效果分析、各種推廣產(chǎn)品的應用效果分析?;趯τ脩?hù)信息等方面的分析,可以根據這些分析得出下一步網(wǎng)絡(luò )營(yíng)銷(xiāo)工作的改進(jìn)建議和方案。網(wǎng)絡(luò )營(yíng)銷(xiāo)重統計,輕分析,無(wú)助于改善網(wǎng)絡(luò )營(yíng)銷(xiāo)現狀。
以上八家企業(yè)在網(wǎng)絡(luò )營(yíng)銷(xiāo)中應注意的問(wèn)題。大多數公司都出現了。我相信,如果每個(gè)創(chuàng )業(yè)者在開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)都細心、細心、用心,他一定會(huì )走向成功。當然,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一門(mén)深不可測的知識領(lǐng)域,更多的還是需要我們主動(dòng)學(xué)習來(lái)充實(shí)自己的大腦,然后將更多的理論知識應用到實(shí)際的生活和工作中。更多網(wǎng)絡(luò )營(yíng)銷(xiāo)的理論知識和操作技巧,歡迎關(guān)注山人資訊,教你如何進(jìn)行高效的網(wǎng)絡(luò )營(yíng)銷(xiāo)。
沉陽(yáng)網(wǎng)站建筑、沉陽(yáng)網(wǎng)站制作、沉陽(yáng)微信小程序、沉陽(yáng)互聯(lián)網(wǎng)公司開(kāi)發(fā)、沉陽(yáng)工作網(wǎng)站、沉陽(yáng)做網(wǎng)站、沉陽(yáng)制造網(wǎng)站、沉陽(yáng)網(wǎng)站保護、沉陽(yáng)網(wǎng)站建筑公司,沉陽(yáng)制作網(wǎng)頁(yè),遼寧網(wǎng)站建筑,遼寧網(wǎng)站設計,企業(yè)網(wǎng)站建筑,沉陽(yáng),沉陽(yáng)手機網(wǎng)站,3G網(wǎng)站,手機網(wǎng)站制作,沉陽(yáng)微信推廣,沉陽(yáng)微信營(yíng)銷(xiāo),企業(yè)微信營(yíng)銷(xiāo),沉陽(yáng)微信公眾平臺營(yíng)銷(xiāo),沉陽(yáng)微信開(kāi)發(fā),沉陽(yáng)微信公眾平臺,沉陽(yáng)微信公眾平臺開(kāi)發(fā),沉陽(yáng)微信自動(dòng)回復,沉陽(yáng)微信接入,沉陽(yáng)微信平臺接入,沉陽(yáng)微信,沉陽(yáng)Micro網(wǎng)站,沉陽(yáng)商城開(kāi)發(fā),沉陽(yáng)商城建設,沉陽(yáng)3D打印機,沉陽(yáng)3D打印服務(wù),沉陽(yáng)3D打印機 查看全部
企業(yè)做好網(wǎng)絡(luò )營(yíng)銷(xiāo)需要六大策略,你做對了嗎?
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的公司從事網(wǎng)絡(luò )營(yíng)銷(xiāo)。之前也有一篇文章企業(yè)如何進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)的文章(歡迎點(diǎn)擊《企業(yè)做網(wǎng)絡(luò )營(yíng)銷(xiāo)的六大策略》),但是很多企業(yè)都急于進(jìn)入電商圈,有網(wǎng)絡(luò )營(yíng)銷(xiāo)中的許多禁忌。網(wǎng)絡(luò )營(yíng)銷(xiāo)要想成功,必須避免以下八個(gè)問(wèn)題:
1、立即開(kāi)始,沒(méi)有任何計劃
很多公司一開(kāi)始對網(wǎng)絡(luò )營(yíng)銷(xiāo)并沒(méi)有一個(gè)清晰的認識。大多數企業(yè)的管理者意識到應該通過(guò)報紙、電視等媒體進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo),通過(guò)朋友的介紹,或者業(yè)務(wù)員的鼓動(dòng),通過(guò)互聯(lián)網(wǎng)擴大業(yè)務(wù)和銷(xiāo)售。于是我立即安排人員聯(lián)系制作網(wǎng)站,發(fā)布信息,投入線(xiàn)上推廣。整個(gè)網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程在沒(méi)有任何計劃的情況下展開(kāi)。一段時(shí)間后,不僅沒(méi)有效果,還失去了繼續堅持網(wǎng)絡(luò )營(yíng)銷(xiāo)的信心和興趣,出現了公司退出公司宣布退出等悲劇。
眾所周知,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一個(gè)“頂級”工程,涉及到很多方面。需要結合自身實(shí)際情況,有明確的企業(yè)定位。沒(méi)有定位,就沒(méi)有營(yíng)銷(xiāo)。然后,分析消費者的需求,制定周密、科學(xué)的計劃以取得成功。從啟動(dòng)網(wǎng)站建設、企業(yè)信息發(fā)布,到制定推廣預算、選擇網(wǎng)絡(luò )營(yíng)銷(xiāo)方式、安排專(zhuān)職網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣、客服、文案等,一切工作安排到位,持之以恒,使公司的網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程可以順利進(jìn)行。只有這樣,才能為最終達到理想的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果打下基礎。
2、營(yíng)銷(xiāo)型網(wǎng)站的建設強調設計和輕應用
打造企業(yè)網(wǎng)站是開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)非常重要的一環(huán),尤其是打造面向營(yíng)銷(xiāo)的網(wǎng)站。然而,事實(shí)上,大多數企業(yè)網(wǎng)站并沒(méi)有在網(wǎng)絡(luò )營(yíng)銷(xiāo)中發(fā)揮應有的作用。這與公司對網(wǎng)站construction的理解分不開(kāi)。大多數公司認為網(wǎng)站是公司的網(wǎng)上形象,越漂亮越好。美術(shù)設計、Flash動(dòng)畫(huà)、企業(yè)形象成為企業(yè)最關(guān)注的領(lǐng)域。至于網(wǎng)站是否滿(mǎn)足網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,是否方便日后的功能添加或調整,暫不考慮。負責網(wǎng)站制作的服務(wù)事業(yè)部也盲目迎合公司喜好,在表現形式上下功夫,提高網(wǎng)站的建設成本,當然也不負責內部功能和營(yíng)銷(xiāo)應用.
網(wǎng)站construction 是服務(wù)于網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,這個(gè)要明確。 網(wǎng)站施工要設計和應用并重。不僅要注重企業(yè)形象展示,還要明確網(wǎng)站的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)功能和流程,注重產(chǎn)品或服務(wù)展示、用戶(hù)交互、信息檢索、客戶(hù)體驗等方面的建設。 ,讓網(wǎng)站更實(shí)用有效 和諧簡(jiǎn)單,讓網(wǎng)站具有營(yíng)銷(xiāo)力、傳播力和轉化力。
3、盲目進(jìn)行垃圾郵件營(yíng)銷(xiāo)、海量信息等
很多企業(yè)在面對網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí),都不知所措。許多公司選擇向各種平臺發(fā)送垃圾郵件或大量信息,例如 BBS 和博客。雖然短期內企業(yè)可以看到一些網(wǎng)絡(luò )營(yíng)銷(xiāo)效果,比如網(wǎng)站訪(fǎng)問(wèn)量的增加等,但從長(cháng)遠來(lái)看,企業(yè)遭受的損失遠遠大于網(wǎng)絡(luò )營(yíng)銷(xiāo)取得的效果.
一是企業(yè)形象受損。垃圾郵件深受網(wǎng)友的厭惡。大多數垃圾郵件都是企業(yè)誠信缺失、產(chǎn)品質(zhì)量差,甚至惡意欺詐和非法產(chǎn)品。企業(yè)一旦與垃圾郵件相關(guān)聯(lián),其在消費者心目中的形象就會(huì )大打折扣。
其次,一旦企業(yè)習慣了這種低成本、自害的網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣方式,一味追求低報酬、高回報的畸形網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,對投資回報缺乏正確認識,將難以接受真正健康有益的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)和產(chǎn)品,錯失網(wǎng)絡(luò )營(yíng)銷(xiāo)和企業(yè)發(fā)展的良機。企業(yè)要結合自身發(fā)展情況,有一套適合自己的推廣渠道。
4、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品跟風(fēng)買(mǎi)
目前,網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品種類(lèi)繁多,加上銷(xiāo)售人員的聰明才智,企業(yè)在產(chǎn)品選擇上有很多困惑。我們經(jīng)常會(huì )發(fā)現,一旦某個(gè)行業(yè)的幾家公司使用了某種網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,同行業(yè)的其他公司就會(huì )陸續購買(mǎi)。
很多網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)商已經(jīng)掌握了公司的購買(mǎi)和比較心理,通過(guò)行業(yè)客戶(hù)會(huì )議、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品行業(yè)說(shuō)明會(huì )等會(huì )議,充分發(fā)揮“客戶(hù)見(jiàn)證”和“推薦”的作用。技能使企業(yè)能夠削弱自己的判斷力,跟隨他人的選擇,或者盲目競爭和購買(mǎi)。實(shí)踐證明,適合你的產(chǎn)品才是好產(chǎn)品。跟風(fēng)購買(mǎi)的網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品往往不僅不是最合適的,而且由于過(guò)度使用,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果越來(lái)越差。創(chuàng )業(yè)者要懂得放棄,學(xué)會(huì )選擇。
5、利用搜索引擎競拍產(chǎn)品,等待兔子
目前,谷歌、雅虎、百度等搜索引擎競價(jià)產(chǎn)品是網(wǎng)絡(luò )營(yíng)銷(xiāo)的主流產(chǎn)品,越來(lái)越多的企業(yè)選擇搜索引擎競價(jià)產(chǎn)品。大多數企業(yè)并不知道在購買(mǎi)了有競爭力的產(chǎn)品后,他們需要定期進(jìn)行優(yōu)化和維護,而只是等待客戶(hù)上門(mén)。這種效果只會(huì )變得更糟。
搜索引擎競價(jià)的效果是由很多因素組成的。日常消費預算、關(guān)鍵詞上詞數、報表分析等維護工作的好壞,將直接影響搜索引擎競價(jià)產(chǎn)品的效果。企業(yè)在使用競價(jià)產(chǎn)品時(shí),不能坐以待斃,而應定期對其進(jìn)行維護和優(yōu)化。如果他們能把握“以用戶(hù)體驗為中心”的原則,努力提升用戶(hù)的感受,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果才能得到提升。 .
6、線(xiàn)上營(yíng)銷(xiāo)和線(xiàn)下?tīng)I銷(xiāo)完全分離
網(wǎng)絡(luò )營(yíng)銷(xiāo)是整體營(yíng)銷(xiāo)戰略的一部分,是實(shí)現企業(yè)銷(xiāo)售和盈利的重要手段。需要線(xiàn)上線(xiàn)下有效結合才能取得顯著(zhù)效果。許多公司認為互聯(lián)網(wǎng)只是一種媒介。即使他們已經(jīng)實(shí)現了在線(xiàn)營(yíng)銷(xiāo),他們也可以通過(guò)互聯(lián)網(wǎng)推廣他們的公司和產(chǎn)品,提高他們的品牌知名度和企業(yè)形象。這是一種不完整的網(wǎng)絡(luò )營(yíng)銷(xiāo)意識。沒(méi)有線(xiàn)下參與的網(wǎng)絡(luò )營(yíng)銷(xiāo)不是真正的網(wǎng)絡(luò )營(yíng)銷(xiāo),難以達到“營(yíng)銷(xiāo)”和“銷(xiāo)售”的終極目標。
其實(shí),網(wǎng)絡(luò )營(yíng)銷(xiāo)的作用遠不止這些。對于線(xiàn)下體驗較多的企業(yè),要抓住線(xiàn)上宣傳推廣的作用,再線(xiàn)下提升客戶(hù)體驗,從而采集銷(xiāo)售線(xiàn)索,挖掘潛在客戶(hù),線(xiàn)下與線(xiàn)上相結合,最終達成交易,并為企業(yè)創(chuàng )造利潤。
7、信息采集方法一勞永逸
采集信息是一種流行的“網(wǎng)絡(luò )營(yíng)銷(xiāo)方式”。許多網(wǎng)站通過(guò)編寫(xiě)程序或使用采集軟件從其他網(wǎng)站那里抓取大量需要的網(wǎng)絡(luò )信息來(lái)豐富他們的網(wǎng)站內容。這樣,網(wǎng)站的內容快速豐富,搜索引擎收錄頁(yè)面的數量也可以快速增加,可以快速吸引訪(fǎng)問(wèn)者,增加流量。然而事實(shí)證明,沒(méi)有成功的網(wǎng)站來(lái)自信息采集,成功的網(wǎng)絡(luò )營(yíng)銷(xiāo)也沒(méi)有那么簡(jiǎn)單。
Information采集可以采集到大量需要的信息,但信息質(zhì)量參差不齊,大部分是互聯(lián)網(wǎng)上重復性高的內容,對搜索引擎不起作用。對于用戶(hù)來(lái)說(shuō),只是網(wǎng)站的另一個(gè)克隆,沒(méi)有吸引力。對于網(wǎng)站內容的建設,企業(yè)還是要腳踏實(shí)地,做有自己特色和原創(chuàng )精神的內容,少積累多,用心培養忠實(shí)用戶(hù),豐富網(wǎng)站一些案例研究。 @的內容逐漸通向成功。
8、Background 數據,重統計多于分析
世界上有沒(méi)有哪位創(chuàng )業(yè)者在進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)最不注重網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果?但在現實(shí)中,很多企業(yè)在對網(wǎng)絡(luò )營(yíng)銷(xiāo)效果的評價(jià)中,大多偏重統計,忽視分析。在網(wǎng)絡(luò )營(yíng)銷(xiāo)效果方面,網(wǎng)站的訪(fǎng)問(wèn)量和網(wǎng)站的排名是普遍關(guān)注的內容。用戶(hù)回訪(fǎng)率、用戶(hù)來(lái)源分析、關(guān)鍵詞分析等更深入的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果分析沒(méi)有得到重視。
全面的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果評估應該包括網(wǎng)站訪(fǎng)問(wèn)量、用戶(hù)粘性、來(lái)源分析、搜索引擎關(guān)鍵詞效果分析、各種推廣產(chǎn)品的應用效果分析?;趯τ脩?hù)信息等方面的分析,可以根據這些分析得出下一步網(wǎng)絡(luò )營(yíng)銷(xiāo)工作的改進(jìn)建議和方案。網(wǎng)絡(luò )營(yíng)銷(xiāo)重統計,輕分析,無(wú)助于改善網(wǎng)絡(luò )營(yíng)銷(xiāo)現狀。
以上八家企業(yè)在網(wǎng)絡(luò )營(yíng)銷(xiāo)中應注意的問(wèn)題。大多數公司都出現了。我相信,如果每個(gè)創(chuàng )業(yè)者在開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)都細心、細心、用心,他一定會(huì )走向成功。當然,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一門(mén)深不可測的知識領(lǐng)域,更多的還是需要我們主動(dòng)學(xué)習來(lái)充實(shí)自己的大腦,然后將更多的理論知識應用到實(shí)際的生活和工作中。更多網(wǎng)絡(luò )營(yíng)銷(xiāo)的理論知識和操作技巧,歡迎關(guān)注山人資訊,教你如何進(jìn)行高效的網(wǎng)絡(luò )營(yíng)銷(xiāo)。
沉陽(yáng)網(wǎng)站建筑、沉陽(yáng)網(wǎng)站制作、沉陽(yáng)微信小程序、沉陽(yáng)互聯(lián)網(wǎng)公司開(kāi)發(fā)、沉陽(yáng)工作網(wǎng)站、沉陽(yáng)做網(wǎng)站、沉陽(yáng)制造網(wǎng)站、沉陽(yáng)網(wǎng)站保護、沉陽(yáng)網(wǎng)站建筑公司,沉陽(yáng)制作網(wǎng)頁(yè),遼寧網(wǎng)站建筑,遼寧網(wǎng)站設計,企業(yè)網(wǎng)站建筑,沉陽(yáng),沉陽(yáng)手機網(wǎng)站,3G網(wǎng)站,手機網(wǎng)站制作,沉陽(yáng)微信推廣,沉陽(yáng)微信營(yíng)銷(xiāo),企業(yè)微信營(yíng)銷(xiāo),沉陽(yáng)微信公眾平臺營(yíng)銷(xiāo),沉陽(yáng)微信開(kāi)發(fā),沉陽(yáng)微信公眾平臺,沉陽(yáng)微信公眾平臺開(kāi)發(fā),沉陽(yáng)微信自動(dòng)回復,沉陽(yáng)微信接入,沉陽(yáng)微信平臺接入,沉陽(yáng)微信,沉陽(yáng)Micro網(wǎng)站,沉陽(yáng)商城開(kāi)發(fā),沉陽(yáng)商城建設,沉陽(yáng)3D打印機,沉陽(yáng)3D打印服務(wù),沉陽(yáng)3D打印機
shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區(組圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 94 次瀏覽 ? 2021-08-16 04:02
querylist采集微信公眾號文章,實(shí)現百度、頭條等搜索引擎排名和微信搜索的推廣。推廣效果是電商數據里面永遠的痛,只有做好開(kāi)源節流才能有意想不到的收獲。精準推廣的本質(zhì),在于挖掘目標人群的需求。簡(jiǎn)單的理解有:做什么產(chǎn)品?買(mǎi)什么東西?購買(mǎi)什么產(chǎn)品?推廣還是從人性上挖掘。微信里面,可以通過(guò)朋友圈、公眾號推送、客服回復等方式,來(lái)獲取目標人群的公眾號信息,然后以公眾號為依托,對文章進(jìn)行推廣。
推廣效果==人群質(zhì)量*轉化率*精準度基于精準用戶(hù)人群的分析和優(yōu)化,達到排名和業(yè)績(jì)上的提升。一、篩選目標用戶(hù)維度包括:用戶(hù)行為分析,文章發(fā)送時(shí)間、內容等信息目標用戶(hù)人群的人物畫(huà)像,標簽,性別、年齡、職業(yè)等行為分析包括:用戶(hù)特征、地域、興趣愛(ài)好等內容,參考一下做的非常不錯的文章,從標題到內容都是包裝好的,你可以借鑒一下:shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區_b2c/?itemid=27613055_aw1b0_3ub45464ce7bd1347ee058&utm_source=toutiao-io&utm_medium=toutiao_android&utm_campaign=toutiao_android&utm_term=23&utm_division=zhihu&utm_content=shopx要學(xué)會(huì )分析用戶(hù)的行為,用戶(hù)的行為可以總結成為一些標簽比如:停留時(shí)間,點(diǎn)贊、轉發(fā)次數,互動(dòng)頻率...,每個(gè)標簽通過(guò)爬蟲(chóng)抓取,然后組合起來(lái)得到最終的人群標簽。
文章發(fā)送時(shí)間決定了有多少人看到你,文章發(fā)送時(shí)間點(diǎn)需要設置合理,這方面可以采用意圖猜測這種方式來(lái)推測。根據轉發(fā)次數,來(lái)推測是否有做公眾號的推廣等。意圖猜測是采用用戶(hù)反饋等第三方服務(wù),比如:活動(dòng),促銷(xiāo)等等有類(lèi)似經(jīng)驗的人可以基于你的競爭對手總結出用戶(hù)使用這個(gè)服務(wù)時(shí)的動(dòng)機:定向活動(dòng)推送,用戶(hù)就會(huì )參與,會(huì )有轉發(fā)、關(guān)注的動(dòng)作。
有需求就會(huì )參與,有轉發(fā)、關(guān)注、評論等行為才會(huì )有下單等一系列動(dòng)作...分析用戶(hù)行為,來(lái)獲取目標人群的特征屬性,整理出目標人群的特征集合,例如:男性/女性/地域/...,通過(guò)小卡片、二維碼或者vip會(huì )員邀請碼的方式來(lái)推送給用戶(hù),到點(diǎn)用戶(hù)自動(dòng)有收到。優(yōu)質(zhì)的內容,不局限于電商類(lèi),適合內容營(yíng)銷(xiāo)的有:小黃雞、悟空問(wèn)答、360熱問(wèn)、知乎問(wèn)答等內容整理后再分享出去,簡(jiǎn)單干脆,有時(shí)候文章不吸引用戶(hù),可以想想是否是篇章長(cháng)度的問(wèn)題,可以從頭開(kāi)始寫(xiě),隨著(zhù)用戶(hù)閱讀的情況來(lái)增加內容的字數,每篇分享的時(shí)間點(diǎn)不要超過(guò)100字,越簡(jiǎn)短越有力,時(shí)間點(diǎn)過(guò)長(cháng)的文章會(huì )加長(cháng)用戶(hù)的閱讀習慣,不利于用戶(hù)轉化。 查看全部
shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區(組圖)
querylist采集微信公眾號文章,實(shí)現百度、頭條等搜索引擎排名和微信搜索的推廣。推廣效果是電商數據里面永遠的痛,只有做好開(kāi)源節流才能有意想不到的收獲。精準推廣的本質(zhì),在于挖掘目標人群的需求。簡(jiǎn)單的理解有:做什么產(chǎn)品?買(mǎi)什么東西?購買(mǎi)什么產(chǎn)品?推廣還是從人性上挖掘。微信里面,可以通過(guò)朋友圈、公眾號推送、客服回復等方式,來(lái)獲取目標人群的公眾號信息,然后以公眾號為依托,對文章進(jìn)行推廣。
推廣效果==人群質(zhì)量*轉化率*精準度基于精準用戶(hù)人群的分析和優(yōu)化,達到排名和業(yè)績(jì)上的提升。一、篩選目標用戶(hù)維度包括:用戶(hù)行為分析,文章發(fā)送時(shí)間、內容等信息目標用戶(hù)人群的人物畫(huà)像,標簽,性別、年齡、職業(yè)等行為分析包括:用戶(hù)特征、地域、興趣愛(ài)好等內容,參考一下做的非常不錯的文章,從標題到內容都是包裝好的,你可以借鑒一下:shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區_b2c/?itemid=27613055_aw1b0_3ub45464ce7bd1347ee058&utm_source=toutiao-io&utm_medium=toutiao_android&utm_campaign=toutiao_android&utm_term=23&utm_division=zhihu&utm_content=shopx要學(xué)會(huì )分析用戶(hù)的行為,用戶(hù)的行為可以總結成為一些標簽比如:停留時(shí)間,點(diǎn)贊、轉發(fā)次數,互動(dòng)頻率...,每個(gè)標簽通過(guò)爬蟲(chóng)抓取,然后組合起來(lái)得到最終的人群標簽。
文章發(fā)送時(shí)間決定了有多少人看到你,文章發(fā)送時(shí)間點(diǎn)需要設置合理,這方面可以采用意圖猜測這種方式來(lái)推測。根據轉發(fā)次數,來(lái)推測是否有做公眾號的推廣等。意圖猜測是采用用戶(hù)反饋等第三方服務(wù),比如:活動(dòng),促銷(xiāo)等等有類(lèi)似經(jīng)驗的人可以基于你的競爭對手總結出用戶(hù)使用這個(gè)服務(wù)時(shí)的動(dòng)機:定向活動(dòng)推送,用戶(hù)就會(huì )參與,會(huì )有轉發(fā)、關(guān)注的動(dòng)作。
有需求就會(huì )參與,有轉發(fā)、關(guān)注、評論等行為才會(huì )有下單等一系列動(dòng)作...分析用戶(hù)行為,來(lái)獲取目標人群的特征屬性,整理出目標人群的特征集合,例如:男性/女性/地域/...,通過(guò)小卡片、二維碼或者vip會(huì )員邀請碼的方式來(lái)推送給用戶(hù),到點(diǎn)用戶(hù)自動(dòng)有收到。優(yōu)質(zhì)的內容,不局限于電商類(lèi),適合內容營(yíng)銷(xiāo)的有:小黃雞、悟空問(wèn)答、360熱問(wèn)、知乎問(wèn)答等內容整理后再分享出去,簡(jiǎn)單干脆,有時(shí)候文章不吸引用戶(hù),可以想想是否是篇章長(cháng)度的問(wèn)題,可以從頭開(kāi)始寫(xiě),隨著(zhù)用戶(hù)閱讀的情況來(lái)增加內容的字數,每篇分享的時(shí)間點(diǎn)不要超過(guò)100字,越簡(jiǎn)短越有力,時(shí)間點(diǎn)過(guò)長(cháng)的文章會(huì )加長(cháng)用戶(hù)的閱讀習慣,不利于用戶(hù)轉化。
用Python將公眾號中文章爬下來(lái)獲取文章的html信息
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2021-08-16 01:21
用Python將公眾號中文章爬下來(lái)獲取文章的html信息
公眾號里的文章一定是每一篇文章的必讀。
有時(shí)候我們關(guān)注寶物類(lèi)公眾號,會(huì )發(fā)現它的歷史文章有數百甚至數千篇文章,而作者只索引了他認為更好的幾篇。太麻煩了。為了解決這類(lèi)問(wèn)題,我決定用Python爬下公眾號文章。
基本思路爬取
文章crawling 我們使用公共平臺的方式。這個(gè)方法雖然簡(jiǎn)單,但是我們需要有一個(gè)公眾號。如果我們沒(méi)有官方賬號,我們可以自己注冊一個(gè)。公眾號的注冊也比較簡(jiǎn)單。別說(shuō)了。
首先登錄您的公眾號,然后依次進(jìn)行以下操作
通過(guò)上面的操作,我們可以得到cookie等信息,我們先把cookie寫(xiě)入txt文件,實(shí)現代碼如下:
# 從瀏覽器中復制出來(lái)的 cookie 字符串cookie_str = "自己的 cookie"cookie = {}# 遍歷 cookiefor cookies in cookie_str.split("; "): cookie_item = cookies.split("=") cookie[cookie_item[0]] = cookie_item[1]# 將 cookie 寫(xiě)入 txt 文件with open('cookie.txt', "w") as file: file.write(json.dumps(cookie))
接下來(lái)我們獲取公眾號文章列表信息,代碼實(shí)現如下:
with open("cookie.txt", "r") as file: cookie = file.read()cookies = json.loads(cookie)url = "https://mp.weixin.qq.com"response = requests.get(url, cookies=cookies)# 獲取tokentoken = re.findall(r"token=(\d+)", str(response.url))[0]# 請求頭信息headers = { "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B + token + "&lang=zh_CN", "Host": "mp.weixin.qq.com", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",}# 遍歷指定頁(yè)數的文章for i in range(1, 5, 1): begin = (i - 1) * 5 # 獲取文章列表 requestUrl = "https://mp.weixin.qq.com/cgi-b ... 2Bstr(begin)+"&count=5&fakeid=要爬取公眾號的fakeid&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1" search_response = requests.get(requestUrl, cookies=cookies, headers=headers) # 獲取 JSON 格式的列表信息 re_text = search_response.json() list = re_text.get("app_msg_list") # 遍歷文章列表 for j in list: # 文章鏈接 url = j["link"] # 文章標題 title = j["title"] print(url) # 等待 8 秒,避免請求過(guò)于頻繁 time.sleep(8)
保存
通過(guò)文章list信息,我們可以得到文章公眾號的鏈接、標題等信息,然后我們可以根據文章使用微信模塊獲取文章html格式信息關(guān)聯(lián)。模塊安裝使用pip install wechatsogou就可以了。
這里需要注意的是,我們通過(guò)微信模塊獲取的html信息會(huì )存在一些問(wèn)題。有兩個(gè)主要問(wèn)題。一是文章的html信息不全,需要自己補;另一個(gè)得到。 html 信息中可能有一些 CSS 樣式?jīng)]有帶過(guò)來(lái)。對于這個(gè)問(wèn)題,我們可以先通過(guò)瀏覽器的開(kāi)發(fā)者工具獲取樣式,然后手動(dòng)添加。代碼實(shí)現如下:
# url:文章鏈接,title:文章標題def save2html(url, title): # captcha_break_time 為驗證碼輸入錯誤的重試次數,默認為 1 ws_api = wechatsogou.WechatSogouAPI(captcha_break_time = 3) content_info = ws_api.get_article_content(url) html = f''' {title} {title} {content_info['content_html']} ''' with open(title + '.html', "w", encoding="utf-8") as file: file.write('%s\n'%html)
上面代碼中的my.css文件存儲了一些沒(méi)有帶過(guò)來(lái)的CSS樣式信息。
用瀏覽器打開(kāi)公眾號文章的html文件看看效果:
通過(guò)上面的顯示結果可以看出,我們保存的html文件的顯示效果還不錯。
參考:
結束
?
? 查看全部
用Python將公眾號中文章爬下來(lái)獲取文章的html信息

公眾號里的文章一定是每一篇文章的必讀。
有時(shí)候我們關(guān)注寶物類(lèi)公眾號,會(huì )發(fā)現它的歷史文章有數百甚至數千篇文章,而作者只索引了他認為更好的幾篇。太麻煩了。為了解決這類(lèi)問(wèn)題,我決定用Python爬下公眾號文章。
基本思路爬取
文章crawling 我們使用公共平臺的方式。這個(gè)方法雖然簡(jiǎn)單,但是我們需要有一個(gè)公眾號。如果我們沒(méi)有官方賬號,我們可以自己注冊一個(gè)。公眾號的注冊也比較簡(jiǎn)單。別說(shuō)了。
首先登錄您的公眾號,然后依次進(jìn)行以下操作
通過(guò)上面的操作,我們可以得到cookie等信息,我們先把cookie寫(xiě)入txt文件,實(shí)現代碼如下:
# 從瀏覽器中復制出來(lái)的 cookie 字符串cookie_str = "自己的 cookie"cookie = {}# 遍歷 cookiefor cookies in cookie_str.split("; "): cookie_item = cookies.split("=") cookie[cookie_item[0]] = cookie_item[1]# 將 cookie 寫(xiě)入 txt 文件with open('cookie.txt', "w") as file: file.write(json.dumps(cookie))
接下來(lái)我們獲取公眾號文章列表信息,代碼實(shí)現如下:
with open("cookie.txt", "r") as file: cookie = file.read()cookies = json.loads(cookie)url = "https://mp.weixin.qq.com"response = requests.get(url, cookies=cookies)# 獲取tokentoken = re.findall(r"token=(\d+)", str(response.url))[0]# 請求頭信息headers = { "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B + token + "&lang=zh_CN", "Host": "mp.weixin.qq.com", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",}# 遍歷指定頁(yè)數的文章for i in range(1, 5, 1): begin = (i - 1) * 5 # 獲取文章列表 requestUrl = "https://mp.weixin.qq.com/cgi-b ... 2Bstr(begin)+"&count=5&fakeid=要爬取公眾號的fakeid&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1" search_response = requests.get(requestUrl, cookies=cookies, headers=headers) # 獲取 JSON 格式的列表信息 re_text = search_response.json() list = re_text.get("app_msg_list") # 遍歷文章列表 for j in list: # 文章鏈接 url = j["link"] # 文章標題 title = j["title"] print(url) # 等待 8 秒,避免請求過(guò)于頻繁 time.sleep(8)
保存
通過(guò)文章list信息,我們可以得到文章公眾號的鏈接、標題等信息,然后我們可以根據文章使用微信模塊獲取文章html格式信息關(guān)聯(lián)。模塊安裝使用pip install wechatsogou就可以了。
這里需要注意的是,我們通過(guò)微信模塊獲取的html信息會(huì )存在一些問(wèn)題。有兩個(gè)主要問(wèn)題。一是文章的html信息不全,需要自己補;另一個(gè)得到。 html 信息中可能有一些 CSS 樣式?jīng)]有帶過(guò)來(lái)。對于這個(gè)問(wèn)題,我們可以先通過(guò)瀏覽器的開(kāi)發(fā)者工具獲取樣式,然后手動(dòng)添加。代碼實(shí)現如下:
# url:文章鏈接,title:文章標題def save2html(url, title): # captcha_break_time 為驗證碼輸入錯誤的重試次數,默認為 1 ws_api = wechatsogou.WechatSogouAPI(captcha_break_time = 3) content_info = ws_api.get_article_content(url) html = f''' {title} {title} {content_info['content_html']} ''' with open(title + '.html', "w", encoding="utf-8") as file: file.write('%s\n'%html)
上面代碼中的my.css文件存儲了一些沒(méi)有帶過(guò)來(lái)的CSS樣式信息。
用瀏覽器打開(kāi)公眾號文章的html文件看看效果:
通過(guò)上面的顯示結果可以看出,我們保存的html文件的顯示效果還不錯。
參考:
結束
?

?
querylist采集微信公眾號文章信息,關(guān)鍵字采集文章標題和文章大綱
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 184 次瀏覽 ? 2021-08-15 23:10
querylist采集微信公眾號文章信息,關(guān)鍵字采集公眾號文章標題和文章大綱,再采集公眾號用戶(hù)數據,回流至redis,進(jìn)行用戶(hù)瀏覽記錄存儲,再與公眾號以及用戶(hù)數據進(jìn)行相應匹配得到用戶(hù)畫(huà)像。
建議先去公眾號關(guān)注一下,然后給公眾號發(fā)送“查詢(xún)”功能,就可以查到公眾號標簽下全部微信文章的標題、發(fā)布時(shí)間、閱讀數、分享數、歷史閱讀量和轉發(fā)量。
我在開(kāi)發(fā)公眾號的時(shí)候參考了一些文章中描述的,比如如果查詢(xún)公眾號里的某篇文章閱讀次數,或者是歷史消息數(微信的功能實(shí)現中,和歷史消息之間的一定距離,微信會(huì )給出一個(gè)標記),或者是文章分享量等等。原理大致就是公眾號要有一個(gè)redis服務(wù)端與公眾號相對應(如果你的目的是簡(jiǎn)單查詢(xún)公眾號里內容的一個(gè)收藏功能,可以換成redisconnect),所以先解決你redis服務(wù)端如何與公眾號服務(wù)端連接,然后再用服務(wù)端接口與session相互傳遞數據即可。
你可以先在公眾號發(fā)布文章時(shí),用代碼獲取到該公眾號的用戶(hù),發(fā)送給redis去存儲。至于以后使用,可以直接通過(guò)session去相互傳遞用戶(hù)信息就可以了。
這位大神的文章!微信公眾號公眾號的數據存儲機制是如何的?
公眾號推送文章的時(shí)候,會(huì )在數據庫中隨機選取一條數據進(jìn)行緩存,并且設置一個(gè)時(shí)間間隔來(lái)判斷當前數據庫的數據來(lái)源,緩存到數據庫中的數據是定時(shí)更新的, 查看全部
querylist采集微信公眾號文章信息,關(guān)鍵字采集文章標題和文章大綱
querylist采集微信公眾號文章信息,關(guān)鍵字采集公眾號文章標題和文章大綱,再采集公眾號用戶(hù)數據,回流至redis,進(jìn)行用戶(hù)瀏覽記錄存儲,再與公眾號以及用戶(hù)數據進(jìn)行相應匹配得到用戶(hù)畫(huà)像。
建議先去公眾號關(guān)注一下,然后給公眾號發(fā)送“查詢(xún)”功能,就可以查到公眾號標簽下全部微信文章的標題、發(fā)布時(shí)間、閱讀數、分享數、歷史閱讀量和轉發(fā)量。
我在開(kāi)發(fā)公眾號的時(shí)候參考了一些文章中描述的,比如如果查詢(xún)公眾號里的某篇文章閱讀次數,或者是歷史消息數(微信的功能實(shí)現中,和歷史消息之間的一定距離,微信會(huì )給出一個(gè)標記),或者是文章分享量等等。原理大致就是公眾號要有一個(gè)redis服務(wù)端與公眾號相對應(如果你的目的是簡(jiǎn)單查詢(xún)公眾號里內容的一個(gè)收藏功能,可以換成redisconnect),所以先解決你redis服務(wù)端如何與公眾號服務(wù)端連接,然后再用服務(wù)端接口與session相互傳遞數據即可。
你可以先在公眾號發(fā)布文章時(shí),用代碼獲取到該公眾號的用戶(hù),發(fā)送給redis去存儲。至于以后使用,可以直接通過(guò)session去相互傳遞用戶(hù)信息就可以了。
這位大神的文章!微信公眾號公眾號的數據存儲機制是如何的?
公眾號推送文章的時(shí)候,會(huì )在數據庫中隨機選取一條數據進(jìn)行緩存,并且設置一個(gè)時(shí)間間隔來(lái)判斷當前數據庫的數據來(lái)源,緩存到數據庫中的數據是定時(shí)更新的,
一個(gè)好的公眾號爬蟲(chóng)將內容抓取保存下來(lái)慢慢賞析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 110 次瀏覽 ? 2021-08-15 19:09
有時(shí)候我們會(huì )遇到一個(gè)很好的公眾號,里面的每一篇文章都值得反復閱讀。這時(shí)候我們就可以使用公眾號爬蟲(chóng)抓取并保存內容,慢慢欣賞。
安裝 Fiddler
Fiddler的下載地址為:安裝完成后,確保手機和電腦的網(wǎng)絡(luò )是同一個(gè)局域網(wǎng)。
Finder 配置
點(diǎn)擊工具>>選項>>連接面板,參考下圖配置,Fiddler的默認端口是8888,如果8888端口被占用,可以修改為其他端口。
點(diǎn)擊工具>>選項>>HTTPS面板,參考下圖進(jìn)行配置
安卓手機配置
進(jìn)入WLAN設置,選擇當前局域網(wǎng)的WIFI設置,代理設置為手動(dòng),代理服務(wù)器主機名為Finder,右上角點(diǎn)擊在線(xiàn),端口號為8888。
在手機瀏覽器中訪(fǎng)問(wèn)配置的地址:8888,顯示Fiddler Echo Service時(shí),手機配置成功。
為了讓 Finddler 攔截 HTTPS 請求,必須在手機中安裝 CA 證書(shū)。在 :8888 中,單擊 FiddlerRoot 證書(shū)下載并安裝證書(shū)。至此配置工作完成。
微信歷史頁(yè)面
以【騰旭大神網(wǎng)】為例,點(diǎn)擊【上海新聞】菜單的二級菜單【歷史新聞】。
觀(guān)察 Fiddler 的變化。此時(shí),左側窗口中會(huì )陸續出現多個(gè)URL連接地址。這是 Fiddler 截獲的 Android 請求。
Result:服務(wù)器的響應結果 Protocol:請求協(xié)議,微信協(xié)議都是HTTPS,所以需要在手機和PC端安裝證書(shū)。 HOST: 主機名 URL: URL 地址
以 .com/mp/profile_ext?action=home... 開(kāi)頭的 URL 之一正是我們所需要的。點(diǎn)擊右側的Inspectors面板,然后點(diǎn)擊下方的Headers和WebView面板,會(huì )出現如下圖案
標題面板
Request Headers:請求行,收錄請求方法、請求地址、等待C??lient的請求協(xié)議、Cookies:請求頭
WebView 面板
WebView面板顯示服務(wù)器返回的HTML代碼的渲染結果,Textview面板顯示服務(wù)器返回的HTML源代碼
獲取歷史頁(yè)面
在上一節中,公眾號消息歷史頁(yè)面已經(jīng)可以在 Fiddler 的 WebView 面板中顯示。本節使用Python抓取歷史頁(yè)面。創(chuàng )建一個(gè)名為wxcrawler.py的腳本,我們需要URL地址和HEADER請求頭來(lái)抓取頁(yè)面,直接從Finder中復制
將標頭轉換為 Json
# coding:utf-8
import requests
class WxCrawler(object):
# 復制出來(lái)的 Headers,注意這個(gè) x-wechat-key,有時(shí)間限制,會(huì )過(guò)期。當返回的內容出現 驗證 的情況,就需要換 x-wechat-key 了
headers = """Connection: keep-alive
x-wechat-uin: MTY4MTI3NDIxNg%3D%3D
x-wechat-key: 5ab2dd82e79bc5343ac5fb7fd20d72509db0ee1772b1043c894b24d441af288ae942feb4cfb4d234f00a4a5ab88c5b625d415b83df4b536d99befc096448d80cfd5a7fcd33380341aa592d070b1399a1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 10; GM1900 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 XWEB/992 MMWEBSDK/191102 Mobile Safari/537.36 MMWEBID/7220 MicroMessenger/7.0.9.1560(0x27000933) Process/toolsmp NetType/WIFI Language/zh_CN ABI/arm64
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/wxpic,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en-US;q=0.9
Cookie: wxuin=1681274216; devicetype=android-29; version=27000933; lang=zh_CN; pass_ticket=JvAJfzySl6uLWYdYwzyQ+4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X+T6K; rewardsn=; wxtokenkey=777; wap_sid2=COjq2KEGElxBTmotQWtVY2Iwb3BZRkIzd0Y0SnpaUG1HNTQ0SDA4UGJOZi1kaFdFbkl1MHUyYkRKX2xiWFU5VVhDNXBkQlY0U0pRXzlCZW9qZ29oYW9DWmZYOTdmQTBFQUFBfjD+hInvBTgNQJVO
X-Requested-With: com.tencent.mm"""
url = "https://mp.weixin.qq .com/mp/profile_ext?action=home&__biz=MjEwNDI4NTA2MQ==&scene=123&devicetype=android-29&version=27000933&lang=zh_CN&nettype=WIFI&a8scene=7&session_us=wxid_2574365742721&pass_ticket=JvAJfzySl6uLWYdYwzyQ%2B4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X%2BT6K&wx_header=1"
# 將 Headers 轉換為 字典
def header_to_dict(self):
headers = self.headers.split("\n")
headers_dict = dict()
for h in headers:
k,v = h.split(":")
headers_dict[k.strip()] = v.strip()
return headers_dict;
def run(self):
headers = self.header_to_dict()
response = requests.get(self.url, headers=headers, verify=False)
print(response.text)
if __name__ == "__main__":
wx = WxCrawler()
wx.run()
下圖是控制臺打印的內容,其中JavaScript中變量msgList的值就是需要的內容
下一步是提取msgList的內容,使用正則表達式提取內容,返回一個(gè)文章list
import re
import html
import json
def article_list(self, context):
rex = "msgList = '({.*?})'"
pattern = re.compile(pattern=rex, flags=re.S)
match = pattern.search(context)
if match:
data = match.group(1)
data = html.unescape(data)
data = json.loads(data)
articles = data.get("list")
return articles
以下是解析msgList的結果
title:文章title content_url:文章link source_url:原鏈接,可能為空 摘要:摘要封面:封面圖片 datetime:推送時(shí)間
其他內容存儲在 multi_app_msg_item_list 中
{'comm_msg_info':
{
'id': 1000033457,
'type': 49,
'datetime': 1575101627,
'fakeid': '2104285061',
'status': 2,
'content': ''
},
'app_msg_ext_info':
{
'title': '快查手機!5000多張人臉照正被賤賣(mài),數據曝光令人觸目驚心!',
'digest': '誰(shuí)有權收集人臉信息?',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=1&sn=3e4c8eb35abb1b09a4077064ba0c44c8&chksm=4ea8211079dfa8065435409f4d3d3538ad28ddc197063a7e1820dafb9ee23beefca59c3b32d4&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/G8vkERUJibkstwkIvXB960sMOyQdYF2x2qibTxAIq2eUljRbB6zqBq6ziaiaVqm8GtEWticE6zAYGUYqKJ3SMuvv1EQ\\/0?wx_fmt=jpeg',
'subtype': 9,
'is_multi': 1,
'multi_app_msg_item_list':
[{
'title': '先有雞還是先有蛋?6.1億年前的胚胎化石揭曉了',
'digest': '解決了困擾大申君20多年的問(wèn)題',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=2&sn=07b95d31efa9f56d460a16bca817f30d&chksm=4ea8211079dfa8068f42bf0e5df076a95ee3c24cab71294632fe587bcc9238c1a7fb7cd9629b&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/yl6JkZAE3S92BESibpZgTPE1BcBhSLiaGOgpgVicaLdkIXGExe3mYdyVkE2SDXL1x2lFxldeXu8qXQYwtnx9vibibzQ\\/0?wx_fmt=jpeg',
'author': '',
'copyright_stat': 100,
'del_flag': 1,
'item_show_type': 0,
'audio_fileid': 0,
'duration': 0,
'play_url': '',
'malicious_title_reason_id': 0,
'malicious_content_type': 0
},
{
'title': '外交部驚現“李佳琦”!網(wǎng)友直呼:“OMG被種草了!”',
'digest': '種草了!',
'content': '', ...}
...]
獲取單個(gè)頁(yè)面
在上一節中,我們可以得到app_msg_ext_info中的content_url地址,需要從comm_msg_info的不規則Json中獲取。這是使用demjson模塊完成不規則的comm_msg_info。
安裝 demjson 模塊
pip3 install demjson
import demjson
# 獲取單個(gè)文章的URL
content_url_array = []
def content_url(self, articles):
content_url = []
for a in articles:
a = str(a).replace("\/", "/")
a = demjson.decode(a)
content_url_array.append(a['app_msg_ext_info']["content_url"])
# 取更多的
for multi in a['app_msg_ext_info']["multi_app_msg_item_list"]:
self.content_url_array.append(multi['content_url'])
return content_url
獲取單個(gè)文章的地址后,使用requests.get()函數獲取HTML頁(yè)面并解析
# 解析單個(gè)文章
def parse_article(self, headers, content_url):
for i in content_url:
content_response = requests.get(i, headers=headers, verify=False)
with open("wx.html", "wb") as f:
f.write(content_response.content)
html = open("wx.html", encoding="utf-8").read()
soup_body = BeautifulSoup(html, "html.parser")
context = soup_body.find('div', id = 'js_content').text.strip()
print(context)
所有歷史文章
當你向下滑動(dòng)歷史消息時(shí),出現Loading...這是公眾號正在翻頁(yè)的歷史消息。查Fiddler,公眾號請求的地址是.com/mp/profile_ext? action=getmsg&__biz...
翻頁(yè)請求地址返回結果,一般可以分析。
ret:是否成功,0代表成功msg_count:每頁(yè)的條目數 can_msg_continue:是否繼續翻頁(yè),1代表繼續翻頁(yè)general_msg_list:數據,包括標題、文章地址等信息
def page(self, headers):
response = requests.get(self.page_url, headers=headers, verify=False)
result = response.json()
if result.get("ret") == 0:
msg_list = result.get("general_msg_list")
msg_list = demjson.decode(msg_list)
self.content_url(msg_list["list"])
#遞歸
self.page(headers)
else:
print("無(wú)法獲取內容")
總結
這里已經(jīng)爬取了公眾號的內容,但尚未爬取單個(gè)文章的閱讀和查看數量。想想看,如何抓取這些內容變化?
示例代碼:
PS:公眾號內回復:Python,可以進(jìn)入Python新手學(xué)習交流群,一起
-END- 查看全部
一個(gè)好的公眾號爬蟲(chóng)將內容抓取保存下來(lái)慢慢賞析
有時(shí)候我們會(huì )遇到一個(gè)很好的公眾號,里面的每一篇文章都值得反復閱讀。這時(shí)候我們就可以使用公眾號爬蟲(chóng)抓取并保存內容,慢慢欣賞。
安裝 Fiddler
Fiddler的下載地址為:安裝完成后,確保手機和電腦的網(wǎng)絡(luò )是同一個(gè)局域網(wǎng)。
Finder 配置
點(diǎn)擊工具>>選項>>連接面板,參考下圖配置,Fiddler的默認端口是8888,如果8888端口被占用,可以修改為其他端口。
點(diǎn)擊工具>>選項>>HTTPS面板,參考下圖進(jìn)行配置
安卓手機配置
進(jìn)入WLAN設置,選擇當前局域網(wǎng)的WIFI設置,代理設置為手動(dòng),代理服務(wù)器主機名為Finder,右上角點(diǎn)擊在線(xiàn),端口號為8888。
在手機瀏覽器中訪(fǎng)問(wèn)配置的地址:8888,顯示Fiddler Echo Service時(shí),手機配置成功。
為了讓 Finddler 攔截 HTTPS 請求,必須在手機中安裝 CA 證書(shū)。在 :8888 中,單擊 FiddlerRoot 證書(shū)下載并安裝證書(shū)。至此配置工作完成。
微信歷史頁(yè)面
以【騰旭大神網(wǎng)】為例,點(diǎn)擊【上海新聞】菜單的二級菜單【歷史新聞】。
觀(guān)察 Fiddler 的變化。此時(shí),左側窗口中會(huì )陸續出現多個(gè)URL連接地址。這是 Fiddler 截獲的 Android 請求。
Result:服務(wù)器的響應結果 Protocol:請求協(xié)議,微信協(xié)議都是HTTPS,所以需要在手機和PC端安裝證書(shū)。 HOST: 主機名 URL: URL 地址
以 .com/mp/profile_ext?action=home... 開(kāi)頭的 URL 之一正是我們所需要的。點(diǎn)擊右側的Inspectors面板,然后點(diǎn)擊下方的Headers和WebView面板,會(huì )出現如下圖案
標題面板
Request Headers:請求行,收錄請求方法、請求地址、等待C??lient的請求協(xié)議、Cookies:請求頭
WebView 面板
WebView面板顯示服務(wù)器返回的HTML代碼的渲染結果,Textview面板顯示服務(wù)器返回的HTML源代碼
獲取歷史頁(yè)面
在上一節中,公眾號消息歷史頁(yè)面已經(jīng)可以在 Fiddler 的 WebView 面板中顯示。本節使用Python抓取歷史頁(yè)面。創(chuàng )建一個(gè)名為wxcrawler.py的腳本,我們需要URL地址和HEADER請求頭來(lái)抓取頁(yè)面,直接從Finder中復制
將標頭轉換為 Json
# coding:utf-8
import requests
class WxCrawler(object):
# 復制出來(lái)的 Headers,注意這個(gè) x-wechat-key,有時(shí)間限制,會(huì )過(guò)期。當返回的內容出現 驗證 的情況,就需要換 x-wechat-key 了
headers = """Connection: keep-alive
x-wechat-uin: MTY4MTI3NDIxNg%3D%3D
x-wechat-key: 5ab2dd82e79bc5343ac5fb7fd20d72509db0ee1772b1043c894b24d441af288ae942feb4cfb4d234f00a4a5ab88c5b625d415b83df4b536d99befc096448d80cfd5a7fcd33380341aa592d070b1399a1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 10; GM1900 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 XWEB/992 MMWEBSDK/191102 Mobile Safari/537.36 MMWEBID/7220 MicroMessenger/7.0.9.1560(0x27000933) Process/toolsmp NetType/WIFI Language/zh_CN ABI/arm64
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/wxpic,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en-US;q=0.9
Cookie: wxuin=1681274216; devicetype=android-29; version=27000933; lang=zh_CN; pass_ticket=JvAJfzySl6uLWYdYwzyQ+4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X+T6K; rewardsn=; wxtokenkey=777; wap_sid2=COjq2KEGElxBTmotQWtVY2Iwb3BZRkIzd0Y0SnpaUG1HNTQ0SDA4UGJOZi1kaFdFbkl1MHUyYkRKX2xiWFU5VVhDNXBkQlY0U0pRXzlCZW9qZ29oYW9DWmZYOTdmQTBFQUFBfjD+hInvBTgNQJVO
X-Requested-With: com.tencent.mm"""
url = "https://mp.weixin.qq .com/mp/profile_ext?action=home&__biz=MjEwNDI4NTA2MQ==&scene=123&devicetype=android-29&version=27000933&lang=zh_CN&nettype=WIFI&a8scene=7&session_us=wxid_2574365742721&pass_ticket=JvAJfzySl6uLWYdYwzyQ%2B4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X%2BT6K&wx_header=1"
# 將 Headers 轉換為 字典
def header_to_dict(self):
headers = self.headers.split("\n")
headers_dict = dict()
for h in headers:
k,v = h.split(":")
headers_dict[k.strip()] = v.strip()
return headers_dict;
def run(self):
headers = self.header_to_dict()
response = requests.get(self.url, headers=headers, verify=False)
print(response.text)
if __name__ == "__main__":
wx = WxCrawler()
wx.run()
下圖是控制臺打印的內容,其中JavaScript中變量msgList的值就是需要的內容
下一步是提取msgList的內容,使用正則表達式提取內容,返回一個(gè)文章list
import re
import html
import json
def article_list(self, context):
rex = "msgList = '({.*?})'"
pattern = re.compile(pattern=rex, flags=re.S)
match = pattern.search(context)
if match:
data = match.group(1)
data = html.unescape(data)
data = json.loads(data)
articles = data.get("list")
return articles
以下是解析msgList的結果
title:文章title content_url:文章link source_url:原鏈接,可能為空 摘要:摘要封面:封面圖片 datetime:推送時(shí)間
其他內容存儲在 multi_app_msg_item_list 中
{'comm_msg_info':
{
'id': 1000033457,
'type': 49,
'datetime': 1575101627,
'fakeid': '2104285061',
'status': 2,
'content': ''
},
'app_msg_ext_info':
{
'title': '快查手機!5000多張人臉照正被賤賣(mài),數據曝光令人觸目驚心!',
'digest': '誰(shuí)有權收集人臉信息?',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=1&sn=3e4c8eb35abb1b09a4077064ba0c44c8&chksm=4ea8211079dfa8065435409f4d3d3538ad28ddc197063a7e1820dafb9ee23beefca59c3b32d4&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/G8vkERUJibkstwkIvXB960sMOyQdYF2x2qibTxAIq2eUljRbB6zqBq6ziaiaVqm8GtEWticE6zAYGUYqKJ3SMuvv1EQ\\/0?wx_fmt=jpeg',
'subtype': 9,
'is_multi': 1,
'multi_app_msg_item_list':
[{
'title': '先有雞還是先有蛋?6.1億年前的胚胎化石揭曉了',
'digest': '解決了困擾大申君20多年的問(wèn)題',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=2&sn=07b95d31efa9f56d460a16bca817f30d&chksm=4ea8211079dfa8068f42bf0e5df076a95ee3c24cab71294632fe587bcc9238c1a7fb7cd9629b&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/yl6JkZAE3S92BESibpZgTPE1BcBhSLiaGOgpgVicaLdkIXGExe3mYdyVkE2SDXL1x2lFxldeXu8qXQYwtnx9vibibzQ\\/0?wx_fmt=jpeg',
'author': '',
'copyright_stat': 100,
'del_flag': 1,
'item_show_type': 0,
'audio_fileid': 0,
'duration': 0,
'play_url': '',
'malicious_title_reason_id': 0,
'malicious_content_type': 0
},
{
'title': '外交部驚現“李佳琦”!網(wǎng)友直呼:“OMG被種草了!”',
'digest': '種草了!',
'content': '', ...}
...]
獲取單個(gè)頁(yè)面
在上一節中,我們可以得到app_msg_ext_info中的content_url地址,需要從comm_msg_info的不規則Json中獲取。這是使用demjson模塊完成不規則的comm_msg_info。
安裝 demjson 模塊
pip3 install demjson
import demjson
# 獲取單個(gè)文章的URL
content_url_array = []
def content_url(self, articles):
content_url = []
for a in articles:
a = str(a).replace("\/", "/")
a = demjson.decode(a)
content_url_array.append(a['app_msg_ext_info']["content_url"])
# 取更多的
for multi in a['app_msg_ext_info']["multi_app_msg_item_list"]:
self.content_url_array.append(multi['content_url'])
return content_url
獲取單個(gè)文章的地址后,使用requests.get()函數獲取HTML頁(yè)面并解析
# 解析單個(gè)文章
def parse_article(self, headers, content_url):
for i in content_url:
content_response = requests.get(i, headers=headers, verify=False)
with open("wx.html", "wb") as f:
f.write(content_response.content)
html = open("wx.html", encoding="utf-8").read()
soup_body = BeautifulSoup(html, "html.parser")
context = soup_body.find('div', id = 'js_content').text.strip()
print(context)
所有歷史文章
當你向下滑動(dòng)歷史消息時(shí),出現Loading...這是公眾號正在翻頁(yè)的歷史消息。查Fiddler,公眾號請求的地址是.com/mp/profile_ext? action=getmsg&__biz...
翻頁(yè)請求地址返回結果,一般可以分析。
ret:是否成功,0代表成功msg_count:每頁(yè)的條目數 can_msg_continue:是否繼續翻頁(yè),1代表繼續翻頁(yè)general_msg_list:數據,包括標題、文章地址等信息
def page(self, headers):
response = requests.get(self.page_url, headers=headers, verify=False)
result = response.json()
if result.get("ret") == 0:
msg_list = result.get("general_msg_list")
msg_list = demjson.decode(msg_list)
self.content_url(msg_list["list"])
#遞歸
self.page(headers)
else:
print("無(wú)法獲取內容")
總結
這里已經(jīng)爬取了公眾號的內容,但尚未爬取單個(gè)文章的閱讀和查看數量。想想看,如何抓取這些內容變化?
示例代碼:
PS:公眾號內回復:Python,可以進(jìn)入Python新手學(xué)習交流群,一起
-END-
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的處理思路
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 181 次瀏覽 ? 2021-08-14 19:05
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的公眾號一樣。2.重定向的處理思路是用jwttokenhttp/1.1,get/post的cookieheader分別替換成2.0\2.1\2.2的cookie,所以店鋪公眾號不用對齊參數直接對接會(huì )成功,要是客戶(hù)端修改了店鋪公眾號的cookie則難通過(guò)querylist進(jìn)行對齊;實(shí)際應用中要怎么操作對齊參數得根據實(shí)際需求而定。
支付寶和商戶(hù)開(kāi)放平臺可以互通,要么通過(guò)瀏覽器,要么通過(guò)querylistapi;阿里云方案可能有問(wèn)題(感覺(jué)沒(méi)通過(guò)審核),最簡(jiǎn)單的就是通過(guò)collection,在api后面加參數querylist:[2.1]就是2.1的公眾號端格式啊,
只能用querylist,不能用cookie,除非你寫(xiě)cookie主動(dòng)對接。上alifixion通過(guò)客戶(hù)端post獲取cookie發(fā)送給公眾號。前端通過(guò)網(wǎng)頁(yè)版發(fā)送數據,要通過(guò)cookie統計,目前支付寶的e-cookie抓取控制還不夠完善,有些數據抓取不到。所以只能用querylist。
看alibaba需求來(lái),比如天貓要完全對接聯(lián)盟,是要來(lái)回一個(gè)個(gè)查,如果只是對接個(gè)聯(lián)盟,那么不需要做對齊。如果雙方協(xié)議不一樣,你想最終相互對齊,那么就要再配置一遍querylist。
從alib申請連接,按照常規請求都可以,順便補充一下:querylist的數據結構是什么, 查看全部
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的處理思路
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的公眾號一樣。2.重定向的處理思路是用jwttokenhttp/1.1,get/post的cookieheader分別替換成2.0\2.1\2.2的cookie,所以店鋪公眾號不用對齊參數直接對接會(huì )成功,要是客戶(hù)端修改了店鋪公眾號的cookie則難通過(guò)querylist進(jìn)行對齊;實(shí)際應用中要怎么操作對齊參數得根據實(shí)際需求而定。
支付寶和商戶(hù)開(kāi)放平臺可以互通,要么通過(guò)瀏覽器,要么通過(guò)querylistapi;阿里云方案可能有問(wèn)題(感覺(jué)沒(méi)通過(guò)審核),最簡(jiǎn)單的就是通過(guò)collection,在api后面加參數querylist:[2.1]就是2.1的公眾號端格式啊,
只能用querylist,不能用cookie,除非你寫(xiě)cookie主動(dòng)對接。上alifixion通過(guò)客戶(hù)端post獲取cookie發(fā)送給公眾號。前端通過(guò)網(wǎng)頁(yè)版發(fā)送數據,要通過(guò)cookie統計,目前支付寶的e-cookie抓取控制還不夠完善,有些數據抓取不到。所以只能用querylist。
看alibaba需求來(lái),比如天貓要完全對接聯(lián)盟,是要來(lái)回一個(gè)個(gè)查,如果只是對接個(gè)聯(lián)盟,那么不需要做對齊。如果雙方協(xié)議不一樣,你想最終相互對齊,那么就要再配置一遍querylist。
從alib申請連接,按照常規請求都可以,順便補充一下:querylist的數據結構是什么,
一下如何使用Python構建一個(gè)個(gè)人微信公眾號的電影搜索功能
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 221 次瀏覽 ? 2021-08-11 06:02
今天介紹一下如何使用Python為個(gè)人微信公眾號搭建電影搜索功能。本文文章將涉及:
要練習文章本文的所有內容,您需要擁有以下資源:
如果不使用注冊的域名和個(gè)人微信公眾號,可以申請微信官方平臺測試號使用。流程類(lèi)似,申請地址為:
現在我們開(kāi)始輸入文本。
1. 創(chuàng )建和部署 Django 應用程序
在這個(gè)個(gè)人公眾號電影搜索器中,一個(gè)可靠的網(wǎng)絡(luò )服務(wù)是連接電影資源數據和對接微信公眾號的關(guān)鍵。電影資源爬取采集后,需要存入數據庫。接收和回復還取決于 Web 應用程序提供的服務(wù)。所以我們首先需要創(chuàng )建一個(gè) Web 應用程序。 Python中有許多Web框架。這里我們選擇Django1.10,功能齊全,功能強大。沒(méi)有安裝Django的同學(xué)使用pip命令安裝Django模塊:
pip install django==1.10
1.1 創(chuàng )建 Django 項目
我們服務(wù)器上的當前目錄如下所示:
使用Django的django-admin在這個(gè)目錄下創(chuàng )建一個(gè)Django項目:
django-admin startproject wxmovie
這樣我們的文件夾目錄下多了一個(gè)叫wxmovie的文件夾,里面有一個(gè)manage.py文件和一個(gè)wxmovie文件夾:
1.2 創(chuàng )建 Django 應用程序
Django項目創(chuàng )建完成后,我們進(jìn)入項目路徑,使用其manage.py文件繼續創(chuàng )建Django應用:
python3 manage.py startapp movie
此時(shí)wxmovie項目下多了一個(gè)名為movie的文件夾,里面收錄了電影應用的所有文件:
1.3 配置 Django 項目
Django 項目-wxmovie 和它的應用影片創(chuàng )建完成后,讓我們對這個(gè)項目做一些基本的配置。打開(kāi)/wxmovie/wxmovie/目錄下的settings.py文件。
將應用影片添加到 wxmovie 項目中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'movie',
]
在項目根路徑下創(chuàng )建一個(gè)名為template的文件夾作為django模板目錄,并將此路徑添加到TEMPLATES中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(os.path.split(os.path.dirname(__file__))[0],'template'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
修改項目的數據庫配置為MySQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '****',
'USER': '****',
'PASSWORD': '***',
'HOST': '',
'PORT': '3306',
}
}
修改項目時(shí)區的語(yǔ)言配置:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
因為我們使用的是Python3,所以需要在/wxmovie/wxmovie/目錄下的\__init__.py文件中加入如下代碼,這樣我們才能在項目中使用MySQL(需要先安裝pymysql模塊): 查看全部
一下如何使用Python構建一個(gè)個(gè)人微信公眾號的電影搜索功能
今天介紹一下如何使用Python為個(gè)人微信公眾號搭建電影搜索功能。本文文章將涉及:
要練習文章本文的所有內容,您需要擁有以下資源:
如果不使用注冊的域名和個(gè)人微信公眾號,可以申請微信官方平臺測試號使用。流程類(lèi)似,申請地址為:
現在我們開(kāi)始輸入文本。
1. 創(chuàng )建和部署 Django 應用程序
在這個(gè)個(gè)人公眾號電影搜索器中,一個(gè)可靠的網(wǎng)絡(luò )服務(wù)是連接電影資源數據和對接微信公眾號的關(guān)鍵。電影資源爬取采集后,需要存入數據庫。接收和回復還取決于 Web 應用程序提供的服務(wù)。所以我們首先需要創(chuàng )建一個(gè) Web 應用程序。 Python中有許多Web框架。這里我們選擇Django1.10,功能齊全,功能強大。沒(méi)有安裝Django的同學(xué)使用pip命令安裝Django模塊:
pip install django==1.10
1.1 創(chuàng )建 Django 項目
我們服務(wù)器上的當前目錄如下所示:

使用Django的django-admin在這個(gè)目錄下創(chuàng )建一個(gè)Django項目:
django-admin startproject wxmovie

這樣我們的文件夾目錄下多了一個(gè)叫wxmovie的文件夾,里面有一個(gè)manage.py文件和一個(gè)wxmovie文件夾:

1.2 創(chuàng )建 Django 應用程序
Django項目創(chuàng )建完成后,我們進(jìn)入項目路徑,使用其manage.py文件繼續創(chuàng )建Django應用:
python3 manage.py startapp movie

此時(shí)wxmovie項目下多了一個(gè)名為movie的文件夾,里面收錄了電影應用的所有文件:

1.3 配置 Django 項目
Django 項目-wxmovie 和它的應用影片創(chuàng )建完成后,讓我們對這個(gè)項目做一些基本的配置。打開(kāi)/wxmovie/wxmovie/目錄下的settings.py文件。
將應用影片添加到 wxmovie 項目中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'movie',
]
在項目根路徑下創(chuàng )建一個(gè)名為template的文件夾作為django模板目錄,并將此路徑添加到TEMPLATES中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(os.path.split(os.path.dirname(__file__))[0],'template'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
修改項目的數據庫配置為MySQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '****',
'USER': '****',
'PASSWORD': '***',
'HOST': '',
'PORT': '3306',
}
}
修改項目時(shí)區的語(yǔ)言配置:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
因為我們使用的是Python3,所以需要在/wxmovie/wxmovie/目錄下的\__init__.py文件中加入如下代碼,這樣我們才能在項目中使用MySQL(需要先安裝pymysql模塊):
Q&;A(.39)模擬用戶(hù)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2021-08-09 03:29
一.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 = {}
瀏覽器 = webdriver.Chrome()
browser.get('#39;)
睡覺(jué)(3)
browser.delete_all_cookies()
睡覺(jué)(2)
#點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
睡覺(jué)(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(密碼)
睡覺(jué)(2)
#點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
睡覺(jué)(2)
#微信登錄驗證
print('請掃描二維碼')
睡覺(jué)(20)
#刷新當前網(wǎng)頁(yè)
browser.get('#39;)
睡覺(jué)(5)
#獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
#獲取當前cookie
cookies = browser.get_cookies()
對于 cookie 中的項目:
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è)字典來(lái)存儲數據
paramdict = {}
對于 paramList 中的項目:
paramdict[item.split('=')[0]] = item.split('=')[1]
#返回令牌
返回參數['token']
定義一個(gè)登錄方法,里面的參數是登錄賬號和密碼,然后定義一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù),輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,用登錄微信掃一掃即可。
刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token,然后返回。
第二步:
1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
url ='#39;
標題 = {
'HOST':'',
'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 ='#39;
參數 = {
'action':'search_biz',
'開(kāi)始':'0',
'計數':'5',
'query':'搜索公眾號',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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]
1
通過(guò)上面的代碼可以得到對應的公眾號數據
fakeid = list.get('fakeid')
1
通過(guò)上面的代碼可以得到對應的fakeid
2.請求獲取微信公眾號文章接口,獲取我們需要的文章data
appmsg_url ='#39;
params_data = {
'action':'list_ex',
'開(kāi)始':'0',
'計數':'5',
'fakeid':fakeid,
'type': '9',
'查詢(xún)':'',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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í)間,否則賬號很容易被封,獲取不到返回的數據。 查看全部
Q&;A(.39)模擬用戶(hù)
一.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 = {}
瀏覽器 = webdriver.Chrome()
browser.get('#39;)
睡覺(jué)(3)
browser.delete_all_cookies()
睡覺(jué)(2)
#點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
睡覺(jué)(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(密碼)
睡覺(jué)(2)
#點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
睡覺(jué)(2)
#微信登錄驗證
print('請掃描二維碼')
睡覺(jué)(20)
#刷新當前網(wǎng)頁(yè)
browser.get('#39;)
睡覺(jué)(5)
#獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
#獲取當前cookie
cookies = browser.get_cookies()
對于 cookie 中的項目:
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è)字典來(lái)存儲數據
paramdict = {}
對于 paramList 中的項目:
paramdict[item.split('=')[0]] = item.split('=')[1]
#返回令牌
返回參數['token']
定義一個(gè)登錄方法,里面的參數是登錄賬號和密碼,然后定義一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù),輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,用登錄微信掃一掃即可。
刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token,然后返回。
第二步:
1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
url ='#39;
標題 = {
'HOST':'',
'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 ='#39;
參數 = {
'action':'search_biz',
'開(kāi)始':'0',
'計數':'5',
'query':'搜索公眾號',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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]
1
通過(guò)上面的代碼可以得到對應的公眾號數據
fakeid = list.get('fakeid')
1
通過(guò)上面的代碼可以得到對應的fakeid
2.請求獲取微信公眾號文章接口,獲取我們需要的文章data
appmsg_url ='#39;
params_data = {
'action':'list_ex',
'開(kāi)始':'0',
'計數':'5',
'fakeid':fakeid,
'type': '9',
'查詢(xún)':'',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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í)間,否則賬號很容易被封,獲取不到返回的數據。
蘇南大叔講述一下一款國人出品的php庫,叫做querylist
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2021-08-07 00:28
本文開(kāi)頭,蘇南大叔講了一個(gè)中國人出品的PHP庫,叫querylist,可以用來(lái)抓取網(wǎng)絡(luò )數據。這個(gè)查詢(xún)列表類(lèi)似于python下的scrapy。當然,在之前的文章中,蘇南大叔介紹了scrapy crawling。有興趣的可以通過(guò)文末的鏈接了解更多。
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-1)
另外,這個(gè)查詢(xún)列表是基于開(kāi)源庫phpquery的。如果你用過(guò)phpquery,在接下來(lái)的學(xué)習中你會(huì )看到一些類(lèi)似的陰影。如果你沒(méi)用過(guò)phpquery,那你還是可以對比一下jquery,思路都差不多。好了,介紹這么多。如果您有興趣,歡迎查看下一個(gè)查詢(xún)列表系列文章。
蘇南大叔實(shí)驗時(shí)的composer版本是:1.6.5,php版本是7.2.1。
官方網(wǎng)站和安裝要求
Querylist是中國人的作品,其官方網(wǎng)站是:
querylist要求的php版本至少為7.0,可以通過(guò)以下命令查看本地php版本號:
php -v
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-2)
安裝第一步是安裝composer
安裝composer就不描述太多了。 querylist的使用,理論上與composer密切相關(guān)。與composer的使用相關(guān)的文章請參考文末鏈接。如果你已經(jīng)安裝了composer,可以跳過(guò)這一步。
下面介紹的是mac下使用命令行語(yǔ)句安裝composer的例子:
curl -o composer.phar 'https://getcomposer.org/composer.phar'
mv composer.phar /usr/local/bin/composer
chmod 777 /usr/local/bin/composer
相關(guān)鏈接:
第二步是設置全局加速composer的repo庫
這一步不是必須的。如果安裝querylist時(shí)沒(méi)有響應,可以執行該語(yǔ)句。聲明的目的是為了把composer改成快速的國內源碼,類(lèi)似于node下的cnpm。
composer config -g repo.packagist composer https://packagist.phpcomposer.com
第三步,安裝querylist
在空白文件夾下,首先初始化composer項目。
composer init
然后使用composer安裝jaeger/querylist。
composer require jaeger/querylist
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-3)
安裝成功,查看版本號
截至發(fā)稿,使用以下命令查看最新版本的querylist版本號4.0.3。
composer show -i jaeger/querylist
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-4)
介紹示例demo
下面這句話(huà)是官方給出的最簡(jiǎn)單的配置。在此,限于篇幅,蘇南叔不做過(guò)多解釋。
require './vendor/autoload.php';
use QL\QueryList;
$html = array('.two>img:eq(1)','src'),
//采集span標簽中的HTML內容
'other' => array('span','html')
);
$data = QueryList::html($html)
->rules($rules)
->query()
->getData();
print_r($data->all());
使用
是key中的key點(diǎn)。新手經(jīng)常被卡在這里。還有autoload.php,這是composer項目的標準配置。剩下的就是querylist的相關(guān)功能了,下面蘇南叔叔會(huì )詳細介紹。敬請關(guān)注。
require './vendor/autoload.php';
use QL\QueryList;
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-5)
相關(guān)鏈接匯總
本文中蘇南大叔介紹的querylist與scrapy類(lèi)似。但是querylist是基于php的,對php的忠實(shí)用戶(hù)更具吸引力。
不過(guò),蘇南叔還是給你一個(gè)建議,那就是多嘗試python。在目前的環(huán)境下,看來(lái)python系列還是很有前途的。而且在爬取方面,scrapy 還是比 querylist 有優(yōu)勢。好的,僅此而已。請繼續關(guān)注蘇南叔的后續文字,謝謝閱讀。
[蘋(píng)果]
[添加群組]
【源碼】本文中的代碼片段及相關(guān)軟件,請點(diǎn)擊此處獲取
【絕密】秘籍文章入口,只教給有緣人
查詢(xún)列表 phpquery 查看全部
蘇南大叔講述一下一款國人出品的php庫,叫做querylist
本文開(kāi)頭,蘇南大叔講了一個(gè)中國人出品的PHP庫,叫querylist,可以用來(lái)抓取網(wǎng)絡(luò )數據。這個(gè)查詢(xún)列表類(lèi)似于python下的scrapy。當然,在之前的文章中,蘇南大叔介紹了scrapy crawling。有興趣的可以通過(guò)文末的鏈接了解更多。

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-1)
另外,這個(gè)查詢(xún)列表是基于開(kāi)源庫phpquery的。如果你用過(guò)phpquery,在接下來(lái)的學(xué)習中你會(huì )看到一些類(lèi)似的陰影。如果你沒(méi)用過(guò)phpquery,那你還是可以對比一下jquery,思路都差不多。好了,介紹這么多。如果您有興趣,歡迎查看下一個(gè)查詢(xún)列表系列文章。
蘇南大叔實(shí)驗時(shí)的composer版本是:1.6.5,php版本是7.2.1。
官方網(wǎng)站和安裝要求
Querylist是中國人的作品,其官方網(wǎng)站是:
querylist要求的php版本至少為7.0,可以通過(guò)以下命令查看本地php版本號:
php -v

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-2)
安裝第一步是安裝composer
安裝composer就不描述太多了。 querylist的使用,理論上與composer密切相關(guān)。與composer的使用相關(guān)的文章請參考文末鏈接。如果你已經(jīng)安裝了composer,可以跳過(guò)這一步。
下面介紹的是mac下使用命令行語(yǔ)句安裝composer的例子:
curl -o composer.phar 'https://getcomposer.org/composer.phar'
mv composer.phar /usr/local/bin/composer
chmod 777 /usr/local/bin/composer
相關(guān)鏈接:
第二步是設置全局加速composer的repo庫
這一步不是必須的。如果安裝querylist時(shí)沒(méi)有響應,可以執行該語(yǔ)句。聲明的目的是為了把composer改成快速的國內源碼,類(lèi)似于node下的cnpm。
composer config -g repo.packagist composer https://packagist.phpcomposer.com
第三步,安裝querylist
在空白文件夾下,首先初始化composer項目。
composer init
然后使用composer安裝jaeger/querylist。
composer require jaeger/querylist

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-3)
安裝成功,查看版本號
截至發(fā)稿,使用以下命令查看最新版本的querylist版本號4.0.3。
composer show -i jaeger/querylist

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-4)
介紹示例demo
下面這句話(huà)是官方給出的最簡(jiǎn)單的配置。在此,限于篇幅,蘇南叔不做過(guò)多解釋。
require './vendor/autoload.php';
use QL\QueryList;
$html = array('.two>img:eq(1)','src'),
//采集span標簽中的HTML內容
'other' => array('span','html')
);
$data = QueryList::html($html)
->rules($rules)
->query()
->getData();
print_r($data->all());
使用
是key中的key點(diǎn)。新手經(jīng)常被卡在這里。還有autoload.php,這是composer項目的標準配置。剩下的就是querylist的相關(guān)功能了,下面蘇南叔叔會(huì )詳細介紹。敬請關(guān)注。
require './vendor/autoload.php';
use QL\QueryList;

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-5)
相關(guān)鏈接匯總
本文中蘇南大叔介紹的querylist與scrapy類(lèi)似。但是querylist是基于php的,對php的忠實(shí)用戶(hù)更具吸引力。
不過(guò),蘇南叔還是給你一個(gè)建議,那就是多嘗試python。在目前的環(huán)境下,看來(lái)python系列還是很有前途的。而且在爬取方面,scrapy 還是比 querylist 有優(yōu)勢。好的,僅此而已。請繼續關(guān)注蘇南叔的后續文字,謝謝閱讀。


[蘋(píng)果]

[添加群組]

【源碼】本文中的代碼片段及相關(guān)軟件,請點(diǎn)擊此處獲取

【絕密】秘籍文章入口,只教給有緣人

查詢(xún)列表 phpquery
幾天的總條數的話(huà)這樣寫(xiě)的,真是太神奇了
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 103 次瀏覽 ? 2021-08-04 03:32
這幾天一直在做一些python項目的開(kāi)發(fā)。我使用了 python 的 ORM 框架 sqlAlchemy。因為對python和sqlAlchemy不熟悉,所以積累了一些小知識點(diǎn)分享給大家。
獲取文章總數
一般情況下,如果我們想知道表的總條目數,sql是這樣寫(xiě)的:
select count(id) from user
這樣我們就可以得到表中項目的總數
如果我想在sqlAlchemy中獲取項目總數應該怎么做?
這種用途,func需要被引用
from sqlalchemy import func
count =session.query(func.count(user.id)).scalar()
如上,我們可以得到數據的數量。
相關(guān)鏈接
截圖
按頁(yè)面搜索
比較簡(jiǎn)單,直接粘貼代碼
我的錯誤
查詢(xún)總條目數時(shí)不使用Func.count()
我是這樣寫(xiě)的
userlist=session.query(user).order_by(user.id.desc())
count=len(list(userlist))
userlist = userlist.limit(pageSize).offset(
(pageIndex-1)*pageSize)
這樣也可以得到數據的個(gè)數。如果數據量很小,你可能沒(méi)有什么感覺(jué)。數據量大的時(shí)候,你會(huì )發(fā)現查詢(xún)數據真的很慢
相當于查詢(xún)數據庫兩次,然后重新計算內存中的條目數和分頁(yè)。
這在大量數據的情況下效率極低 查看全部
幾天的總條數的話(huà)這樣寫(xiě)的,真是太神奇了
這幾天一直在做一些python項目的開(kāi)發(fā)。我使用了 python 的 ORM 框架 sqlAlchemy。因為對python和sqlAlchemy不熟悉,所以積累了一些小知識點(diǎn)分享給大家。
獲取文章總數
一般情況下,如果我們想知道表的總條目數,sql是這樣寫(xiě)的:
select count(id) from user
這樣我們就可以得到表中項目的總數
如果我想在sqlAlchemy中獲取項目總數應該怎么做?
這種用途,func需要被引用
from sqlalchemy import func
count =session.query(func.count(user.id)).scalar()
如上,我們可以得到數據的數量。
相關(guān)鏈接
截圖

按頁(yè)面搜索
比較簡(jiǎn)單,直接粘貼代碼
我的錯誤
查詢(xún)總條目數時(shí)不使用Func.count()
我是這樣寫(xiě)的
userlist=session.query(user).order_by(user.id.desc())
count=len(list(userlist))
userlist = userlist.limit(pageSize).offset(
(pageIndex-1)*pageSize)
這樣也可以得到數據的個(gè)數。如果數據量很小,你可能沒(méi)有什么感覺(jué)。數據量大的時(shí)候,你會(huì )發(fā)現查詢(xún)數據真的很慢
相當于查詢(xún)數據庫兩次,然后重新計算內存中的條目數和分頁(yè)。
這在大量數據的情況下效率極低
與token的代碼與上篇文章銜接起來(lái)代碼的流程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 150 次瀏覽 ? 2021-08-04 00:37
獲取網(wǎng)址
在我們解決cookie和token之前,那我們只需要把這兩個(gè)參數放到請求頭中就可以得到我們想要的
首先搜索公司賬號名稱(chēng)
這里打開(kāi)素材管理,點(diǎn)擊新建圖形素材
點(diǎn)擊超鏈接。轉到此頁(yè)面
在此處提取url、headers和參數并找出更改的參數
random參數是0-1之間的隨機浮點(diǎn)數,query是搜索內容,前面提取token
接下來(lái)我們看看獲取文章的請求和接口
我們對頁(yè)面的分析完成了,接下來(lái)我們開(kāi)始編寫(xiě)代碼,這次的代碼是和上一篇文章的代碼連接起來(lái)的
import time
import json
import random
import csv
from selenium import webdriver
from lxml import html
import requests
import re
# 獲取cookies和token
class C_ookie:
# 初始化
def __init__(self):
self.html = ''
# 獲取cookie
def get_cookie(self):
cooki = {}
url = 'https://mp.weixin.qq.com'
Browner = webdriver.Chrome()
Browner.get(url)
# 獲取賬號輸入框
ID = Browner.find_element_by_name('account')
# 獲取密碼輸入框
PW = Browner.find_element_by_name('password')
# 輸入賬號
#輸入賬號
id =
#輸入密碼
pw =
# id = input('請輸入賬號:')
# pw = input('請輸入密碼:')
ID.send_keys(id)
PW.send_keys(pw)
# 獲取登錄button,點(diǎn)擊登錄
Browner.find_element_by_class_name('btn_login').click()
# 等待掃二維碼
time.sleep(10)
cks = Browner.get_cookies()
for ck in cks:
cooki[ck['name']] = ck['value']
ck1 = json.dumps(cooki)
print(ck1)
with open('ck.txt','w') as f :
f.write(ck1)
f.close()
self.html = Browner.page_source
# 獲取文章
class getEssay:
def __init__(self):
# 獲取cookies
with open('ck.txt','r') as f :
cookie = f.read()
f.close()
self.cookie = json.loads(cookie)
# 獲取token
self.header = {
"HOST": "mp.weixin.qq.com",
"User-Agent": 'Mozilla / 5.0(WindowsNT6.1;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 74.0.3729.131Safari / 537.36'
}
m_url = 'https://mp.weixin.qq.com'
response = requests.get(url=m_url, cookies=self.cookie)
self.token = re.findall(r'token=(\d+)', str(response.url))[0]
# fakeid與name
self.fakeid = []
# 獲取公眾號信息
def getGname(self):
# 請求頭
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 地址
url = 'https://mp.weixin.qq.com/cgi-b ... 39%3B
# query = input('請輸入要搜索的公眾號關(guān)鍵字:')
# begin = int(input('請輸入開(kāi)始的頁(yè)數:'))
query = 'python'
begin = 0
begin *= 5
# 請求參數
data = {
'action': 'search_biz',
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax':' 1',
'random': random.random(),
'query': query,
'begin': begin,
'count': '5'
}
# 請求頁(yè)面,獲取數據
res = requests.get(url=url, cookies=self.cookie, headers=headers, params=data)
name_js = res.text
name_js = json.loads(name_js)
list = name_js['list']
for i in list:
time.sleep(1)
fakeid = i['fakeid']
nickname =i['nickname']
print(nickname,fakeid)
self.fakeid.append((nickname,fakeid))
# 獲取文章url
def getEurl(self):
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 遍歷fakeid,訪(fǎng)問(wèn)獲取文章鏈接
for i in self.fakeid:
time.sleep(1)
fake = i[1]
data = {
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'action': 'list_ex',
'begin': 0,
'count': 5,
'fakeid': fake,
'type': 9
}
res = requests.get(url, cookies=self.cookie, headers=headers, params=data)
js = res.text
link_l = json.loads(js)
self.parJson(link_l)
# 解析提取url
def parJson(self,link_l):
l = link_l['app_msg_list']
for i in l:
link = i['link']
name = i['digest']
self.saveData(name,link)
# 保存數據進(jìn)csv中
def saveData(self,name,link):
with open('link.csv' ,'a',encoding='utf8') as f:
w = csv.writer(f)
w.writerow((name,link))
print('ok')
C = C_ookie()
C.get_cookie()
G = getEssay()
G.getGname()
G.getEurl()
整個(gè)爬取過(guò)程就到這里,希望能幫到你 查看全部
與token的代碼與上篇文章銜接起來(lái)代碼的流程
獲取網(wǎng)址
在我們解決cookie和token之前,那我們只需要把這兩個(gè)參數放到請求頭中就可以得到我們想要的
首先搜索公司賬號名稱(chēng)

這里打開(kāi)素材管理,點(diǎn)擊新建圖形素材


點(diǎn)擊超鏈接。轉到此頁(yè)面

在此處提取url、headers和參數并找出更改的參數
random參數是0-1之間的隨機浮點(diǎn)數,query是搜索內容,前面提取token
接下來(lái)我們看看獲取文章的請求和接口

我們對頁(yè)面的分析完成了,接下來(lái)我們開(kāi)始編寫(xiě)代碼,這次的代碼是和上一篇文章的代碼連接起來(lái)的
import time
import json
import random
import csv
from selenium import webdriver
from lxml import html
import requests
import re
# 獲取cookies和token
class C_ookie:
# 初始化
def __init__(self):
self.html = ''
# 獲取cookie
def get_cookie(self):
cooki = {}
url = 'https://mp.weixin.qq.com'
Browner = webdriver.Chrome()
Browner.get(url)
# 獲取賬號輸入框
ID = Browner.find_element_by_name('account')
# 獲取密碼輸入框
PW = Browner.find_element_by_name('password')
# 輸入賬號
#輸入賬號
id =
#輸入密碼
pw =
# id = input('請輸入賬號:')
# pw = input('請輸入密碼:')
ID.send_keys(id)
PW.send_keys(pw)
# 獲取登錄button,點(diǎn)擊登錄
Browner.find_element_by_class_name('btn_login').click()
# 等待掃二維碼
time.sleep(10)
cks = Browner.get_cookies()
for ck in cks:
cooki[ck['name']] = ck['value']
ck1 = json.dumps(cooki)
print(ck1)
with open('ck.txt','w') as f :
f.write(ck1)
f.close()
self.html = Browner.page_source
# 獲取文章
class getEssay:
def __init__(self):
# 獲取cookies
with open('ck.txt','r') as f :
cookie = f.read()
f.close()
self.cookie = json.loads(cookie)
# 獲取token
self.header = {
"HOST": "mp.weixin.qq.com",
"User-Agent": 'Mozilla / 5.0(WindowsNT6.1;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 74.0.3729.131Safari / 537.36'
}
m_url = 'https://mp.weixin.qq.com'
response = requests.get(url=m_url, cookies=self.cookie)
self.token = re.findall(r'token=(\d+)', str(response.url))[0]
# fakeid與name
self.fakeid = []
# 獲取公眾號信息
def getGname(self):
# 請求頭
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 地址
url = 'https://mp.weixin.qq.com/cgi-b ... 39%3B
# query = input('請輸入要搜索的公眾號關(guān)鍵字:')
# begin = int(input('請輸入開(kāi)始的頁(yè)數:'))
query = 'python'
begin = 0
begin *= 5
# 請求參數
data = {
'action': 'search_biz',
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax':' 1',
'random': random.random(),
'query': query,
'begin': begin,
'count': '5'
}
# 請求頁(yè)面,獲取數據
res = requests.get(url=url, cookies=self.cookie, headers=headers, params=data)
name_js = res.text
name_js = json.loads(name_js)
list = name_js['list']
for i in list:
time.sleep(1)
fakeid = i['fakeid']
nickname =i['nickname']
print(nickname,fakeid)
self.fakeid.append((nickname,fakeid))
# 獲取文章url
def getEurl(self):
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 遍歷fakeid,訪(fǎng)問(wèn)獲取文章鏈接
for i in self.fakeid:
time.sleep(1)
fake = i[1]
data = {
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'action': 'list_ex',
'begin': 0,
'count': 5,
'fakeid': fake,
'type': 9
}
res = requests.get(url, cookies=self.cookie, headers=headers, params=data)
js = res.text
link_l = json.loads(js)
self.parJson(link_l)
# 解析提取url
def parJson(self,link_l):
l = link_l['app_msg_list']
for i in l:
link = i['link']
name = i['digest']
self.saveData(name,link)
# 保存數據進(jìn)csv中
def saveData(self,name,link):
with open('link.csv' ,'a',encoding='utf8') as f:
w = csv.writer(f)
w.writerow((name,link))
print('ok')
C = C_ookie()
C.get_cookie()
G = getEssay()
G.getGname()
G.getEurl()
整個(gè)爬取過(guò)程就到這里,希望能幫到你
上面這種是支持微信、短信通知的嗎?(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 101 次瀏覽 ? 2021-08-02 05:10
上面這種是支持微信、短信通知的嗎?(圖)
\Phpcmf\Service::M('member')->notice($uid,?$type,?$note,?$url?=?'')
$uid?會(huì )員id
$type?類(lèi)型:1系統?2用戶(hù)?3內容?4應用?5交易?6訂單
$note?通知內容
$url?相關(guān)鏈接
以上類(lèi)型是否支持微信和短信通知?不需要設置通知模板? ?
----------------------------------------------- ------
使用系統通知,不知道如何攜帶URL參數。如果你想在小程序或者APP中傳遞一個(gè)URL參數! !
\Phpcmf\Service::L('Notice')->send_notice('news', $userlist);
最新任務(wù)《{$title}》,時(shí)間:{dr_date($sys_time)}
{
"id":?"98",
"type":?"1",
"uid":?"1",
"isnew":?"0",
"content":?"完成調查任務(wù)",
"url":?"",
"inputtime":?"1575019067"
}, 查看全部
上面這種是支持微信、短信通知的嗎?(圖)
\Phpcmf\Service::M('member')->notice($uid,?$type,?$note,?$url?=?'')
$uid?會(huì )員id
$type?類(lèi)型:1系統?2用戶(hù)?3內容?4應用?5交易?6訂單
$note?通知內容
$url?相關(guān)鏈接
以上類(lèi)型是否支持微信和短信通知?不需要設置通知模板? ?
----------------------------------------------- ------
使用系統通知,不知道如何攜帶URL參數。如果你想在小程序或者APP中傳遞一個(gè)URL參數! !
\Phpcmf\Service::L('Notice')->send_notice('news', $userlist);
最新任務(wù)《{$title}》,時(shí)間:{dr_date($sys_time)}
{
"id":?"98",
"type":?"1",
"uid":?"1",
"isnew":?"0",
"content":?"完成調查任務(wù)",
"url":?"",
"inputtime":?"1575019067"
},
微信小程序訂閱消息升級,以前的消息模板不適合使用
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2021-08-01 22:09
微信小程序訂閱消息更新,之前的消息模板不適合使用
官方文檔微信官方文檔
要求
使用小程序開(kāi)啟直播講座,學(xué)生可以預約,已經(jīng)預約的學(xué)生會(huì )在直播開(kāi)始前發(fā)送提醒和直播開(kāi)始提醒
整體流程
1、模板由產(chǎn)品在微信小程序中設計,模板id和內容給前后端
2、前端在小程序頁(yè)面發(fā)起消息訂閱授權。用戶(hù)同意授權后,微信返回的templateIds傳遞給后端
3、后端保存templateIds并組裝相應的內容,保存到數據庫中
4、使用定時(shí)器查詢(xún)要發(fā)送的數據并發(fā)送給用戶(hù)(廣播前提醒)
5、用戶(hù)廣播,發(fā)送啟動(dòng)提醒
后端關(guān)鍵設計及代碼
定義模板
public interface ConstantTemplate {
/**
* 提前提醒
*/
String CLOUD_PREACH_TEMPLATE_ID = "xxxxxxxxxxxxxx";
String CLOUD_PREACH_TEMPLATE_DATA = "{\"time1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\"thing3\":{\"value\":\"%s\"}}";
/**
* 開(kāi)播提醒
*/
String INTERVIEW_NOTICE_TEMPLATE_ID = "xxxxxxxxxxxxxxxx";
String INTERVIEW_NOTICE_TEMPLATE_DATA ="{\"thing1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\time3\":{\"value\":\"%s\"},\"thing4\":{\"value\":\"%s\"},\"thing5\":{\"value\":\"%s\"}}";
}
@Getter
public enum WxMiniMsgTemplateEnum {
/**
* 微信小程序消息模板
*/
CLOUD_PREACH_TEMPLATE(CLOUD_PREACH_TEMPLATE_ID, CLOUD_PREACH_TEMPLATE_DATA),
INTERVIEW_NOTICE_TEMPLATE(INTERVIEW_NOTICE_TEMPLATE_ID, INTERVIEW_NOTICE_TEMPLATE_DATA);
private final String id;
private final String data;
WxMiniMsgTemplateEnum(String id, String data) {
this.id = id;
this.data = data;
}
public static String getDataById(String id) {
return Arrays.stream(WxMiniMsgTemplateEnum.values()).filter(r -> r.getId().equals(id)).findFirst().map(WxMiniMsgTemplateEnum::getData).orElse(null);
}
}
保存消息
for (String templateId : dto.getTemplateIds()) {
//發(fā)送小程序訂閱消息
XyWxMiniMsgDTO wxMsgDTO = new XyWxMiniMsgDTO();
wxMsgDTO.setPage(dto.getPage());
wxMsgDTO.setEndpoint(com.xyedu.sims.common.enums.SourceTypeEnum.STUDENT_MINI.getCode());
wxMsgDTO.setLang("zh_CN");
wxMsgDTO.setMiniprogramState(ConstantUtil.MiniprogramState);
wxMsgDTO.setTouser(social.getOpenId());
LocalDateTime sendTime = topicInfo.getStartTime();
LocalDateTime pastTime = topicInfo.getEndTime();
//提前20分鐘發(fā)送通知
wxMsgDTO.setSendTime(sendTime.minusMinutes(20));
wxMsgDTO.setPastTime(pastTime);
String date = DateUtil.getDefaultFormatDate(DateUtil.localDateTimeToDate(topicInfo.getStartTime()));
//組裝模板數據
String data = WxMiniMsgTemplateEnum.getDataById(templateId);
if (ToolUtil.isNotEmpty(data)) {
data = String.format(data, date, StrUtil.subWithLength(topicInfo.getTitle(), 0, 20), userCache.getRealName() + "同學(xué),云宣講即將開(kāi)始~");
wxMsgDTO.setData(JSONUtil.toJsonStr(data));
}
wxMsgDTO.setTemplateId(templateId);
XyWxMiniMsg miniMsg = BeanUtil.copy(wxMsgDTO, XyWxMiniMsg.class);
//保存至數據庫
remoteXyWxMiniMsgService.add(miniMsg);
}
包裹發(fā)送工具
@Slf4j
public class WxMiniMsgUtil {
//官方文檔: https://developers.weixin.qq.c ... .html
private static final String WX_MINI_MSG_URL = "https://api.weixin.qq.com/cgi- ... 3B%3B
public static Object send(String accessToken, XyWxMiniMsgDTO dto) {
String url = WX_MINI_MSG_URL + accessToken;
Map reqBody = new HashMap();
reqBody.put("touser", dto.getTouser());
reqBody.put("template_id", dto.getTemplateId());
reqBody.put("miniprogram_state", dto.getMiniprogramState());
reqBody.put("lang", dto.getLang());
reqBody.put("page", dto.getPage());
reqBody.put("data", JSONUtil.parseObj(dto.getData()));
try {
return HttpRequest.post(url)
.body(JSONUtil.toJsonStr(reqBody))
.timeout(5000)
.execute()
.body();
} catch (Exception e) {
log.error("send wx mini msg occur an exception,e={}", e.getMessage());
return null;
}
}
}
使用定時(shí)器發(fā)送,定時(shí)器每3分鐘執行一次查詢(xún),查詢(xún)未發(fā)送或發(fā)送失敗的消息。如果超過(guò)時(shí)間,發(fā)送狀態(tài)將設置為過(guò)期
@Getter
public enum WxMiniMsgSendStatusEnum {
/**
*
*/
SENDING(0, "未發(fā)送"),
SEND_SUCCESS(1, "發(fā)送成功"),
SEND_FAIL(2, "發(fā)送失敗"),
OVERDUE(3,"過(guò)期");
private Integer code;
private String msg;
WxMiniMsgSendStatusEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public static String getMsg(Object code) {
if (code == null) {
return null;
}
return Arrays.stream(values()).filter(e -> e.getCode().equals(code)).findFirst().map(e -> e.getMsg()).orElse("");
}
}
@Override
public ReturnT execute(String param) throws Exception {
log.debug("[send wx mini msg]-start");
XyWxMiniMsgQueryDTO dto = new XyWxMiniMsgQueryDTO();
dto.setEndpoint(SourceTypeEnum.STUDENT_MINI.getCode());
//從數據庫中獲取應發(fā)送的數據列表
List list = remoteXyWxMiniMsgService.list(dto);
if (CollectionUtil.isNotEmpty(list)) {
log.debug("[send wx mini msg]-query list,list.size={}", list.size());
final WxMaService wxService = WxMaConfiguration.getMaService();
String accessToken = wxService.getAccessToken();
for (XyWxMiniMsg msg : list) {
XyWxMiniMsgDTO msgDTO = BeanUtil.copy(msg, XyWxMiniMsgDTO.class);
//通知微信發(fā)送訂閱消息
Object response = WxMiniMsgUtil.send(accessToken, msgDTO);
if (ToolUtil.isNotEmpty(response)) {
msg.setResponse(response.toString());
JSONObject object = JSONUtil.parseObj(response);
//處理微信響應信息
if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 0) {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_SUCCESS.getCode());
} else if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 42001) {
log.error("[send wx mini msg]-response fail,refresh accessToken={}", response);
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
WxMaConfiguration.getMaService().getAccessToken(true);
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response fail,response={}", response);
}
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response empty,may be catch exception,params[accessToken={}\n,msgDTO={}]", accessToken, msgDTO);
}
}
remoteXyWxMiniMsgService.updateBatch(list);
}
log.debug("[send wx mini msg]-finish");
return ReturnT.SUCCESS;
}
要求點(diǎn) 5 尚未完成。思路大概是在組裝提前提醒模板的時(shí)候把開(kāi)機提醒消息保存到數據庫中,用templateId+演示的id作為唯一標識,在數據庫中查詢(xún)廣播開(kāi)始時(shí)要發(fā)送的消息,最后直接通過(guò)工具類(lèi)發(fā)送 查看全部
微信小程序訂閱消息升級,以前的消息模板不適合使用
微信小程序訂閱消息更新,之前的消息模板不適合使用
官方文檔微信官方文檔
要求
使用小程序開(kāi)啟直播講座,學(xué)生可以預約,已經(jīng)預約的學(xué)生會(huì )在直播開(kāi)始前發(fā)送提醒和直播開(kāi)始提醒
整體流程
1、模板由產(chǎn)品在微信小程序中設計,模板id和內容給前后端
2、前端在小程序頁(yè)面發(fā)起消息訂閱授權。用戶(hù)同意授權后,微信返回的templateIds傳遞給后端
3、后端保存templateIds并組裝相應的內容,保存到數據庫中
4、使用定時(shí)器查詢(xún)要發(fā)送的數據并發(fā)送給用戶(hù)(廣播前提醒)
5、用戶(hù)廣播,發(fā)送啟動(dòng)提醒
后端關(guān)鍵設計及代碼
定義模板
public interface ConstantTemplate {
/**
* 提前提醒
*/
String CLOUD_PREACH_TEMPLATE_ID = "xxxxxxxxxxxxxx";
String CLOUD_PREACH_TEMPLATE_DATA = "{\"time1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\"thing3\":{\"value\":\"%s\"}}";
/**
* 開(kāi)播提醒
*/
String INTERVIEW_NOTICE_TEMPLATE_ID = "xxxxxxxxxxxxxxxx";
String INTERVIEW_NOTICE_TEMPLATE_DATA ="{\"thing1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\time3\":{\"value\":\"%s\"},\"thing4\":{\"value\":\"%s\"},\"thing5\":{\"value\":\"%s\"}}";
}
@Getter
public enum WxMiniMsgTemplateEnum {
/**
* 微信小程序消息模板
*/
CLOUD_PREACH_TEMPLATE(CLOUD_PREACH_TEMPLATE_ID, CLOUD_PREACH_TEMPLATE_DATA),
INTERVIEW_NOTICE_TEMPLATE(INTERVIEW_NOTICE_TEMPLATE_ID, INTERVIEW_NOTICE_TEMPLATE_DATA);
private final String id;
private final String data;
WxMiniMsgTemplateEnum(String id, String data) {
this.id = id;
this.data = data;
}
public static String getDataById(String id) {
return Arrays.stream(WxMiniMsgTemplateEnum.values()).filter(r -> r.getId().equals(id)).findFirst().map(WxMiniMsgTemplateEnum::getData).orElse(null);
}
}
保存消息
for (String templateId : dto.getTemplateIds()) {
//發(fā)送小程序訂閱消息
XyWxMiniMsgDTO wxMsgDTO = new XyWxMiniMsgDTO();
wxMsgDTO.setPage(dto.getPage());
wxMsgDTO.setEndpoint(com.xyedu.sims.common.enums.SourceTypeEnum.STUDENT_MINI.getCode());
wxMsgDTO.setLang("zh_CN");
wxMsgDTO.setMiniprogramState(ConstantUtil.MiniprogramState);
wxMsgDTO.setTouser(social.getOpenId());
LocalDateTime sendTime = topicInfo.getStartTime();
LocalDateTime pastTime = topicInfo.getEndTime();
//提前20分鐘發(fā)送通知
wxMsgDTO.setSendTime(sendTime.minusMinutes(20));
wxMsgDTO.setPastTime(pastTime);
String date = DateUtil.getDefaultFormatDate(DateUtil.localDateTimeToDate(topicInfo.getStartTime()));
//組裝模板數據
String data = WxMiniMsgTemplateEnum.getDataById(templateId);
if (ToolUtil.isNotEmpty(data)) {
data = String.format(data, date, StrUtil.subWithLength(topicInfo.getTitle(), 0, 20), userCache.getRealName() + "同學(xué),云宣講即將開(kāi)始~");
wxMsgDTO.setData(JSONUtil.toJsonStr(data));
}
wxMsgDTO.setTemplateId(templateId);
XyWxMiniMsg miniMsg = BeanUtil.copy(wxMsgDTO, XyWxMiniMsg.class);
//保存至數據庫
remoteXyWxMiniMsgService.add(miniMsg);
}
包裹發(fā)送工具
@Slf4j
public class WxMiniMsgUtil {
//官方文檔: https://developers.weixin.qq.c ... .html
private static final String WX_MINI_MSG_URL = "https://api.weixin.qq.com/cgi- ... 3B%3B
public static Object send(String accessToken, XyWxMiniMsgDTO dto) {
String url = WX_MINI_MSG_URL + accessToken;
Map reqBody = new HashMap();
reqBody.put("touser", dto.getTouser());
reqBody.put("template_id", dto.getTemplateId());
reqBody.put("miniprogram_state", dto.getMiniprogramState());
reqBody.put("lang", dto.getLang());
reqBody.put("page", dto.getPage());
reqBody.put("data", JSONUtil.parseObj(dto.getData()));
try {
return HttpRequest.post(url)
.body(JSONUtil.toJsonStr(reqBody))
.timeout(5000)
.execute()
.body();
} catch (Exception e) {
log.error("send wx mini msg occur an exception,e={}", e.getMessage());
return null;
}
}
}
使用定時(shí)器發(fā)送,定時(shí)器每3分鐘執行一次查詢(xún),查詢(xún)未發(fā)送或發(fā)送失敗的消息。如果超過(guò)時(shí)間,發(fā)送狀態(tài)將設置為過(guò)期
@Getter
public enum WxMiniMsgSendStatusEnum {
/**
*
*/
SENDING(0, "未發(fā)送"),
SEND_SUCCESS(1, "發(fā)送成功"),
SEND_FAIL(2, "發(fā)送失敗"),
OVERDUE(3,"過(guò)期");
private Integer code;
private String msg;
WxMiniMsgSendStatusEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public static String getMsg(Object code) {
if (code == null) {
return null;
}
return Arrays.stream(values()).filter(e -> e.getCode().equals(code)).findFirst().map(e -> e.getMsg()).orElse("");
}
}
@Override
public ReturnT execute(String param) throws Exception {
log.debug("[send wx mini msg]-start");
XyWxMiniMsgQueryDTO dto = new XyWxMiniMsgQueryDTO();
dto.setEndpoint(SourceTypeEnum.STUDENT_MINI.getCode());
//從數據庫中獲取應發(fā)送的數據列表
List list = remoteXyWxMiniMsgService.list(dto);
if (CollectionUtil.isNotEmpty(list)) {
log.debug("[send wx mini msg]-query list,list.size={}", list.size());
final WxMaService wxService = WxMaConfiguration.getMaService();
String accessToken = wxService.getAccessToken();
for (XyWxMiniMsg msg : list) {
XyWxMiniMsgDTO msgDTO = BeanUtil.copy(msg, XyWxMiniMsgDTO.class);
//通知微信發(fā)送訂閱消息
Object response = WxMiniMsgUtil.send(accessToken, msgDTO);
if (ToolUtil.isNotEmpty(response)) {
msg.setResponse(response.toString());
JSONObject object = JSONUtil.parseObj(response);
//處理微信響應信息
if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 0) {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_SUCCESS.getCode());
} else if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 42001) {
log.error("[send wx mini msg]-response fail,refresh accessToken={}", response);
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
WxMaConfiguration.getMaService().getAccessToken(true);
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response fail,response={}", response);
}
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response empty,may be catch exception,params[accessToken={}\n,msgDTO={}]", accessToken, msgDTO);
}
}
remoteXyWxMiniMsgService.updateBatch(list);
}
log.debug("[send wx mini msg]-finish");
return ReturnT.SUCCESS;
}
要求點(diǎn) 5 尚未完成。思路大概是在組裝提前提醒模板的時(shí)候把開(kāi)機提醒消息保存到數據庫中,用templateId+演示的id作為唯一標識,在數據庫中查詢(xún)廣播開(kāi)始時(shí)要發(fā)送的消息,最后直接通過(guò)工具類(lèi)發(fā)送
基于PHP的服務(wù)端開(kāi)源項目之phpQuery采集文章(一)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 185 次瀏覽 ? 2021-08-01 07:04
phpQuery 是一個(gè)基于 PHP 的服務(wù)器端開(kāi)源項目,它可以讓 PHP 開(kāi)發(fā)者輕松處理 DOM 文檔的內容,例如獲取新聞的頭條新聞網(wǎng)站。更有趣的是它使用了jQuery的思想。你可以像使用jQuery一樣處理頁(yè)面內容,獲取你想要的頁(yè)面信息。
采集頭條
先看個(gè)例子,現在我要的是采集國內新聞的標題,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
echo pq(".blkTop h1:eq(0)")->html();
簡(jiǎn)單的三行代碼,即可獲取標題內容。首先在程序中收錄phpQuery.php核心程序,然后調用讀取目標網(wǎng)頁(yè),最后輸出對應標簽下的內容。
pq() 是一個(gè)強大的方法,就像jQuery的$()一樣,jQuery的選擇器基本可以用在phpQuery上,只要把“.”改一下就行了。到“->”。如上例, pq(".blkTop h1:eq(0)") 抓取class屬性為blkTop的DIV元素,找到DIV里面的第一個(gè)h1標簽,然后使用html()方法獲取h1 標簽中的內容(帶html標簽)就是我們要獲取的標題信息,如果使用text()方法,只會(huì )獲取到標題的文本內容,當然一定要用好phpQuery,關(guān)鍵是在文檔Node中找到對應的內容。
采集文章List
下面再看一個(gè)例子,獲取網(wǎng)站的博客列表,請看代碼:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
$artlist = pq(".blog_li");
foreach($artlist as $li){
echo pq($li)->find('h2')->html()."";
}
找到文章 標題并通過(guò)循環(huán)遍歷列表中的 DIV 將其輸出就是這么簡(jiǎn)單。
解析 XML 文檔
假設有一個(gè)像這樣的 test.xml 文檔:
復制代碼代碼如下:
張三
22
王舞
18
現在想獲取聯(lián)系人張三的年齡,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('test.xml');
echo pq('contact> age:eq(0)');
結果輸出:22
和jQuery一樣,它就像準確找到文檔節點(diǎn),輸出節點(diǎn)下的內容,解析一個(gè)XML文檔一樣簡(jiǎn)單?,F在您不必為采集網(wǎng)站 內容使用繁瑣的代碼,例如頭痛的常規算法和內容替換。有了 phpQuery,一切都變得簡(jiǎn)單了。
phpquery項目官網(wǎng)地址: 查看全部
基于PHP的服務(wù)端開(kāi)源項目之phpQuery采集文章(一)
phpQuery 是一個(gè)基于 PHP 的服務(wù)器端開(kāi)源項目,它可以讓 PHP 開(kāi)發(fā)者輕松處理 DOM 文檔的內容,例如獲取新聞的頭條新聞網(wǎng)站。更有趣的是它使用了jQuery的思想。你可以像使用jQuery一樣處理頁(yè)面內容,獲取你想要的頁(yè)面信息。
采集頭條
先看個(gè)例子,現在我要的是采集國內新聞的標題,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
echo pq(".blkTop h1:eq(0)")->html();
簡(jiǎn)單的三行代碼,即可獲取標題內容。首先在程序中收錄phpQuery.php核心程序,然后調用讀取目標網(wǎng)頁(yè),最后輸出對應標簽下的內容。
pq() 是一個(gè)強大的方法,就像jQuery的$()一樣,jQuery的選擇器基本可以用在phpQuery上,只要把“.”改一下就行了。到“->”。如上例, pq(".blkTop h1:eq(0)") 抓取class屬性為blkTop的DIV元素,找到DIV里面的第一個(gè)h1標簽,然后使用html()方法獲取h1 標簽中的內容(帶html標簽)就是我們要獲取的標題信息,如果使用text()方法,只會(huì )獲取到標題的文本內容,當然一定要用好phpQuery,關(guān)鍵是在文檔Node中找到對應的內容。
采集文章List
下面再看一個(gè)例子,獲取網(wǎng)站的博客列表,請看代碼:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
$artlist = pq(".blog_li");
foreach($artlist as $li){
echo pq($li)->find('h2')->html()."";
}
找到文章 標題并通過(guò)循環(huán)遍歷列表中的 DIV 將其輸出就是這么簡(jiǎn)單。
解析 XML 文檔
假設有一個(gè)像這樣的 test.xml 文檔:
復制代碼代碼如下:
張三
22
王舞
18
現在想獲取聯(lián)系人張三的年齡,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('test.xml');
echo pq('contact> age:eq(0)');
結果輸出:22
和jQuery一樣,它就像準確找到文檔節點(diǎn),輸出節點(diǎn)下的內容,解析一個(gè)XML文檔一樣簡(jiǎn)單?,F在您不必為采集網(wǎng)站 內容使用繁瑣的代碼,例如頭痛的常規算法和內容替換。有了 phpQuery,一切都變得簡(jiǎn)單了。
phpquery項目官網(wǎng)地址:
高蒙2017/02/0613:491.0w瀏覽0評論
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2021-08-27 04:04
首頁(yè) ?PHP 筆記? 如何使用 php采集微信公號文章方法
如何使用php采集微信公號文章
高萌 2017/02/06 13:491.0w 瀏覽 0 條評論 PHP
最近有采集微信公號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于列表地址的獲取,我們后面再研究。在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),是的
最近有采集微信官方號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于list地址的獲取,我們以后再研究。
在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版本)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。
以下是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步完善。
/**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?'http://mp.weixin.qq.com';
private???$wxgzherr=?'公眾號二維碼下載失敗=>';
private???$wximgerr=?'圖片下載失敗=>';
private???$direrr??=?'文件夾創(chuàng )建失??!';
private???$fileerr?=?'資源不存在!';
private???$dirurl??=?'';
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir='',$qcode=false)
????{
$this->dirurl?=?$dir?:'/Uploads/'.date('Ymd',time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array('msg'=>$this->direrr,'code'=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array('msg'=>$this->fileerr,'code'=>500)));
????????}
????????//?內容主體
????????preg_match('/[\s\S]*?/',$file,$content);
????????//?標題
????????preg_match('/(.*?)/',$file,$title);
????????$title?=?$title?$title[1]:'';
????????//?時(shí)間
????????preg_match('/(.*?)/',$file,$time);
????????$time?=?$time?strtotime($time[1]):'';
????????//?公眾號
????????preg_match('/(.*?)/',$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:'';
????????//?微信號
????????preg_match('/([\s\S]*?)/',$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:'';
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match('/window.sg_qr_code="(.*?)";/',$file,$qcode);
????????????$qcodeurl?=?str_replace('\x26amp;','&',$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match('/(.*?)/',$file,$tag);
????????$tag?=?$tag?$tag[1]:'';
????????//?圖片
????????preg_match_all('//',$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?'data-src';
????????????$new[]?=?'src';
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array('content'=>$content,'title'=>$title,'time'=>$time,'wxgzh'=>$wxgzh,'wxh'=>$wxh,'qcode'=>$qcode?:'','tag'=>$tag?:'','comment'=>$comment);
????????return?json_encode(array('data'=>$data,'code'=>200,'msg'=>'ok'));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir='',$image='')
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array('jpeg','png','jpg');
????????$filename?=?$dir.'/'.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode('=',$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?'.'.$ext[1];
????????}else{
????????????$filename?.=?'.gif';
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url='')
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace('/s','/mp/getcomment',$url).'%3D';
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.'/error.log',date('Y-m-d?H:i:s',time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=''){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
使用方法:
$url?=?'';
$article?=?new?DownWxArticle();
$article->get_file_article($url,'',true); 查看全部
高蒙2017/02/0613:491.0w瀏覽0評論
首頁(yè) ?PHP 筆記? 如何使用 php采集微信公號文章方法
如何使用php采集微信公號文章
高萌 2017/02/06 13:491.0w 瀏覽 0 條評論 PHP
最近有采集微信公號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于列表地址的獲取,我們后面再研究。在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。下面是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),是的
最近有采集微信官方號文章的需求,所以研究了一下。我發(fā)現在刷新搜狗微信公眾號文章列表的時(shí)候,有一個(gè)很惡心的地方就是搜狗會(huì )直接屏蔽你的ip并輸入驗證碼。這一步暫時(shí)不知道怎么破解。我們只是看php采集微信公號文章內容的方法。至于list地址的獲取,我們以后再研究。
在寫(xiě)之前,我搜索了三個(gè)用php編寫(xiě)的爬蟲(chóng):phpQuery、phpspider和QueryList(phpQuery的改進(jìn)版本)??赡懿恢惯@些,這就是我發(fā)現的。先記錄,后研究。
以下是我寫(xiě)的一個(gè)基本的微信公眾號php采集類(lèi),有待進(jìn)一步完善。
/**
?*?Created?by?PhpStorm.
?*?User:?Administrator
?*?Date:?2017/2/6
?*?Time:?10:54
?*?author:?gm
?*?微信公眾號文章采集類(lèi)
?*/
class?DownWxArticle?{
private???$mpwxurl?=?'http://mp.weixin.qq.com';
private???$wxgzherr=?'公眾號二維碼下載失敗=>';
private???$wximgerr=?'圖片下載失敗=>';
private???$direrr??=?'文件夾創(chuàng )建失??!';
private???$fileerr?=?'資源不存在!';
private???$dirurl??=?'';
????/*?抓取微信公眾號文章
?*?$qcode????boolean?公眾號二維碼?false=>不下載?true=>下載
?*?return
?*?$content??string??內容
?*?$tile?????string??標題
?*?$time?????int?????時(shí)間戳
?*?$wxggh????string??微信公眾號
?*?$wxh??????string??微信號
?*?$qcode????string??公眾號二維碼
?*?$tag??????string??標簽?原創(chuàng )
?*/
????function?get_file_article($url,$dir='',$qcode=false)
????{
$this->dirurl?=?$dir?:'/Uploads/'.date('Ymd',time());
????????if(!$this->put_dir($this->dirurl)){
exit(json_encode(array('msg'=>$this->direrr,'code'=>500)));
}
????????$file?=?file_get_contents($url);
????????if(!$file){
$this->put_error_log($this->dirurl,$this->fileerr);
????????????exit(json_encode(array('msg'=>$this->fileerr,'code'=>500)));
????????}
????????//?內容主體
????????preg_match('/[\s\S]*?/',$file,$content);
????????//?標題
????????preg_match('/(.*?)/',$file,$title);
????????$title?=?$title?$title[1]:'';
????????//?時(shí)間
????????preg_match('/(.*?)/',$file,$time);
????????$time?=?$time?strtotime($time[1]):'';
????????//?公眾號
????????preg_match('/(.*?)/',$file,$wxgzh);
????????$wxgzh?=?$wxgzh?$wxgzh[1]:'';
????????//?微信號
????????preg_match('/([\s\S]*?)/',$file,$wxh);
????????$wxh???=?$wxh?$wxh[1]:'';
????????//?公眾號二維碼
????????if($qcode){
????????????preg_match('/window.sg_qr_code="(.*?)";/',$file,$qcode);
????????????$qcodeurl?=?str_replace('\x26amp;','&',$this->mpwxurl.$qcode[1]);
????????????$qcode?=?$this->put_file_img($this->dirurl,$qcodeurl);
????????????if(!$qcode){
????????????????$this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);
????????????}
????????}
????????//?獲取標簽
????????preg_match('/(.*?)/',$file,$tag);
????????$tag?=?$tag?$tag[1]:'';
????????//?圖片
????????preg_match_all('//',$content[0],$images);
????????//?儲存原地址和下載后地址
????????$old?=?array();
????????$new?=?array();
????????//?去除重復圖片地址
????????$images?=?array_unique($images[1]);
????????if($images){
????????????foreach($images?as?$v){
????????????????$filename?=?$this->put_file_img($this->dirurl,$v);
????????????????if($filename){
????????????????????//?圖片保存成功?替換地址
????????????????????$old[]?=?$v;
????????????????????$new[]?=?$filename;
????????????????}else{
????????????????????//?失敗記錄日志
????????????????????$this->put_error_log($this->dirurl,$this->wximgerr.$v);
????????????????}
????????????}
????????????$old[]?=?'data-src';
????????????$new[]?=?'src';
????????????$content?=?str_replace($old,$new,$content[0]);
????????}
???????//?替換音頻
???????$content?=?str_replace("preview.html","player.html",$content);?
???????//?獲取閱讀點(diǎn)贊評論等信息
???????$comment?=?$this->get_comment_article($url);
$data?=?array('content'=>$content,'title'=>$title,'time'=>$time,'wxgzh'=>$wxgzh,'wxh'=>$wxh,'qcode'=>$qcode?:'','tag'=>$tag?:'','comment'=>$comment);
????????return?json_encode(array('data'=>$data,'code'=>200,'msg'=>'ok'));
????}
????/*?抓取保存圖片函數
?????*?return
?????*?$filename??string??圖片地址
?????*/
????function?put_file_img($dir='',$image='')
????{
????????//?判斷圖片的保存類(lèi)型?截取后四位地址
????????$exts?=?array('jpeg','png','jpg');
????????$filename?=?$dir.'/'.uniqid().time().rand(10000,99999);
????????$ext?=?substr($image,-5);
????????$ext?=?explode('=',$ext);
????????if(in_array($ext[1],$exts)?!==?false){
????????????$filename?.=?'.'.$ext[1];
????????}else{
????????????$filename?.=?'.gif';
????????}
????????$souce?=?file_get_contents($image);
????????if(file_put_contents($filename,$souce)){
????????????return?$filename;
????????}else{
????????????return?false;
????????}
????}
????/*?獲取微信公眾號文章的【點(diǎn)贊】【閱讀】【評論】
?????*?方法:將地址中的部分參數替換即可。
?????*?????1、s??????替換為?mp/getcomment?
?????*?????2、最后=??替換為?%3D
?????*?return
?????*?read_num??閱讀數
?????*?like_num??點(diǎn)贊數
?????*?comment???評論詳情
?????*/
????function?get_comment_article($url='')
????{
????????$url?=?substr($url,0,-1);
????????$url?=?str_replace('/s','/mp/getcomment',$url).'%3D';
????????return?file_get_contents($url);
????}
????/*?錯誤日志記錄
?????*?$dir??string??文件路徑
?????*?$data?string??寫(xiě)入內容
?????*/
????function?put_error_log($dir,$data)
????{
????????file_put_contents($dir.'/error.log',date('Y-m-d?H:i:s',time()).$data.PHP_EOL,FILE_APPEND);
????}
????/*?創(chuàng )建文件夾
?????*?$dir?string?文件夾路徑
?????*/
????function?put_dir($dir=''){
$bool?=?true;
????????if(!is_dir($dir)){
????????????if(!mkdir($dir,777,TRUE)){
$bool?=?false;
????????????????$this->put_error_log($dir,$this->direrr.$dir);
????????????}
????????}
return?$bool;
????}
}
使用方法:
$url?=?'';
$article?=?new?DownWxArticle();
$article->get_file_article($url,'',true);
微軟翻譯百度百科微信公眾號文章文章內容內容
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2021-08-25 19:05
querylist采集微信公眾號文章內容
1、文件查看txt文件。
2、輸入requesturl地址參數。
3、按回車(chē)鍵。
自己在家做爬蟲(chóng)三個(gè)步驟:1.找兩篇自己想要的文章,下載文章;2.把下載下來(lái)的文章全部request一次,再下載下一篇;3.批量處理所有的圖片,并且命名為json參數,當然,其中還有一點(diǎn)機智。
百度,
...
-us/windows/hardware/msie/30.0.2015/scripts/jsdebug.conf
使用微軟翻譯百度百科微信公眾號文章...
留意官方文檔:微信公眾號網(wǎng)頁(yè)使用的數據接口都是有文檔說(shuō)明的。
以前用騰訊統計!
實(shí)踐中,我這邊通常是一次性request有幾千的圖片然后就writecode寫(xiě)入數據庫。成功率在80%多。感覺(jué)更多還是和熟練程度有關(guān)吧。
官方有相關(guān)的文檔,
微信公眾號文章有很多參數組成比如說(shuō)頭圖,公眾號標題,注冊時(shí)間,文章列表,是否包含廣告字樣等。微信公眾號推送文章,首先第一步就是獲取圖片url,然后再查詢(xún)請求,請求的參數就是公眾號名稱(chēng),文章文章標題,文章內容,原文鏈接,圖片url等。 查看全部
微軟翻譯百度百科微信公眾號文章文章內容內容
querylist采集微信公眾號文章內容
1、文件查看txt文件。
2、輸入requesturl地址參數。
3、按回車(chē)鍵。
自己在家做爬蟲(chóng)三個(gè)步驟:1.找兩篇自己想要的文章,下載文章;2.把下載下來(lái)的文章全部request一次,再下載下一篇;3.批量處理所有的圖片,并且命名為json參數,當然,其中還有一點(diǎn)機智。
百度,
...
-us/windows/hardware/msie/30.0.2015/scripts/jsdebug.conf
使用微軟翻譯百度百科微信公眾號文章...
留意官方文檔:微信公眾號網(wǎng)頁(yè)使用的數據接口都是有文檔說(shuō)明的。
以前用騰訊統計!
實(shí)踐中,我這邊通常是一次性request有幾千的圖片然后就writecode寫(xiě)入數據庫。成功率在80%多。感覺(jué)更多還是和熟練程度有關(guān)吧。
官方有相關(guān)的文檔,
微信公眾號文章有很多參數組成比如說(shuō)頭圖,公眾號標題,注冊時(shí)間,文章列表,是否包含廣告字樣等。微信公眾號推送文章,首先第一步就是獲取圖片url,然后再查詢(xún)請求,請求的參數就是公眾號名稱(chēng),文章文章標題,文章內容,原文鏈接,圖片url等。
搜狗搜索采集公眾號歷史消息(圖)問(wèn)題解析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2021-08-24 07:37
通過(guò)搜狗搜索采集公眾號的歷史記錄存在一些問(wèn)題:
1、有驗證碼;
2、歷史消息列表只有最近10條群發(fā)消息;
3、文章地址有有效期;
4、據說(shuō)批量采集需要改ip;
通過(guò)我之前的文章方法,沒(méi)有出現這樣的問(wèn)題,雖然采集系統設置不像傳統的采集器寫(xiě)規則爬行那么簡(jiǎn)單。但是batch采集構建一次后的效率還是可以的。而且采集的文章地址是永久有效的,你可以通過(guò)采集獲取一個(gè)公眾號的所有歷史信息。
先從公眾號文章的鏈接地址說(shuō)起:
1、微信右上角菜單復制的鏈接地址:
2、從歷史消息列表中獲取的地址:
#wechat_redirect
3、完整真實(shí)地址:
%3D%3D&devicetype=iOS10.1.1&version=16050120&nettype=WIFI&fontScale=100&pass_ticket=FGRyGfXLPEa4AeOsIZu7KFJo6CiXOZex83Y5YBRglW4%3D&1w_head
以上三個(gè)地址是同一篇文章文章的地址,在不同位置獲取時(shí)得到三個(gè)完全不同的結果。
和歷史新聞頁(yè)面一樣,微信也有自動(dòng)添加參數的機制。第一個(gè)地址是通過(guò)復制鏈接獲得的,看起來(lái)像一個(gè)變相的代碼。其實(shí)沒(méi)用,我們不去想。第二個(gè)地址是通過(guò)上面文章介紹的方法從json文章歷史消息列表中得到的鏈接地址,我們可以把這個(gè)地址保存到數據庫中。然后就可以通過(guò)這個(gè)地址從服務(wù)器獲取文章的內容了。第三個(gè)鏈接添加參數后,目的是讓文章頁(yè)面中的閱讀js獲取閱讀和點(diǎn)贊的json結果。在我們之前的文章方法中,因為文章頁(yè)面是由客戶(hù)端打開(kāi)顯示的,因為有這些參數,文章頁(yè)面中的js會(huì )自動(dòng)獲取閱讀量,所以我們可以通過(guò)代理服務(wù)獲取這個(gè)文章的閱讀量。
本文章的內容是根據本專(zhuān)欄前面文章介紹的方法獲得的大量微信文章,我們詳細研究了如何獲取文章內容和其他一些有用的信息。方法。
?。ㄎ恼耹ist 保存在我的數據庫中,一些字段)
1、Get文章源代碼:
文章源代碼可以通過(guò)php函數file_get_content()讀入一個(gè)變量。因為微信文章的源碼可以從瀏覽器打開(kāi),這里就不貼了,以免浪費頁(yè)面空間。
2、源代碼中的有用信息:
1)原創(chuàng )內容:
原創(chuàng )內容收錄在一個(gè)標簽中,通過(guò)php代碼獲?。?br /> <p> 查看全部
搜狗搜索采集公眾號歷史消息(圖)問(wèn)題解析
通過(guò)搜狗搜索采集公眾號的歷史記錄存在一些問(wèn)題:
1、有驗證碼;
2、歷史消息列表只有最近10條群發(fā)消息;
3、文章地址有有效期;
4、據說(shuō)批量采集需要改ip;
通過(guò)我之前的文章方法,沒(méi)有出現這樣的問(wèn)題,雖然采集系統設置不像傳統的采集器寫(xiě)規則爬行那么簡(jiǎn)單。但是batch采集構建一次后的效率還是可以的。而且采集的文章地址是永久有效的,你可以通過(guò)采集獲取一個(gè)公眾號的所有歷史信息。
先從公眾號文章的鏈接地址說(shuō)起:
1、微信右上角菜單復制的鏈接地址:
2、從歷史消息列表中獲取的地址:
#wechat_redirect
3、完整真實(shí)地址:
%3D%3D&devicetype=iOS10.1.1&version=16050120&nettype=WIFI&fontScale=100&pass_ticket=FGRyGfXLPEa4AeOsIZu7KFJo6CiXOZex83Y5YBRglW4%3D&1w_head
以上三個(gè)地址是同一篇文章文章的地址,在不同位置獲取時(shí)得到三個(gè)完全不同的結果。
和歷史新聞頁(yè)面一樣,微信也有自動(dòng)添加參數的機制。第一個(gè)地址是通過(guò)復制鏈接獲得的,看起來(lái)像一個(gè)變相的代碼。其實(shí)沒(méi)用,我們不去想。第二個(gè)地址是通過(guò)上面文章介紹的方法從json文章歷史消息列表中得到的鏈接地址,我們可以把這個(gè)地址保存到數據庫中。然后就可以通過(guò)這個(gè)地址從服務(wù)器獲取文章的內容了。第三個(gè)鏈接添加參數后,目的是讓文章頁(yè)面中的閱讀js獲取閱讀和點(diǎn)贊的json結果。在我們之前的文章方法中,因為文章頁(yè)面是由客戶(hù)端打開(kāi)顯示的,因為有這些參數,文章頁(yè)面中的js會(huì )自動(dòng)獲取閱讀量,所以我們可以通過(guò)代理服務(wù)獲取這個(gè)文章的閱讀量。
本文章的內容是根據本專(zhuān)欄前面文章介紹的方法獲得的大量微信文章,我們詳細研究了如何獲取文章內容和其他一些有用的信息。方法。

?。ㄎ恼耹ist 保存在我的數據庫中,一些字段)
1、Get文章源代碼:
文章源代碼可以通過(guò)php函數file_get_content()讀入一個(gè)變量。因為微信文章的源碼可以從瀏覽器打開(kāi),這里就不貼了,以免浪費頁(yè)面空間。
2、源代碼中的有用信息:
1)原創(chuàng )內容:
原創(chuàng )內容收錄在一個(gè)標簽中,通過(guò)php代碼獲?。?br /> <p>
querylist采集微信公眾號文章文章的關(guān)鍵詞解析服務(wù)參考
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 169 次瀏覽 ? 2021-08-22 21:05
querylist采集微信公眾號文章的關(guān)鍵詞,并不完全是文章中的關(guān)鍵詞,而是“信息流”里的一些包含公眾號相關(guān)關(guān)鍵詞的詞。也就是你點(diǎn)開(kāi)“信息流”,頁(yè)面里會(huì )出現公眾號文章的鏈接(你在輸入框里輸入關(guān)鍵詞時(shí),它并不要求你給文章添加關(guān)鍵詞)。在在篩選出的鏈接頁(yè)面的右上角,會(huì )看到一個(gè)藍色方框的token,即唯一的權威token。
發(fā)現querylist的作用,關(guān)鍵詞過(guò)濾,
querylist是一個(gè)文章關(guān)鍵詞的數據庫,通過(guò)文章標題點(diǎn)擊querylist查看文章,
querylist提供了你所關(guān)注的文章的一些常見(jiàn)的關(guān)鍵詞。關(guān)鍵詞解析服務(wù)一般用于分發(fā)效果的衡量。有時(shí)可以通過(guò)監測關(guān)鍵詞的變化情況進(jìn)行分發(fā)的質(zhì)量和效果的衡量。
分享querylist,供參考
querylist不能理解為鏈接數量,可以理解為你給這篇文章添加關(guān)鍵詞時(shí)的“信息流”位置。
在文章詳情頁(yè)面的主圖是一個(gè)唯一的query地址,在這個(gè)query地址下,又會(huì )有很多很多的文章在你的瀏覽過(guò)程中展示,每篇文章都是獨立,不會(huì )共享id。在文章詳情頁(yè)面頂部的顯示文章時(shí),展示的query地址不只是顯示文章這一個(gè),每一篇文章會(huì )有不同的展示位置。而在文章詳情頁(yè)面中是所有顯示的文章都要顯示。因此,文章詳情頁(yè)只能展示這一篇文章,既可以鏈接到這一篇文章,也可以分別鏈接到n篇文章。
所以,當這一篇文章被多篇文章顯示之后,說(shuō)明這一篇沒(méi)有被多篇文章展示,屬于臨時(shí)狀態(tài),過(guò)一段時(shí)間后,再重新搜索一遍它,再次確認被多篇文章展示過(guò)。所以,querylist不是文章數量,而是query地址。不能理解為鏈接數量。 查看全部
querylist采集微信公眾號文章文章的關(guān)鍵詞解析服務(wù)參考
querylist采集微信公眾號文章的關(guān)鍵詞,并不完全是文章中的關(guān)鍵詞,而是“信息流”里的一些包含公眾號相關(guān)關(guān)鍵詞的詞。也就是你點(diǎn)開(kāi)“信息流”,頁(yè)面里會(huì )出現公眾號文章的鏈接(你在輸入框里輸入關(guān)鍵詞時(shí),它并不要求你給文章添加關(guān)鍵詞)。在在篩選出的鏈接頁(yè)面的右上角,會(huì )看到一個(gè)藍色方框的token,即唯一的權威token。
發(fā)現querylist的作用,關(guān)鍵詞過(guò)濾,
querylist是一個(gè)文章關(guān)鍵詞的數據庫,通過(guò)文章標題點(diǎn)擊querylist查看文章,
querylist提供了你所關(guān)注的文章的一些常見(jiàn)的關(guān)鍵詞。關(guān)鍵詞解析服務(wù)一般用于分發(fā)效果的衡量。有時(shí)可以通過(guò)監測關(guān)鍵詞的變化情況進(jìn)行分發(fā)的質(zhì)量和效果的衡量。
分享querylist,供參考
querylist不能理解為鏈接數量,可以理解為你給這篇文章添加關(guān)鍵詞時(shí)的“信息流”位置。
在文章詳情頁(yè)面的主圖是一個(gè)唯一的query地址,在這個(gè)query地址下,又會(huì )有很多很多的文章在你的瀏覽過(guò)程中展示,每篇文章都是獨立,不會(huì )共享id。在文章詳情頁(yè)面頂部的顯示文章時(shí),展示的query地址不只是顯示文章這一個(gè),每一篇文章會(huì )有不同的展示位置。而在文章詳情頁(yè)面中是所有顯示的文章都要顯示。因此,文章詳情頁(yè)只能展示這一篇文章,既可以鏈接到這一篇文章,也可以分別鏈接到n篇文章。
所以,當這一篇文章被多篇文章顯示之后,說(shuō)明這一篇沒(méi)有被多篇文章展示,屬于臨時(shí)狀態(tài),過(guò)一段時(shí)間后,再重新搜索一遍它,再次確認被多篇文章展示過(guò)。所以,querylist不是文章數量,而是query地址。不能理解為鏈接數量。
微信文章自動(dòng)化爬取過(guò)程中出現的問(wèn)題及解決辦法!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 183 次瀏覽 ? 2021-08-21 03:30
實(shí)現功能
微信賬號目前可以獲取具體指標:biz、昵稱(chēng)、微信ID、頭像、二維碼、個(gè)人資料、認證、認證信息、賬號主題、歸屬地等
WeChat文章目前可用的具體指標(包括但不限于):閱讀數、點(diǎn)贊(瀏覽)數、評論內容和總評論數、正文內容、圖片、視頻地址、是否原創(chuàng )、永久鏈接原文等
實(shí)施技術(shù)和工具
經(jīng)過(guò)大量長(cháng)期測試,保證微信客戶(hù)端采集300公眾號每天文章數據穩定運行,不會(huì )被封號。如果您頻繁訪(fǎng)問(wèn)微信公眾號的歷史消息頁(yè)面,將被禁止24小時(shí)。
目前比較好的策略:訪(fǎng)問(wèn)文章頁(yè)面后休眠5秒,訪(fǎng)問(wèn)微信公眾號歷史消息頁(yè)面后休眠150秒。
微信購買(mǎi)渠道qq客服:1653925422 60元購買(mǎi)了一個(gè)非實(shí)名微信賬號。購買(mǎi)賬號后,不得添加好友,否則將被微信賬號永久屏蔽為營(yíng)銷(xiāo)賬號。僅用于訪(fǎng)問(wèn)微信。公眾號文章不會(huì )被封。
詳細設計
1、 先準備一批微信公眾號biz,爬進(jìn)redis隊列。
數據庫設計
兩個(gè)redis消息隊列
1、微信公眾號業(yè)務(wù)隊列待抓取
wechat_biz_quene list 先進(jìn)先出隊列
復制代碼
2、獲取的微信文章detail頁(yè)面url隊列用于遍歷獲取的歷史文章對應的閱讀、點(diǎn)贊、評論。
<p>2、在模擬器中打開(kāi)微信atx框架,模擬點(diǎn)擊要運行的第一個(gè)公眾號拼接的歷史消息界面,后續流程和數據流邏輯如下圖所示 查看全部
微信文章自動(dòng)化爬取過(guò)程中出現的問(wèn)題及解決辦法!
實(shí)現功能
微信賬號目前可以獲取具體指標:biz、昵稱(chēng)、微信ID、頭像、二維碼、個(gè)人資料、認證、認證信息、賬號主題、歸屬地等
WeChat文章目前可用的具體指標(包括但不限于):閱讀數、點(diǎn)贊(瀏覽)數、評論內容和總評論數、正文內容、圖片、視頻地址、是否原創(chuàng )、永久鏈接原文等
實(shí)施技術(shù)和工具
經(jīng)過(guò)大量長(cháng)期測試,保證微信客戶(hù)端采集300公眾號每天文章數據穩定運行,不會(huì )被封號。如果您頻繁訪(fǎng)問(wèn)微信公眾號的歷史消息頁(yè)面,將被禁止24小時(shí)。
目前比較好的策略:訪(fǎng)問(wèn)文章頁(yè)面后休眠5秒,訪(fǎng)問(wèn)微信公眾號歷史消息頁(yè)面后休眠150秒。
微信購買(mǎi)渠道qq客服:1653925422 60元購買(mǎi)了一個(gè)非實(shí)名微信賬號。購買(mǎi)賬號后,不得添加好友,否則將被微信賬號永久屏蔽為營(yíng)銷(xiāo)賬號。僅用于訪(fǎng)問(wèn)微信。公眾號文章不會(huì )被封。
詳細設計
1、 先準備一批微信公眾號biz,爬進(jìn)redis隊列。
數據庫設計
兩個(gè)redis消息隊列
1、微信公眾號業(yè)務(wù)隊列待抓取
wechat_biz_quene list 先進(jìn)先出隊列
復制代碼
2、獲取的微信文章detail頁(yè)面url隊列用于遍歷獲取的歷史文章對應的閱讀、點(diǎn)贊、評論。
<p>2、在模擬器中打開(kāi)微信atx框架,模擬點(diǎn)擊要運行的第一個(gè)公眾號拼接的歷史消息界面,后續流程和數據流邏輯如下圖所示
jsonp對文本的post方式提供支持的querylist集合:xxxpost提交的請求
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 91 次瀏覽 ? 2021-08-20 01:03
querylist采集微信公眾號文章信息的querylist集合。請求url“/”返回querylist集合:xxxtitletextcontent\wx:href=''\wx:src=''\wx:msg=''\request'''url這個(gè)路徑下,有“\\users\\{{username}}"”字段,記錄的是用戶(hù)信息如果請求的url不是users,請使用post方式發(fā)送請求,如果沒(méi)有請求過(guò),就直接返回請求頭和文本。
表單域可以請求到文本。msg字段不支持enctype屬性。jsonp對文本的post方式提供支持,通過(guò)參數可以獲取具體內容,如果參數是一個(gè)multipart/form-data格式的字段則post傳輸的數據可以是post、get、head等。請求querylist集合格式url:xxxrequesturl:msg/{{username}}返回的querylist集合:xxxpost提交的請求的querylist集合:xxxmultipart/form-data提交的請求的表單數據格式:[xxx][{{username}}]dataheader限制:post以json格式請求時(shí),請提供dataheader。
提交表單數據時(shí),需要提供binding字段,詳見(jiàn)表單提交-materialdesign總結book-home微信公眾號圖書(shū)分類(lèi):圖書(shū)分類(lèi)querylist集合:{{圖書(shū)名}}|{{圖書(shū)書(shū)架編號}}+{{isblank}}-{{isblank}}-{{username}}main-endmain-endlocation="/main/"launch-process10微信啟動(dòng)按鈕,可以指定定位到相應的位置,注意不要跨域。 查看全部
jsonp對文本的post方式提供支持的querylist集合:xxxpost提交的請求
querylist采集微信公眾號文章信息的querylist集合。請求url“/”返回querylist集合:xxxtitletextcontent\wx:href=''\wx:src=''\wx:msg=''\request'''url這個(gè)路徑下,有“\\users\\{{username}}"”字段,記錄的是用戶(hù)信息如果請求的url不是users,請使用post方式發(fā)送請求,如果沒(méi)有請求過(guò),就直接返回請求頭和文本。
表單域可以請求到文本。msg字段不支持enctype屬性。jsonp對文本的post方式提供支持,通過(guò)參數可以獲取具體內容,如果參數是一個(gè)multipart/form-data格式的字段則post傳輸的數據可以是post、get、head等。請求querylist集合格式url:xxxrequesturl:msg/{{username}}返回的querylist集合:xxxpost提交的請求的querylist集合:xxxmultipart/form-data提交的請求的表單數據格式:[xxx][{{username}}]dataheader限制:post以json格式請求時(shí),請提供dataheader。
提交表單數據時(shí),需要提供binding字段,詳見(jiàn)表單提交-materialdesign總結book-home微信公眾號圖書(shū)分類(lèi):圖書(shū)分類(lèi)querylist集合:{{圖書(shū)名}}|{{圖書(shū)書(shū)架編號}}+{{isblank}}-{{isblank}}-{{username}}main-endmain-endlocation="/main/"launch-process10微信啟動(dòng)按鈕,可以指定定位到相應的位置,注意不要跨域。
企業(yè)做好網(wǎng)絡(luò )營(yíng)銷(xiāo)需要六大策略,你做對了嗎?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2021-08-17 22:03
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的公司從事網(wǎng)絡(luò )營(yíng)銷(xiāo)。之前也有一篇文章企業(yè)如何進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)的文章(歡迎點(diǎn)擊《企業(yè)做網(wǎng)絡(luò )營(yíng)銷(xiāo)的六大策略》),但是很多企業(yè)都急于進(jìn)入電商圈,有網(wǎng)絡(luò )營(yíng)銷(xiāo)中的許多禁忌。網(wǎng)絡(luò )營(yíng)銷(xiāo)要想成功,必須避免以下八個(gè)問(wèn)題:
1、立即開(kāi)始,沒(méi)有任何計劃
很多公司一開(kāi)始對網(wǎng)絡(luò )營(yíng)銷(xiāo)并沒(méi)有一個(gè)清晰的認識。大多數企業(yè)的管理者意識到應該通過(guò)報紙、電視等媒體進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo),通過(guò)朋友的介紹,或者業(yè)務(wù)員的鼓動(dòng),通過(guò)互聯(lián)網(wǎng)擴大業(yè)務(wù)和銷(xiāo)售。于是我立即安排人員聯(lián)系制作網(wǎng)站,發(fā)布信息,投入線(xiàn)上推廣。整個(gè)網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程在沒(méi)有任何計劃的情況下展開(kāi)。一段時(shí)間后,不僅沒(méi)有效果,還失去了繼續堅持網(wǎng)絡(luò )營(yíng)銷(xiāo)的信心和興趣,出現了公司退出公司宣布退出等悲劇。
眾所周知,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一個(gè)“頂級”工程,涉及到很多方面。需要結合自身實(shí)際情況,有明確的企業(yè)定位。沒(méi)有定位,就沒(méi)有營(yíng)銷(xiāo)。然后,分析消費者的需求,制定周密、科學(xué)的計劃以取得成功。從啟動(dòng)網(wǎng)站建設、企業(yè)信息發(fā)布,到制定推廣預算、選擇網(wǎng)絡(luò )營(yíng)銷(xiāo)方式、安排專(zhuān)職網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣、客服、文案等,一切工作安排到位,持之以恒,使公司的網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程可以順利進(jìn)行。只有這樣,才能為最終達到理想的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果打下基礎。
2、營(yíng)銷(xiāo)型網(wǎng)站的建設強調設計和輕應用
打造企業(yè)網(wǎng)站是開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)非常重要的一環(huán),尤其是打造面向營(yíng)銷(xiāo)的網(wǎng)站。然而,事實(shí)上,大多數企業(yè)網(wǎng)站并沒(méi)有在網(wǎng)絡(luò )營(yíng)銷(xiāo)中發(fā)揮應有的作用。這與公司對網(wǎng)站construction的理解分不開(kāi)。大多數公司認為網(wǎng)站是公司的網(wǎng)上形象,越漂亮越好。美術(shù)設計、Flash動(dòng)畫(huà)、企業(yè)形象成為企業(yè)最關(guān)注的領(lǐng)域。至于網(wǎng)站是否滿(mǎn)足網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,是否方便日后的功能添加或調整,暫不考慮。負責網(wǎng)站制作的服務(wù)事業(yè)部也盲目迎合公司喜好,在表現形式上下功夫,提高網(wǎng)站的建設成本,當然也不負責內部功能和營(yíng)銷(xiāo)應用.
網(wǎng)站construction 是服務(wù)于網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,這個(gè)要明確。 網(wǎng)站施工要設計和應用并重。不僅要注重企業(yè)形象展示,還要明確網(wǎng)站的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)功能和流程,注重產(chǎn)品或服務(wù)展示、用戶(hù)交互、信息檢索、客戶(hù)體驗等方面的建設。 ,讓網(wǎng)站更實(shí)用有效 和諧簡(jiǎn)單,讓網(wǎng)站具有營(yíng)銷(xiāo)力、傳播力和轉化力。
3、盲目進(jìn)行垃圾郵件營(yíng)銷(xiāo)、海量信息等
很多企業(yè)在面對網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí),都不知所措。許多公司選擇向各種平臺發(fā)送垃圾郵件或大量信息,例如 BBS 和博客。雖然短期內企業(yè)可以看到一些網(wǎng)絡(luò )營(yíng)銷(xiāo)效果,比如網(wǎng)站訪(fǎng)問(wèn)量的增加等,但從長(cháng)遠來(lái)看,企業(yè)遭受的損失遠遠大于網(wǎng)絡(luò )營(yíng)銷(xiāo)取得的效果.
一是企業(yè)形象受損。垃圾郵件深受網(wǎng)友的厭惡。大多數垃圾郵件都是企業(yè)誠信缺失、產(chǎn)品質(zhì)量差,甚至惡意欺詐和非法產(chǎn)品。企業(yè)一旦與垃圾郵件相關(guān)聯(lián),其在消費者心目中的形象就會(huì )大打折扣。
其次,一旦企業(yè)習慣了這種低成本、自害的網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣方式,一味追求低報酬、高回報的畸形網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,對投資回報缺乏正確認識,將難以接受真正健康有益的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)和產(chǎn)品,錯失網(wǎng)絡(luò )營(yíng)銷(xiāo)和企業(yè)發(fā)展的良機。企業(yè)要結合自身發(fā)展情況,有一套適合自己的推廣渠道。
4、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品跟風(fēng)買(mǎi)
目前,網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品種類(lèi)繁多,加上銷(xiāo)售人員的聰明才智,企業(yè)在產(chǎn)品選擇上有很多困惑。我們經(jīng)常會(huì )發(fā)現,一旦某個(gè)行業(yè)的幾家公司使用了某種網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,同行業(yè)的其他公司就會(huì )陸續購買(mǎi)。
很多網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)商已經(jīng)掌握了公司的購買(mǎi)和比較心理,通過(guò)行業(yè)客戶(hù)會(huì )議、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品行業(yè)說(shuō)明會(huì )等會(huì )議,充分發(fā)揮“客戶(hù)見(jiàn)證”和“推薦”的作用。技能使企業(yè)能夠削弱自己的判斷力,跟隨他人的選擇,或者盲目競爭和購買(mǎi)。實(shí)踐證明,適合你的產(chǎn)品才是好產(chǎn)品。跟風(fēng)購買(mǎi)的網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品往往不僅不是最合適的,而且由于過(guò)度使用,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果越來(lái)越差。創(chuàng )業(yè)者要懂得放棄,學(xué)會(huì )選擇。
5、利用搜索引擎競拍產(chǎn)品,等待兔子
目前,谷歌、雅虎、百度等搜索引擎競價(jià)產(chǎn)品是網(wǎng)絡(luò )營(yíng)銷(xiāo)的主流產(chǎn)品,越來(lái)越多的企業(yè)選擇搜索引擎競價(jià)產(chǎn)品。大多數企業(yè)并不知道在購買(mǎi)了有競爭力的產(chǎn)品后,他們需要定期進(jìn)行優(yōu)化和維護,而只是等待客戶(hù)上門(mén)。這種效果只會(huì )變得更糟。
搜索引擎競價(jià)的效果是由很多因素組成的。日常消費預算、關(guān)鍵詞上詞數、報表分析等維護工作的好壞,將直接影響搜索引擎競價(jià)產(chǎn)品的效果。企業(yè)在使用競價(jià)產(chǎn)品時(shí),不能坐以待斃,而應定期對其進(jìn)行維護和優(yōu)化。如果他們能把握“以用戶(hù)體驗為中心”的原則,努力提升用戶(hù)的感受,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果才能得到提升。 .
6、線(xiàn)上營(yíng)銷(xiāo)和線(xiàn)下?tīng)I銷(xiāo)完全分離
網(wǎng)絡(luò )營(yíng)銷(xiāo)是整體營(yíng)銷(xiāo)戰略的一部分,是實(shí)現企業(yè)銷(xiāo)售和盈利的重要手段。需要線(xiàn)上線(xiàn)下有效結合才能取得顯著(zhù)效果。許多公司認為互聯(lián)網(wǎng)只是一種媒介。即使他們已經(jīng)實(shí)現了在線(xiàn)營(yíng)銷(xiāo),他們也可以通過(guò)互聯(lián)網(wǎng)推廣他們的公司和產(chǎn)品,提高他們的品牌知名度和企業(yè)形象。這是一種不完整的網(wǎng)絡(luò )營(yíng)銷(xiāo)意識。沒(méi)有線(xiàn)下參與的網(wǎng)絡(luò )營(yíng)銷(xiāo)不是真正的網(wǎng)絡(luò )營(yíng)銷(xiāo),難以達到“營(yíng)銷(xiāo)”和“銷(xiāo)售”的終極目標。
其實(shí),網(wǎng)絡(luò )營(yíng)銷(xiāo)的作用遠不止這些。對于線(xiàn)下體驗較多的企業(yè),要抓住線(xiàn)上宣傳推廣的作用,再線(xiàn)下提升客戶(hù)體驗,從而采集銷(xiāo)售線(xiàn)索,挖掘潛在客戶(hù),線(xiàn)下與線(xiàn)上相結合,最終達成交易,并為企業(yè)創(chuàng )造利潤。
7、信息采集方法一勞永逸
采集信息是一種流行的“網(wǎng)絡(luò )營(yíng)銷(xiāo)方式”。許多網(wǎng)站通過(guò)編寫(xiě)程序或使用采集軟件從其他網(wǎng)站那里抓取大量需要的網(wǎng)絡(luò )信息來(lái)豐富他們的網(wǎng)站內容。這樣,網(wǎng)站的內容快速豐富,搜索引擎收錄頁(yè)面的數量也可以快速增加,可以快速吸引訪(fǎng)問(wèn)者,增加流量。然而事實(shí)證明,沒(méi)有成功的網(wǎng)站來(lái)自信息采集,成功的網(wǎng)絡(luò )營(yíng)銷(xiāo)也沒(méi)有那么簡(jiǎn)單。
Information采集可以采集到大量需要的信息,但信息質(zhì)量參差不齊,大部分是互聯(lián)網(wǎng)上重復性高的內容,對搜索引擎不起作用。對于用戶(hù)來(lái)說(shuō),只是網(wǎng)站的另一個(gè)克隆,沒(méi)有吸引力。對于網(wǎng)站內容的建設,企業(yè)還是要腳踏實(shí)地,做有自己特色和原創(chuàng )精神的內容,少積累多,用心培養忠實(shí)用戶(hù),豐富網(wǎng)站一些案例研究。 @的內容逐漸通向成功。
8、Background 數據,重統計多于分析
世界上有沒(méi)有哪位創(chuàng )業(yè)者在進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)最不注重網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果?但在現實(shí)中,很多企業(yè)在對網(wǎng)絡(luò )營(yíng)銷(xiāo)效果的評價(jià)中,大多偏重統計,忽視分析。在網(wǎng)絡(luò )營(yíng)銷(xiāo)效果方面,網(wǎng)站的訪(fǎng)問(wèn)量和網(wǎng)站的排名是普遍關(guān)注的內容。用戶(hù)回訪(fǎng)率、用戶(hù)來(lái)源分析、關(guān)鍵詞分析等更深入的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果分析沒(méi)有得到重視。
全面的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果評估應該包括網(wǎng)站訪(fǎng)問(wèn)量、用戶(hù)粘性、來(lái)源分析、搜索引擎關(guān)鍵詞效果分析、各種推廣產(chǎn)品的應用效果分析?;趯τ脩?hù)信息等方面的分析,可以根據這些分析得出下一步網(wǎng)絡(luò )營(yíng)銷(xiāo)工作的改進(jìn)建議和方案。網(wǎng)絡(luò )營(yíng)銷(xiāo)重統計,輕分析,無(wú)助于改善網(wǎng)絡(luò )營(yíng)銷(xiāo)現狀。
以上八家企業(yè)在網(wǎng)絡(luò )營(yíng)銷(xiāo)中應注意的問(wèn)題。大多數公司都出現了。我相信,如果每個(gè)創(chuàng )業(yè)者在開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)都細心、細心、用心,他一定會(huì )走向成功。當然,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一門(mén)深不可測的知識領(lǐng)域,更多的還是需要我們主動(dòng)學(xué)習來(lái)充實(shí)自己的大腦,然后將更多的理論知識應用到實(shí)際的生活和工作中。更多網(wǎng)絡(luò )營(yíng)銷(xiāo)的理論知識和操作技巧,歡迎關(guān)注山人資訊,教你如何進(jìn)行高效的網(wǎng)絡(luò )營(yíng)銷(xiāo)。
沉陽(yáng)網(wǎng)站建筑、沉陽(yáng)網(wǎng)站制作、沉陽(yáng)微信小程序、沉陽(yáng)互聯(lián)網(wǎng)公司開(kāi)發(fā)、沉陽(yáng)工作網(wǎng)站、沉陽(yáng)做網(wǎng)站、沉陽(yáng)制造網(wǎng)站、沉陽(yáng)網(wǎng)站保護、沉陽(yáng)網(wǎng)站建筑公司,沉陽(yáng)制作網(wǎng)頁(yè),遼寧網(wǎng)站建筑,遼寧網(wǎng)站設計,企業(yè)網(wǎng)站建筑,沉陽(yáng),沉陽(yáng)手機網(wǎng)站,3G網(wǎng)站,手機網(wǎng)站制作,沉陽(yáng)微信推廣,沉陽(yáng)微信營(yíng)銷(xiāo),企業(yè)微信營(yíng)銷(xiāo),沉陽(yáng)微信公眾平臺營(yíng)銷(xiāo),沉陽(yáng)微信開(kāi)發(fā),沉陽(yáng)微信公眾平臺,沉陽(yáng)微信公眾平臺開(kāi)發(fā),沉陽(yáng)微信自動(dòng)回復,沉陽(yáng)微信接入,沉陽(yáng)微信平臺接入,沉陽(yáng)微信,沉陽(yáng)Micro網(wǎng)站,沉陽(yáng)商城開(kāi)發(fā),沉陽(yáng)商城建設,沉陽(yáng)3D打印機,沉陽(yáng)3D打印服務(wù),沉陽(yáng)3D打印機 查看全部
企業(yè)做好網(wǎng)絡(luò )營(yíng)銷(xiāo)需要六大策略,你做對了嗎?
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的公司從事網(wǎng)絡(luò )營(yíng)銷(xiāo)。之前也有一篇文章企業(yè)如何進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)的文章(歡迎點(diǎn)擊《企業(yè)做網(wǎng)絡(luò )營(yíng)銷(xiāo)的六大策略》),但是很多企業(yè)都急于進(jìn)入電商圈,有網(wǎng)絡(luò )營(yíng)銷(xiāo)中的許多禁忌。網(wǎng)絡(luò )營(yíng)銷(xiāo)要想成功,必須避免以下八個(gè)問(wèn)題:
1、立即開(kāi)始,沒(méi)有任何計劃
很多公司一開(kāi)始對網(wǎng)絡(luò )營(yíng)銷(xiāo)并沒(méi)有一個(gè)清晰的認識。大多數企業(yè)的管理者意識到應該通過(guò)報紙、電視等媒體進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo),通過(guò)朋友的介紹,或者業(yè)務(wù)員的鼓動(dòng),通過(guò)互聯(lián)網(wǎng)擴大業(yè)務(wù)和銷(xiāo)售。于是我立即安排人員聯(lián)系制作網(wǎng)站,發(fā)布信息,投入線(xiàn)上推廣。整個(gè)網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程在沒(méi)有任何計劃的情況下展開(kāi)。一段時(shí)間后,不僅沒(méi)有效果,還失去了繼續堅持網(wǎng)絡(luò )營(yíng)銷(xiāo)的信心和興趣,出現了公司退出公司宣布退出等悲劇。
眾所周知,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一個(gè)“頂級”工程,涉及到很多方面。需要結合自身實(shí)際情況,有明確的企業(yè)定位。沒(méi)有定位,就沒(méi)有營(yíng)銷(xiāo)。然后,分析消費者的需求,制定周密、科學(xué)的計劃以取得成功。從啟動(dòng)網(wǎng)站建設、企業(yè)信息發(fā)布,到制定推廣預算、選擇網(wǎng)絡(luò )營(yíng)銷(xiāo)方式、安排專(zhuān)職網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣、客服、文案等,一切工作安排到位,持之以恒,使公司的網(wǎng)絡(luò )營(yíng)銷(xiāo)過(guò)程可以順利進(jìn)行。只有這樣,才能為最終達到理想的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果打下基礎。
2、營(yíng)銷(xiāo)型網(wǎng)站的建設強調設計和輕應用
打造企業(yè)網(wǎng)站是開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)非常重要的一環(huán),尤其是打造面向營(yíng)銷(xiāo)的網(wǎng)站。然而,事實(shí)上,大多數企業(yè)網(wǎng)站并沒(méi)有在網(wǎng)絡(luò )營(yíng)銷(xiāo)中發(fā)揮應有的作用。這與公司對網(wǎng)站construction的理解分不開(kāi)。大多數公司認為網(wǎng)站是公司的網(wǎng)上形象,越漂亮越好。美術(shù)設計、Flash動(dòng)畫(huà)、企業(yè)形象成為企業(yè)最關(guān)注的領(lǐng)域。至于網(wǎng)站是否滿(mǎn)足網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,是否方便日后的功能添加或調整,暫不考慮。負責網(wǎng)站制作的服務(wù)事業(yè)部也盲目迎合公司喜好,在表現形式上下功夫,提高網(wǎng)站的建設成本,當然也不負責內部功能和營(yíng)銷(xiāo)應用.
網(wǎng)站construction 是服務(wù)于網(wǎng)絡(luò )營(yíng)銷(xiāo)的需求,這個(gè)要明確。 網(wǎng)站施工要設計和應用并重。不僅要注重企業(yè)形象展示,還要明確網(wǎng)站的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)功能和流程,注重產(chǎn)品或服務(wù)展示、用戶(hù)交互、信息檢索、客戶(hù)體驗等方面的建設。 ,讓網(wǎng)站更實(shí)用有效 和諧簡(jiǎn)單,讓網(wǎng)站具有營(yíng)銷(xiāo)力、傳播力和轉化力。
3、盲目進(jìn)行垃圾郵件營(yíng)銷(xiāo)、海量信息等
很多企業(yè)在面對網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí),都不知所措。許多公司選擇向各種平臺發(fā)送垃圾郵件或大量信息,例如 BBS 和博客。雖然短期內企業(yè)可以看到一些網(wǎng)絡(luò )營(yíng)銷(xiāo)效果,比如網(wǎng)站訪(fǎng)問(wèn)量的增加等,但從長(cháng)遠來(lái)看,企業(yè)遭受的損失遠遠大于網(wǎng)絡(luò )營(yíng)銷(xiāo)取得的效果.
一是企業(yè)形象受損。垃圾郵件深受網(wǎng)友的厭惡。大多數垃圾郵件都是企業(yè)誠信缺失、產(chǎn)品質(zhì)量差,甚至惡意欺詐和非法產(chǎn)品。企業(yè)一旦與垃圾郵件相關(guān)聯(lián),其在消費者心目中的形象就會(huì )大打折扣。
其次,一旦企業(yè)習慣了這種低成本、自害的網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣方式,一味追求低報酬、高回報的畸形網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,對投資回報缺乏正確認識,將難以接受真正健康有益的網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)和產(chǎn)品,錯失網(wǎng)絡(luò )營(yíng)銷(xiāo)和企業(yè)發(fā)展的良機。企業(yè)要結合自身發(fā)展情況,有一套適合自己的推廣渠道。
4、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品跟風(fēng)買(mǎi)
目前,網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品種類(lèi)繁多,加上銷(xiāo)售人員的聰明才智,企業(yè)在產(chǎn)品選擇上有很多困惑。我們經(jīng)常會(huì )發(fā)現,一旦某個(gè)行業(yè)的幾家公司使用了某種網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品,同行業(yè)的其他公司就會(huì )陸續購買(mǎi)。
很多網(wǎng)絡(luò )營(yíng)銷(xiāo)服務(wù)商已經(jīng)掌握了公司的購買(mǎi)和比較心理,通過(guò)行業(yè)客戶(hù)會(huì )議、網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品行業(yè)說(shuō)明會(huì )等會(huì )議,充分發(fā)揮“客戶(hù)見(jiàn)證”和“推薦”的作用。技能使企業(yè)能夠削弱自己的判斷力,跟隨他人的選擇,或者盲目競爭和購買(mǎi)。實(shí)踐證明,適合你的產(chǎn)品才是好產(chǎn)品。跟風(fēng)購買(mǎi)的網(wǎng)絡(luò )營(yíng)銷(xiāo)產(chǎn)品往往不僅不是最合適的,而且由于過(guò)度使用,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果越來(lái)越差。創(chuàng )業(yè)者要懂得放棄,學(xué)會(huì )選擇。
5、利用搜索引擎競拍產(chǎn)品,等待兔子
目前,谷歌、雅虎、百度等搜索引擎競價(jià)產(chǎn)品是網(wǎng)絡(luò )營(yíng)銷(xiāo)的主流產(chǎn)品,越來(lái)越多的企業(yè)選擇搜索引擎競價(jià)產(chǎn)品。大多數企業(yè)并不知道在購買(mǎi)了有競爭力的產(chǎn)品后,他們需要定期進(jìn)行優(yōu)化和維護,而只是等待客戶(hù)上門(mén)。這種效果只會(huì )變得更糟。
搜索引擎競價(jià)的效果是由很多因素組成的。日常消費預算、關(guān)鍵詞上詞數、報表分析等維護工作的好壞,將直接影響搜索引擎競價(jià)產(chǎn)品的效果。企業(yè)在使用競價(jià)產(chǎn)品時(shí),不能坐以待斃,而應定期對其進(jìn)行維護和優(yōu)化。如果他們能把握“以用戶(hù)體驗為中心”的原則,努力提升用戶(hù)的感受,網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果才能得到提升。 .
6、線(xiàn)上營(yíng)銷(xiāo)和線(xiàn)下?tīng)I銷(xiāo)完全分離
網(wǎng)絡(luò )營(yíng)銷(xiāo)是整體營(yíng)銷(xiāo)戰略的一部分,是實(shí)現企業(yè)銷(xiāo)售和盈利的重要手段。需要線(xiàn)上線(xiàn)下有效結合才能取得顯著(zhù)效果。許多公司認為互聯(lián)網(wǎng)只是一種媒介。即使他們已經(jīng)實(shí)現了在線(xiàn)營(yíng)銷(xiāo),他們也可以通過(guò)互聯(lián)網(wǎng)推廣他們的公司和產(chǎn)品,提高他們的品牌知名度和企業(yè)形象。這是一種不完整的網(wǎng)絡(luò )營(yíng)銷(xiāo)意識。沒(méi)有線(xiàn)下參與的網(wǎng)絡(luò )營(yíng)銷(xiāo)不是真正的網(wǎng)絡(luò )營(yíng)銷(xiāo),難以達到“營(yíng)銷(xiāo)”和“銷(xiāo)售”的終極目標。
其實(shí),網(wǎng)絡(luò )營(yíng)銷(xiāo)的作用遠不止這些。對于線(xiàn)下體驗較多的企業(yè),要抓住線(xiàn)上宣傳推廣的作用,再線(xiàn)下提升客戶(hù)體驗,從而采集銷(xiāo)售線(xiàn)索,挖掘潛在客戶(hù),線(xiàn)下與線(xiàn)上相結合,最終達成交易,并為企業(yè)創(chuàng )造利潤。
7、信息采集方法一勞永逸
采集信息是一種流行的“網(wǎng)絡(luò )營(yíng)銷(xiāo)方式”。許多網(wǎng)站通過(guò)編寫(xiě)程序或使用采集軟件從其他網(wǎng)站那里抓取大量需要的網(wǎng)絡(luò )信息來(lái)豐富他們的網(wǎng)站內容。這樣,網(wǎng)站的內容快速豐富,搜索引擎收錄頁(yè)面的數量也可以快速增加,可以快速吸引訪(fǎng)問(wèn)者,增加流量。然而事實(shí)證明,沒(méi)有成功的網(wǎng)站來(lái)自信息采集,成功的網(wǎng)絡(luò )營(yíng)銷(xiāo)也沒(méi)有那么簡(jiǎn)單。
Information采集可以采集到大量需要的信息,但信息質(zhì)量參差不齊,大部分是互聯(lián)網(wǎng)上重復性高的內容,對搜索引擎不起作用。對于用戶(hù)來(lái)說(shuō),只是網(wǎng)站的另一個(gè)克隆,沒(méi)有吸引力。對于網(wǎng)站內容的建設,企業(yè)還是要腳踏實(shí)地,做有自己特色和原創(chuàng )精神的內容,少積累多,用心培養忠實(shí)用戶(hù),豐富網(wǎng)站一些案例研究。 @的內容逐漸通向成功。
8、Background 數據,重統計多于分析
世界上有沒(méi)有哪位創(chuàng )業(yè)者在進(jìn)行網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)最不注重網(wǎng)絡(luò )營(yíng)銷(xiāo)的效果?但在現實(shí)中,很多企業(yè)在對網(wǎng)絡(luò )營(yíng)銷(xiāo)效果的評價(jià)中,大多偏重統計,忽視分析。在網(wǎng)絡(luò )營(yíng)銷(xiāo)效果方面,網(wǎng)站的訪(fǎng)問(wèn)量和網(wǎng)站的排名是普遍關(guān)注的內容。用戶(hù)回訪(fǎng)率、用戶(hù)來(lái)源分析、關(guān)鍵詞分析等更深入的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果分析沒(méi)有得到重視。
全面的網(wǎng)絡(luò )營(yíng)銷(xiāo)效果評估應該包括網(wǎng)站訪(fǎng)問(wèn)量、用戶(hù)粘性、來(lái)源分析、搜索引擎關(guān)鍵詞效果分析、各種推廣產(chǎn)品的應用效果分析?;趯τ脩?hù)信息等方面的分析,可以根據這些分析得出下一步網(wǎng)絡(luò )營(yíng)銷(xiāo)工作的改進(jìn)建議和方案。網(wǎng)絡(luò )營(yíng)銷(xiāo)重統計,輕分析,無(wú)助于改善網(wǎng)絡(luò )營(yíng)銷(xiāo)現狀。
以上八家企業(yè)在網(wǎng)絡(luò )營(yíng)銷(xiāo)中應注意的問(wèn)題。大多數公司都出現了。我相信,如果每個(gè)創(chuàng )業(yè)者在開(kāi)展網(wǎng)絡(luò )營(yíng)銷(xiāo)時(shí)都細心、細心、用心,他一定會(huì )走向成功。當然,網(wǎng)絡(luò )營(yíng)銷(xiāo)是一門(mén)深不可測的知識領(lǐng)域,更多的還是需要我們主動(dòng)學(xué)習來(lái)充實(shí)自己的大腦,然后將更多的理論知識應用到實(shí)際的生活和工作中。更多網(wǎng)絡(luò )營(yíng)銷(xiāo)的理論知識和操作技巧,歡迎關(guān)注山人資訊,教你如何進(jìn)行高效的網(wǎng)絡(luò )營(yíng)銷(xiāo)。
沉陽(yáng)網(wǎng)站建筑、沉陽(yáng)網(wǎng)站制作、沉陽(yáng)微信小程序、沉陽(yáng)互聯(lián)網(wǎng)公司開(kāi)發(fā)、沉陽(yáng)工作網(wǎng)站、沉陽(yáng)做網(wǎng)站、沉陽(yáng)制造網(wǎng)站、沉陽(yáng)網(wǎng)站保護、沉陽(yáng)網(wǎng)站建筑公司,沉陽(yáng)制作網(wǎng)頁(yè),遼寧網(wǎng)站建筑,遼寧網(wǎng)站設計,企業(yè)網(wǎng)站建筑,沉陽(yáng),沉陽(yáng)手機網(wǎng)站,3G網(wǎng)站,手機網(wǎng)站制作,沉陽(yáng)微信推廣,沉陽(yáng)微信營(yíng)銷(xiāo),企業(yè)微信營(yíng)銷(xiāo),沉陽(yáng)微信公眾平臺營(yíng)銷(xiāo),沉陽(yáng)微信開(kāi)發(fā),沉陽(yáng)微信公眾平臺,沉陽(yáng)微信公眾平臺開(kāi)發(fā),沉陽(yáng)微信自動(dòng)回復,沉陽(yáng)微信接入,沉陽(yáng)微信平臺接入,沉陽(yáng)微信,沉陽(yáng)Micro網(wǎng)站,沉陽(yáng)商城開(kāi)發(fā),沉陽(yáng)商城建設,沉陽(yáng)3D打印機,沉陽(yáng)3D打印服務(wù),沉陽(yáng)3D打印機
shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區(組圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 94 次瀏覽 ? 2021-08-16 04:02
querylist采集微信公眾號文章,實(shí)現百度、頭條等搜索引擎排名和微信搜索的推廣。推廣效果是電商數據里面永遠的痛,只有做好開(kāi)源節流才能有意想不到的收獲。精準推廣的本質(zhì),在于挖掘目標人群的需求。簡(jiǎn)單的理解有:做什么產(chǎn)品?買(mǎi)什么東西?購買(mǎi)什么產(chǎn)品?推廣還是從人性上挖掘。微信里面,可以通過(guò)朋友圈、公眾號推送、客服回復等方式,來(lái)獲取目標人群的公眾號信息,然后以公眾號為依托,對文章進(jìn)行推廣。
推廣效果==人群質(zhì)量*轉化率*精準度基于精準用戶(hù)人群的分析和優(yōu)化,達到排名和業(yè)績(jì)上的提升。一、篩選目標用戶(hù)維度包括:用戶(hù)行為分析,文章發(fā)送時(shí)間、內容等信息目標用戶(hù)人群的人物畫(huà)像,標簽,性別、年齡、職業(yè)等行為分析包括:用戶(hù)特征、地域、興趣愛(ài)好等內容,參考一下做的非常不錯的文章,從標題到內容都是包裝好的,你可以借鑒一下:shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區_b2c/?itemid=27613055_aw1b0_3ub45464ce7bd1347ee058&utm_source=toutiao-io&utm_medium=toutiao_android&utm_campaign=toutiao_android&utm_term=23&utm_division=zhihu&utm_content=shopx要學(xué)會(huì )分析用戶(hù)的行為,用戶(hù)的行為可以總結成為一些標簽比如:停留時(shí)間,點(diǎn)贊、轉發(fā)次數,互動(dòng)頻率...,每個(gè)標簽通過(guò)爬蟲(chóng)抓取,然后組合起來(lái)得到最終的人群標簽。
文章發(fā)送時(shí)間決定了有多少人看到你,文章發(fā)送時(shí)間點(diǎn)需要設置合理,這方面可以采用意圖猜測這種方式來(lái)推測。根據轉發(fā)次數,來(lái)推測是否有做公眾號的推廣等。意圖猜測是采用用戶(hù)反饋等第三方服務(wù),比如:活動(dòng),促銷(xiāo)等等有類(lèi)似經(jīng)驗的人可以基于你的競爭對手總結出用戶(hù)使用這個(gè)服務(wù)時(shí)的動(dòng)機:定向活動(dòng)推送,用戶(hù)就會(huì )參與,會(huì )有轉發(fā)、關(guān)注的動(dòng)作。
有需求就會(huì )參與,有轉發(fā)、關(guān)注、評論等行為才會(huì )有下單等一系列動(dòng)作...分析用戶(hù)行為,來(lái)獲取目標人群的特征屬性,整理出目標人群的特征集合,例如:男性/女性/地域/...,通過(guò)小卡片、二維碼或者vip會(huì )員邀請碼的方式來(lái)推送給用戶(hù),到點(diǎn)用戶(hù)自動(dòng)有收到。優(yōu)質(zhì)的內容,不局限于電商類(lèi),適合內容營(yíng)銷(xiāo)的有:小黃雞、悟空問(wèn)答、360熱問(wèn)、知乎問(wèn)答等內容整理后再分享出去,簡(jiǎn)單干脆,有時(shí)候文章不吸引用戶(hù),可以想想是否是篇章長(cháng)度的問(wèn)題,可以從頭開(kāi)始寫(xiě),隨著(zhù)用戶(hù)閱讀的情況來(lái)增加內容的字數,每篇分享的時(shí)間點(diǎn)不要超過(guò)100字,越簡(jiǎn)短越有力,時(shí)間點(diǎn)過(guò)長(cháng)的文章會(huì )加長(cháng)用戶(hù)的閱讀習慣,不利于用戶(hù)轉化。 查看全部
shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區(組圖)
querylist采集微信公眾號文章,實(shí)現百度、頭條等搜索引擎排名和微信搜索的推廣。推廣效果是電商數據里面永遠的痛,只有做好開(kāi)源節流才能有意想不到的收獲。精準推廣的本質(zhì),在于挖掘目標人群的需求。簡(jiǎn)單的理解有:做什么產(chǎn)品?買(mǎi)什么東西?購買(mǎi)什么產(chǎn)品?推廣還是從人性上挖掘。微信里面,可以通過(guò)朋友圈、公眾號推送、客服回復等方式,來(lái)獲取目標人群的公眾號信息,然后以公眾號為依托,對文章進(jìn)行推廣。
推廣效果==人群質(zhì)量*轉化率*精準度基于精準用戶(hù)人群的分析和優(yōu)化,達到排名和業(yè)績(jì)上的提升。一、篩選目標用戶(hù)維度包括:用戶(hù)行為分析,文章發(fā)送時(shí)間、內容等信息目標用戶(hù)人群的人物畫(huà)像,標簽,性別、年齡、職業(yè)等行為分析包括:用戶(hù)特征、地域、興趣愛(ài)好等內容,參考一下做的非常不錯的文章,從標題到內容都是包裝好的,你可以借鑒一下:shop_xiaohao001_關(guān)注shopx藥店_karaoke_社區_b2c/?itemid=27613055_aw1b0_3ub45464ce7bd1347ee058&utm_source=toutiao-io&utm_medium=toutiao_android&utm_campaign=toutiao_android&utm_term=23&utm_division=zhihu&utm_content=shopx要學(xué)會(huì )分析用戶(hù)的行為,用戶(hù)的行為可以總結成為一些標簽比如:停留時(shí)間,點(diǎn)贊、轉發(fā)次數,互動(dòng)頻率...,每個(gè)標簽通過(guò)爬蟲(chóng)抓取,然后組合起來(lái)得到最終的人群標簽。
文章發(fā)送時(shí)間決定了有多少人看到你,文章發(fā)送時(shí)間點(diǎn)需要設置合理,這方面可以采用意圖猜測這種方式來(lái)推測。根據轉發(fā)次數,來(lái)推測是否有做公眾號的推廣等。意圖猜測是采用用戶(hù)反饋等第三方服務(wù),比如:活動(dòng),促銷(xiāo)等等有類(lèi)似經(jīng)驗的人可以基于你的競爭對手總結出用戶(hù)使用這個(gè)服務(wù)時(shí)的動(dòng)機:定向活動(dòng)推送,用戶(hù)就會(huì )參與,會(huì )有轉發(fā)、關(guān)注的動(dòng)作。
有需求就會(huì )參與,有轉發(fā)、關(guān)注、評論等行為才會(huì )有下單等一系列動(dòng)作...分析用戶(hù)行為,來(lái)獲取目標人群的特征屬性,整理出目標人群的特征集合,例如:男性/女性/地域/...,通過(guò)小卡片、二維碼或者vip會(huì )員邀請碼的方式來(lái)推送給用戶(hù),到點(diǎn)用戶(hù)自動(dòng)有收到。優(yōu)質(zhì)的內容,不局限于電商類(lèi),適合內容營(yíng)銷(xiāo)的有:小黃雞、悟空問(wèn)答、360熱問(wèn)、知乎問(wèn)答等內容整理后再分享出去,簡(jiǎn)單干脆,有時(shí)候文章不吸引用戶(hù),可以想想是否是篇章長(cháng)度的問(wèn)題,可以從頭開(kāi)始寫(xiě),隨著(zhù)用戶(hù)閱讀的情況來(lái)增加內容的字數,每篇分享的時(shí)間點(diǎn)不要超過(guò)100字,越簡(jiǎn)短越有力,時(shí)間點(diǎn)過(guò)長(cháng)的文章會(huì )加長(cháng)用戶(hù)的閱讀習慣,不利于用戶(hù)轉化。
用Python將公眾號中文章爬下來(lái)獲取文章的html信息
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2021-08-16 01:21
用Python將公眾號中文章爬下來(lái)獲取文章的html信息
公眾號里的文章一定是每一篇文章的必讀。
有時(shí)候我們關(guān)注寶物類(lèi)公眾號,會(huì )發(fā)現它的歷史文章有數百甚至數千篇文章,而作者只索引了他認為更好的幾篇。太麻煩了。為了解決這類(lèi)問(wèn)題,我決定用Python爬下公眾號文章。
基本思路爬取
文章crawling 我們使用公共平臺的方式。這個(gè)方法雖然簡(jiǎn)單,但是我們需要有一個(gè)公眾號。如果我們沒(méi)有官方賬號,我們可以自己注冊一個(gè)。公眾號的注冊也比較簡(jiǎn)單。別說(shuō)了。
首先登錄您的公眾號,然后依次進(jìn)行以下操作
通過(guò)上面的操作,我們可以得到cookie等信息,我們先把cookie寫(xiě)入txt文件,實(shí)現代碼如下:
# 從瀏覽器中復制出來(lái)的 cookie 字符串cookie_str = "自己的 cookie"cookie = {}# 遍歷 cookiefor cookies in cookie_str.split("; "): cookie_item = cookies.split("=") cookie[cookie_item[0]] = cookie_item[1]# 將 cookie 寫(xiě)入 txt 文件with open('cookie.txt', "w") as file: file.write(json.dumps(cookie))
接下來(lái)我們獲取公眾號文章列表信息,代碼實(shí)現如下:
with open("cookie.txt", "r") as file: cookie = file.read()cookies = json.loads(cookie)url = "https://mp.weixin.qq.com"response = requests.get(url, cookies=cookies)# 獲取tokentoken = re.findall(r"token=(\d+)", str(response.url))[0]# 請求頭信息headers = { "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B + token + "&lang=zh_CN", "Host": "mp.weixin.qq.com", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",}# 遍歷指定頁(yè)數的文章for i in range(1, 5, 1): begin = (i - 1) * 5 # 獲取文章列表 requestUrl = "https://mp.weixin.qq.com/cgi-b ... 2Bstr(begin)+"&count=5&fakeid=要爬取公眾號的fakeid&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1" search_response = requests.get(requestUrl, cookies=cookies, headers=headers) # 獲取 JSON 格式的列表信息 re_text = search_response.json() list = re_text.get("app_msg_list") # 遍歷文章列表 for j in list: # 文章鏈接 url = j["link"] # 文章標題 title = j["title"] print(url) # 等待 8 秒,避免請求過(guò)于頻繁 time.sleep(8)
保存
通過(guò)文章list信息,我們可以得到文章公眾號的鏈接、標題等信息,然后我們可以根據文章使用微信模塊獲取文章html格式信息關(guān)聯(lián)。模塊安裝使用pip install wechatsogou就可以了。
這里需要注意的是,我們通過(guò)微信模塊獲取的html信息會(huì )存在一些問(wèn)題。有兩個(gè)主要問(wèn)題。一是文章的html信息不全,需要自己補;另一個(gè)得到。 html 信息中可能有一些 CSS 樣式?jīng)]有帶過(guò)來(lái)。對于這個(gè)問(wèn)題,我們可以先通過(guò)瀏覽器的開(kāi)發(fā)者工具獲取樣式,然后手動(dòng)添加。代碼實(shí)現如下:
# url:文章鏈接,title:文章標題def save2html(url, title): # captcha_break_time 為驗證碼輸入錯誤的重試次數,默認為 1 ws_api = wechatsogou.WechatSogouAPI(captcha_break_time = 3) content_info = ws_api.get_article_content(url) html = f''' {title} {title} {content_info['content_html']} ''' with open(title + '.html', "w", encoding="utf-8") as file: file.write('%s\n'%html)
上面代碼中的my.css文件存儲了一些沒(méi)有帶過(guò)來(lái)的CSS樣式信息。
用瀏覽器打開(kāi)公眾號文章的html文件看看效果:
通過(guò)上面的顯示結果可以看出,我們保存的html文件的顯示效果還不錯。
參考:
結束
?
? 查看全部
用Python將公眾號中文章爬下來(lái)獲取文章的html信息

公眾號里的文章一定是每一篇文章的必讀。
有時(shí)候我們關(guān)注寶物類(lèi)公眾號,會(huì )發(fā)現它的歷史文章有數百甚至數千篇文章,而作者只索引了他認為更好的幾篇。太麻煩了。為了解決這類(lèi)問(wèn)題,我決定用Python爬下公眾號文章。
基本思路爬取
文章crawling 我們使用公共平臺的方式。這個(gè)方法雖然簡(jiǎn)單,但是我們需要有一個(gè)公眾號。如果我們沒(méi)有官方賬號,我們可以自己注冊一個(gè)。公眾號的注冊也比較簡(jiǎn)單。別說(shuō)了。
首先登錄您的公眾號,然后依次進(jìn)行以下操作
通過(guò)上面的操作,我們可以得到cookie等信息,我們先把cookie寫(xiě)入txt文件,實(shí)現代碼如下:
# 從瀏覽器中復制出來(lái)的 cookie 字符串cookie_str = "自己的 cookie"cookie = {}# 遍歷 cookiefor cookies in cookie_str.split("; "): cookie_item = cookies.split("=") cookie[cookie_item[0]] = cookie_item[1]# 將 cookie 寫(xiě)入 txt 文件with open('cookie.txt', "w") as file: file.write(json.dumps(cookie))
接下來(lái)我們獲取公眾號文章列表信息,代碼實(shí)現如下:
with open("cookie.txt", "r") as file: cookie = file.read()cookies = json.loads(cookie)url = "https://mp.weixin.qq.com"response = requests.get(url, cookies=cookies)# 獲取tokentoken = re.findall(r"token=(\d+)", str(response.url))[0]# 請求頭信息headers = { "Referer": "https://mp.weixin.qq.com/cgi-b ... ot%3B + token + "&lang=zh_CN", "Host": "mp.weixin.qq.com", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",}# 遍歷指定頁(yè)數的文章for i in range(1, 5, 1): begin = (i - 1) * 5 # 獲取文章列表 requestUrl = "https://mp.weixin.qq.com/cgi-b ... 2Bstr(begin)+"&count=5&fakeid=要爬取公眾號的fakeid&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1" search_response = requests.get(requestUrl, cookies=cookies, headers=headers) # 獲取 JSON 格式的列表信息 re_text = search_response.json() list = re_text.get("app_msg_list") # 遍歷文章列表 for j in list: # 文章鏈接 url = j["link"] # 文章標題 title = j["title"] print(url) # 等待 8 秒,避免請求過(guò)于頻繁 time.sleep(8)
保存
通過(guò)文章list信息,我們可以得到文章公眾號的鏈接、標題等信息,然后我們可以根據文章使用微信模塊獲取文章html格式信息關(guān)聯(lián)。模塊安裝使用pip install wechatsogou就可以了。
這里需要注意的是,我們通過(guò)微信模塊獲取的html信息會(huì )存在一些問(wèn)題。有兩個(gè)主要問(wèn)題。一是文章的html信息不全,需要自己補;另一個(gè)得到。 html 信息中可能有一些 CSS 樣式?jīng)]有帶過(guò)來(lái)。對于這個(gè)問(wèn)題,我們可以先通過(guò)瀏覽器的開(kāi)發(fā)者工具獲取樣式,然后手動(dòng)添加。代碼實(shí)現如下:
# url:文章鏈接,title:文章標題def save2html(url, title): # captcha_break_time 為驗證碼輸入錯誤的重試次數,默認為 1 ws_api = wechatsogou.WechatSogouAPI(captcha_break_time = 3) content_info = ws_api.get_article_content(url) html = f''' {title} {title} {content_info['content_html']} ''' with open(title + '.html', "w", encoding="utf-8") as file: file.write('%s\n'%html)
上面代碼中的my.css文件存儲了一些沒(méi)有帶過(guò)來(lái)的CSS樣式信息。
用瀏覽器打開(kāi)公眾號文章的html文件看看效果:
通過(guò)上面的顯示結果可以看出,我們保存的html文件的顯示效果還不錯。
參考:
結束
?

?
querylist采集微信公眾號文章信息,關(guān)鍵字采集文章標題和文章大綱
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 184 次瀏覽 ? 2021-08-15 23:10
querylist采集微信公眾號文章信息,關(guān)鍵字采集公眾號文章標題和文章大綱,再采集公眾號用戶(hù)數據,回流至redis,進(jìn)行用戶(hù)瀏覽記錄存儲,再與公眾號以及用戶(hù)數據進(jìn)行相應匹配得到用戶(hù)畫(huà)像。
建議先去公眾號關(guān)注一下,然后給公眾號發(fā)送“查詢(xún)”功能,就可以查到公眾號標簽下全部微信文章的標題、發(fā)布時(shí)間、閱讀數、分享數、歷史閱讀量和轉發(fā)量。
我在開(kāi)發(fā)公眾號的時(shí)候參考了一些文章中描述的,比如如果查詢(xún)公眾號里的某篇文章閱讀次數,或者是歷史消息數(微信的功能實(shí)現中,和歷史消息之間的一定距離,微信會(huì )給出一個(gè)標記),或者是文章分享量等等。原理大致就是公眾號要有一個(gè)redis服務(wù)端與公眾號相對應(如果你的目的是簡(jiǎn)單查詢(xún)公眾號里內容的一個(gè)收藏功能,可以換成redisconnect),所以先解決你redis服務(wù)端如何與公眾號服務(wù)端連接,然后再用服務(wù)端接口與session相互傳遞數據即可。
你可以先在公眾號發(fā)布文章時(shí),用代碼獲取到該公眾號的用戶(hù),發(fā)送給redis去存儲。至于以后使用,可以直接通過(guò)session去相互傳遞用戶(hù)信息就可以了。
這位大神的文章!微信公眾號公眾號的數據存儲機制是如何的?
公眾號推送文章的時(shí)候,會(huì )在數據庫中隨機選取一條數據進(jìn)行緩存,并且設置一個(gè)時(shí)間間隔來(lái)判斷當前數據庫的數據來(lái)源,緩存到數據庫中的數據是定時(shí)更新的, 查看全部
querylist采集微信公眾號文章信息,關(guān)鍵字采集文章標題和文章大綱
querylist采集微信公眾號文章信息,關(guān)鍵字采集公眾號文章標題和文章大綱,再采集公眾號用戶(hù)數據,回流至redis,進(jìn)行用戶(hù)瀏覽記錄存儲,再與公眾號以及用戶(hù)數據進(jìn)行相應匹配得到用戶(hù)畫(huà)像。
建議先去公眾號關(guān)注一下,然后給公眾號發(fā)送“查詢(xún)”功能,就可以查到公眾號標簽下全部微信文章的標題、發(fā)布時(shí)間、閱讀數、分享數、歷史閱讀量和轉發(fā)量。
我在開(kāi)發(fā)公眾號的時(shí)候參考了一些文章中描述的,比如如果查詢(xún)公眾號里的某篇文章閱讀次數,或者是歷史消息數(微信的功能實(shí)現中,和歷史消息之間的一定距離,微信會(huì )給出一個(gè)標記),或者是文章分享量等等。原理大致就是公眾號要有一個(gè)redis服務(wù)端與公眾號相對應(如果你的目的是簡(jiǎn)單查詢(xún)公眾號里內容的一個(gè)收藏功能,可以換成redisconnect),所以先解決你redis服務(wù)端如何與公眾號服務(wù)端連接,然后再用服務(wù)端接口與session相互傳遞數據即可。
你可以先在公眾號發(fā)布文章時(shí),用代碼獲取到該公眾號的用戶(hù),發(fā)送給redis去存儲。至于以后使用,可以直接通過(guò)session去相互傳遞用戶(hù)信息就可以了。
這位大神的文章!微信公眾號公眾號的數據存儲機制是如何的?
公眾號推送文章的時(shí)候,會(huì )在數據庫中隨機選取一條數據進(jìn)行緩存,并且設置一個(gè)時(shí)間間隔來(lái)判斷當前數據庫的數據來(lái)源,緩存到數據庫中的數據是定時(shí)更新的,
一個(gè)好的公眾號爬蟲(chóng)將內容抓取保存下來(lái)慢慢賞析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 110 次瀏覽 ? 2021-08-15 19:09
有時(shí)候我們會(huì )遇到一個(gè)很好的公眾號,里面的每一篇文章都值得反復閱讀。這時(shí)候我們就可以使用公眾號爬蟲(chóng)抓取并保存內容,慢慢欣賞。
安裝 Fiddler
Fiddler的下載地址為:安裝完成后,確保手機和電腦的網(wǎng)絡(luò )是同一個(gè)局域網(wǎng)。
Finder 配置
點(diǎn)擊工具>>選項>>連接面板,參考下圖配置,Fiddler的默認端口是8888,如果8888端口被占用,可以修改為其他端口。
點(diǎn)擊工具>>選項>>HTTPS面板,參考下圖進(jìn)行配置
安卓手機配置
進(jìn)入WLAN設置,選擇當前局域網(wǎng)的WIFI設置,代理設置為手動(dòng),代理服務(wù)器主機名為Finder,右上角點(diǎn)擊在線(xiàn),端口號為8888。
在手機瀏覽器中訪(fǎng)問(wèn)配置的地址:8888,顯示Fiddler Echo Service時(shí),手機配置成功。
為了讓 Finddler 攔截 HTTPS 請求,必須在手機中安裝 CA 證書(shū)。在 :8888 中,單擊 FiddlerRoot 證書(shū)下載并安裝證書(shū)。至此配置工作完成。
微信歷史頁(yè)面
以【騰旭大神網(wǎng)】為例,點(diǎn)擊【上海新聞】菜單的二級菜單【歷史新聞】。
觀(guān)察 Fiddler 的變化。此時(shí),左側窗口中會(huì )陸續出現多個(gè)URL連接地址。這是 Fiddler 截獲的 Android 請求。
Result:服務(wù)器的響應結果 Protocol:請求協(xié)議,微信協(xié)議都是HTTPS,所以需要在手機和PC端安裝證書(shū)。 HOST: 主機名 URL: URL 地址
以 .com/mp/profile_ext?action=home... 開(kāi)頭的 URL 之一正是我們所需要的。點(diǎn)擊右側的Inspectors面板,然后點(diǎn)擊下方的Headers和WebView面板,會(huì )出現如下圖案
標題面板
Request Headers:請求行,收錄請求方法、請求地址、等待C??lient的請求協(xié)議、Cookies:請求頭
WebView 面板
WebView面板顯示服務(wù)器返回的HTML代碼的渲染結果,Textview面板顯示服務(wù)器返回的HTML源代碼
獲取歷史頁(yè)面
在上一節中,公眾號消息歷史頁(yè)面已經(jīng)可以在 Fiddler 的 WebView 面板中顯示。本節使用Python抓取歷史頁(yè)面。創(chuàng )建一個(gè)名為wxcrawler.py的腳本,我們需要URL地址和HEADER請求頭來(lái)抓取頁(yè)面,直接從Finder中復制
將標頭轉換為 Json
# coding:utf-8
import requests
class WxCrawler(object):
# 復制出來(lái)的 Headers,注意這個(gè) x-wechat-key,有時(shí)間限制,會(huì )過(guò)期。當返回的內容出現 驗證 的情況,就需要換 x-wechat-key 了
headers = """Connection: keep-alive
x-wechat-uin: MTY4MTI3NDIxNg%3D%3D
x-wechat-key: 5ab2dd82e79bc5343ac5fb7fd20d72509db0ee1772b1043c894b24d441af288ae942feb4cfb4d234f00a4a5ab88c5b625d415b83df4b536d99befc096448d80cfd5a7fcd33380341aa592d070b1399a1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 10; GM1900 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 XWEB/992 MMWEBSDK/191102 Mobile Safari/537.36 MMWEBID/7220 MicroMessenger/7.0.9.1560(0x27000933) Process/toolsmp NetType/WIFI Language/zh_CN ABI/arm64
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/wxpic,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en-US;q=0.9
Cookie: wxuin=1681274216; devicetype=android-29; version=27000933; lang=zh_CN; pass_ticket=JvAJfzySl6uLWYdYwzyQ+4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X+T6K; rewardsn=; wxtokenkey=777; wap_sid2=COjq2KEGElxBTmotQWtVY2Iwb3BZRkIzd0Y0SnpaUG1HNTQ0SDA4UGJOZi1kaFdFbkl1MHUyYkRKX2xiWFU5VVhDNXBkQlY0U0pRXzlCZW9qZ29oYW9DWmZYOTdmQTBFQUFBfjD+hInvBTgNQJVO
X-Requested-With: com.tencent.mm"""
url = "https://mp.weixin.qq .com/mp/profile_ext?action=home&__biz=MjEwNDI4NTA2MQ==&scene=123&devicetype=android-29&version=27000933&lang=zh_CN&nettype=WIFI&a8scene=7&session_us=wxid_2574365742721&pass_ticket=JvAJfzySl6uLWYdYwzyQ%2B4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X%2BT6K&wx_header=1"
# 將 Headers 轉換為 字典
def header_to_dict(self):
headers = self.headers.split("\n")
headers_dict = dict()
for h in headers:
k,v = h.split(":")
headers_dict[k.strip()] = v.strip()
return headers_dict;
def run(self):
headers = self.header_to_dict()
response = requests.get(self.url, headers=headers, verify=False)
print(response.text)
if __name__ == "__main__":
wx = WxCrawler()
wx.run()
下圖是控制臺打印的內容,其中JavaScript中變量msgList的值就是需要的內容
下一步是提取msgList的內容,使用正則表達式提取內容,返回一個(gè)文章list
import re
import html
import json
def article_list(self, context):
rex = "msgList = '({.*?})'"
pattern = re.compile(pattern=rex, flags=re.S)
match = pattern.search(context)
if match:
data = match.group(1)
data = html.unescape(data)
data = json.loads(data)
articles = data.get("list")
return articles
以下是解析msgList的結果
title:文章title content_url:文章link source_url:原鏈接,可能為空 摘要:摘要封面:封面圖片 datetime:推送時(shí)間
其他內容存儲在 multi_app_msg_item_list 中
{'comm_msg_info':
{
'id': 1000033457,
'type': 49,
'datetime': 1575101627,
'fakeid': '2104285061',
'status': 2,
'content': ''
},
'app_msg_ext_info':
{
'title': '快查手機!5000多張人臉照正被賤賣(mài),數據曝光令人觸目驚心!',
'digest': '誰(shuí)有權收集人臉信息?',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=1&sn=3e4c8eb35abb1b09a4077064ba0c44c8&chksm=4ea8211079dfa8065435409f4d3d3538ad28ddc197063a7e1820dafb9ee23beefca59c3b32d4&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/G8vkERUJibkstwkIvXB960sMOyQdYF2x2qibTxAIq2eUljRbB6zqBq6ziaiaVqm8GtEWticE6zAYGUYqKJ3SMuvv1EQ\\/0?wx_fmt=jpeg',
'subtype': 9,
'is_multi': 1,
'multi_app_msg_item_list':
[{
'title': '先有雞還是先有蛋?6.1億年前的胚胎化石揭曉了',
'digest': '解決了困擾大申君20多年的問(wèn)題',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=2&sn=07b95d31efa9f56d460a16bca817f30d&chksm=4ea8211079dfa8068f42bf0e5df076a95ee3c24cab71294632fe587bcc9238c1a7fb7cd9629b&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/yl6JkZAE3S92BESibpZgTPE1BcBhSLiaGOgpgVicaLdkIXGExe3mYdyVkE2SDXL1x2lFxldeXu8qXQYwtnx9vibibzQ\\/0?wx_fmt=jpeg',
'author': '',
'copyright_stat': 100,
'del_flag': 1,
'item_show_type': 0,
'audio_fileid': 0,
'duration': 0,
'play_url': '',
'malicious_title_reason_id': 0,
'malicious_content_type': 0
},
{
'title': '外交部驚現“李佳琦”!網(wǎng)友直呼:“OMG被種草了!”',
'digest': '種草了!',
'content': '', ...}
...]
獲取單個(gè)頁(yè)面
在上一節中,我們可以得到app_msg_ext_info中的content_url地址,需要從comm_msg_info的不規則Json中獲取。這是使用demjson模塊完成不規則的comm_msg_info。
安裝 demjson 模塊
pip3 install demjson
import demjson
# 獲取單個(gè)文章的URL
content_url_array = []
def content_url(self, articles):
content_url = []
for a in articles:
a = str(a).replace("\/", "/")
a = demjson.decode(a)
content_url_array.append(a['app_msg_ext_info']["content_url"])
# 取更多的
for multi in a['app_msg_ext_info']["multi_app_msg_item_list"]:
self.content_url_array.append(multi['content_url'])
return content_url
獲取單個(gè)文章的地址后,使用requests.get()函數獲取HTML頁(yè)面并解析
# 解析單個(gè)文章
def parse_article(self, headers, content_url):
for i in content_url:
content_response = requests.get(i, headers=headers, verify=False)
with open("wx.html", "wb") as f:
f.write(content_response.content)
html = open("wx.html", encoding="utf-8").read()
soup_body = BeautifulSoup(html, "html.parser")
context = soup_body.find('div', id = 'js_content').text.strip()
print(context)
所有歷史文章
當你向下滑動(dòng)歷史消息時(shí),出現Loading...這是公眾號正在翻頁(yè)的歷史消息。查Fiddler,公眾號請求的地址是.com/mp/profile_ext? action=getmsg&__biz...
翻頁(yè)請求地址返回結果,一般可以分析。
ret:是否成功,0代表成功msg_count:每頁(yè)的條目數 can_msg_continue:是否繼續翻頁(yè),1代表繼續翻頁(yè)general_msg_list:數據,包括標題、文章地址等信息
def page(self, headers):
response = requests.get(self.page_url, headers=headers, verify=False)
result = response.json()
if result.get("ret") == 0:
msg_list = result.get("general_msg_list")
msg_list = demjson.decode(msg_list)
self.content_url(msg_list["list"])
#遞歸
self.page(headers)
else:
print("無(wú)法獲取內容")
總結
這里已經(jīng)爬取了公眾號的內容,但尚未爬取單個(gè)文章的閱讀和查看數量。想想看,如何抓取這些內容變化?
示例代碼:
PS:公眾號內回復:Python,可以進(jìn)入Python新手學(xué)習交流群,一起
-END- 查看全部
一個(gè)好的公眾號爬蟲(chóng)將內容抓取保存下來(lái)慢慢賞析
有時(shí)候我們會(huì )遇到一個(gè)很好的公眾號,里面的每一篇文章都值得反復閱讀。這時(shí)候我們就可以使用公眾號爬蟲(chóng)抓取并保存內容,慢慢欣賞。
安裝 Fiddler
Fiddler的下載地址為:安裝完成后,確保手機和電腦的網(wǎng)絡(luò )是同一個(gè)局域網(wǎng)。
Finder 配置
點(diǎn)擊工具>>選項>>連接面板,參考下圖配置,Fiddler的默認端口是8888,如果8888端口被占用,可以修改為其他端口。
點(diǎn)擊工具>>選項>>HTTPS面板,參考下圖進(jìn)行配置
安卓手機配置
進(jìn)入WLAN設置,選擇當前局域網(wǎng)的WIFI設置,代理設置為手動(dòng),代理服務(wù)器主機名為Finder,右上角點(diǎn)擊在線(xiàn),端口號為8888。
在手機瀏覽器中訪(fǎng)問(wèn)配置的地址:8888,顯示Fiddler Echo Service時(shí),手機配置成功。
為了讓 Finddler 攔截 HTTPS 請求,必須在手機中安裝 CA 證書(shū)。在 :8888 中,單擊 FiddlerRoot 證書(shū)下載并安裝證書(shū)。至此配置工作完成。
微信歷史頁(yè)面
以【騰旭大神網(wǎng)】為例,點(diǎn)擊【上海新聞】菜單的二級菜單【歷史新聞】。
觀(guān)察 Fiddler 的變化。此時(shí),左側窗口中會(huì )陸續出現多個(gè)URL連接地址。這是 Fiddler 截獲的 Android 請求。
Result:服務(wù)器的響應結果 Protocol:請求協(xié)議,微信協(xié)議都是HTTPS,所以需要在手機和PC端安裝證書(shū)。 HOST: 主機名 URL: URL 地址
以 .com/mp/profile_ext?action=home... 開(kāi)頭的 URL 之一正是我們所需要的。點(diǎn)擊右側的Inspectors面板,然后點(diǎn)擊下方的Headers和WebView面板,會(huì )出現如下圖案
標題面板
Request Headers:請求行,收錄請求方法、請求地址、等待C??lient的請求協(xié)議、Cookies:請求頭
WebView 面板
WebView面板顯示服務(wù)器返回的HTML代碼的渲染結果,Textview面板顯示服務(wù)器返回的HTML源代碼
獲取歷史頁(yè)面
在上一節中,公眾號消息歷史頁(yè)面已經(jīng)可以在 Fiddler 的 WebView 面板中顯示。本節使用Python抓取歷史頁(yè)面。創(chuàng )建一個(gè)名為wxcrawler.py的腳本,我們需要URL地址和HEADER請求頭來(lái)抓取頁(yè)面,直接從Finder中復制
將標頭轉換為 Json
# coding:utf-8
import requests
class WxCrawler(object):
# 復制出來(lái)的 Headers,注意這個(gè) x-wechat-key,有時(shí)間限制,會(huì )過(guò)期。當返回的內容出現 驗證 的情況,就需要換 x-wechat-key 了
headers = """Connection: keep-alive
x-wechat-uin: MTY4MTI3NDIxNg%3D%3D
x-wechat-key: 5ab2dd82e79bc5343ac5fb7fd20d72509db0ee1772b1043c894b24d441af288ae942feb4cfb4d234f00a4a5ab88c5b625d415b83df4b536d99befc096448d80cfd5a7fcd33380341aa592d070b1399a1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 10; GM1900 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 XWEB/992 MMWEBSDK/191102 Mobile Safari/537.36 MMWEBID/7220 MicroMessenger/7.0.9.1560(0x27000933) Process/toolsmp NetType/WIFI Language/zh_CN ABI/arm64
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/wxpic,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en-US;q=0.9
Cookie: wxuin=1681274216; devicetype=android-29; version=27000933; lang=zh_CN; pass_ticket=JvAJfzySl6uLWYdYwzyQ+4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X+T6K; rewardsn=; wxtokenkey=777; wap_sid2=COjq2KEGElxBTmotQWtVY2Iwb3BZRkIzd0Y0SnpaUG1HNTQ0SDA4UGJOZi1kaFdFbkl1MHUyYkRKX2xiWFU5VVhDNXBkQlY0U0pRXzlCZW9qZ29oYW9DWmZYOTdmQTBFQUFBfjD+hInvBTgNQJVO
X-Requested-With: com.tencent.mm"""
url = "https://mp.weixin.qq .com/mp/profile_ext?action=home&__biz=MjEwNDI4NTA2MQ==&scene=123&devicetype=android-29&version=27000933&lang=zh_CN&nettype=WIFI&a8scene=7&session_us=wxid_2574365742721&pass_ticket=JvAJfzySl6uLWYdYwzyQ%2B4OqrqiZ2zfaI4F2OCVR7omYOmTjYNKalCFbr75X%2BT6K&wx_header=1"
# 將 Headers 轉換為 字典
def header_to_dict(self):
headers = self.headers.split("\n")
headers_dict = dict()
for h in headers:
k,v = h.split(":")
headers_dict[k.strip()] = v.strip()
return headers_dict;
def run(self):
headers = self.header_to_dict()
response = requests.get(self.url, headers=headers, verify=False)
print(response.text)
if __name__ == "__main__":
wx = WxCrawler()
wx.run()
下圖是控制臺打印的內容,其中JavaScript中變量msgList的值就是需要的內容
下一步是提取msgList的內容,使用正則表達式提取內容,返回一個(gè)文章list
import re
import html
import json
def article_list(self, context):
rex = "msgList = '({.*?})'"
pattern = re.compile(pattern=rex, flags=re.S)
match = pattern.search(context)
if match:
data = match.group(1)
data = html.unescape(data)
data = json.loads(data)
articles = data.get("list")
return articles
以下是解析msgList的結果
title:文章title content_url:文章link source_url:原鏈接,可能為空 摘要:摘要封面:封面圖片 datetime:推送時(shí)間
其他內容存儲在 multi_app_msg_item_list 中
{'comm_msg_info':
{
'id': 1000033457,
'type': 49,
'datetime': 1575101627,
'fakeid': '2104285061',
'status': 2,
'content': ''
},
'app_msg_ext_info':
{
'title': '快查手機!5000多張人臉照正被賤賣(mài),數據曝光令人觸目驚心!',
'digest': '誰(shuí)有權收集人臉信息?',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=1&sn=3e4c8eb35abb1b09a4077064ba0c44c8&chksm=4ea8211079dfa8065435409f4d3d3538ad28ddc197063a7e1820dafb9ee23beefca59c3b32d4&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/G8vkERUJibkstwkIvXB960sMOyQdYF2x2qibTxAIq2eUljRbB6zqBq6ziaiaVqm8GtEWticE6zAYGUYqKJ3SMuvv1EQ\\/0?wx_fmt=jpeg',
'subtype': 9,
'is_multi': 1,
'multi_app_msg_item_list':
[{
'title': '先有雞還是先有蛋?6.1億年前的胚胎化石揭曉了',
'digest': '解決了困擾大申君20多年的問(wèn)題',
'content': '',
'fileid': 0,
'content_url': 'http:\\/\\/mp.weixin.qq.com\\/s?__biz=MjEwNDI4NTA2MQ==&mid=2651824634&idx=2&sn=07b95d31efa9f56d460a16bca817f30d&chksm=4ea8211079dfa8068f42bf0e5df076a95ee3c24cab71294632fe587bcc9238c1a7fb7cd9629b&scene=27#wechat_redirect',
'source_url': '',
'cover': 'http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/yl6JkZAE3S92BESibpZgTPE1BcBhSLiaGOgpgVicaLdkIXGExe3mYdyVkE2SDXL1x2lFxldeXu8qXQYwtnx9vibibzQ\\/0?wx_fmt=jpeg',
'author': '',
'copyright_stat': 100,
'del_flag': 1,
'item_show_type': 0,
'audio_fileid': 0,
'duration': 0,
'play_url': '',
'malicious_title_reason_id': 0,
'malicious_content_type': 0
},
{
'title': '外交部驚現“李佳琦”!網(wǎng)友直呼:“OMG被種草了!”',
'digest': '種草了!',
'content': '', ...}
...]
獲取單個(gè)頁(yè)面
在上一節中,我們可以得到app_msg_ext_info中的content_url地址,需要從comm_msg_info的不規則Json中獲取。這是使用demjson模塊完成不規則的comm_msg_info。
安裝 demjson 模塊
pip3 install demjson
import demjson
# 獲取單個(gè)文章的URL
content_url_array = []
def content_url(self, articles):
content_url = []
for a in articles:
a = str(a).replace("\/", "/")
a = demjson.decode(a)
content_url_array.append(a['app_msg_ext_info']["content_url"])
# 取更多的
for multi in a['app_msg_ext_info']["multi_app_msg_item_list"]:
self.content_url_array.append(multi['content_url'])
return content_url
獲取單個(gè)文章的地址后,使用requests.get()函數獲取HTML頁(yè)面并解析
# 解析單個(gè)文章
def parse_article(self, headers, content_url):
for i in content_url:
content_response = requests.get(i, headers=headers, verify=False)
with open("wx.html", "wb") as f:
f.write(content_response.content)
html = open("wx.html", encoding="utf-8").read()
soup_body = BeautifulSoup(html, "html.parser")
context = soup_body.find('div', id = 'js_content').text.strip()
print(context)
所有歷史文章
當你向下滑動(dòng)歷史消息時(shí),出現Loading...這是公眾號正在翻頁(yè)的歷史消息。查Fiddler,公眾號請求的地址是.com/mp/profile_ext? action=getmsg&__biz...
翻頁(yè)請求地址返回結果,一般可以分析。
ret:是否成功,0代表成功msg_count:每頁(yè)的條目數 can_msg_continue:是否繼續翻頁(yè),1代表繼續翻頁(yè)general_msg_list:數據,包括標題、文章地址等信息
def page(self, headers):
response = requests.get(self.page_url, headers=headers, verify=False)
result = response.json()
if result.get("ret") == 0:
msg_list = result.get("general_msg_list")
msg_list = demjson.decode(msg_list)
self.content_url(msg_list["list"])
#遞歸
self.page(headers)
else:
print("無(wú)法獲取內容")
總結
這里已經(jīng)爬取了公眾號的內容,但尚未爬取單個(gè)文章的閱讀和查看數量。想想看,如何抓取這些內容變化?
示例代碼:
PS:公眾號內回復:Python,可以進(jìn)入Python新手學(xué)習交流群,一起
-END-
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的處理思路
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 181 次瀏覽 ? 2021-08-14 19:05
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的公眾號一樣。2.重定向的處理思路是用jwttokenhttp/1.1,get/post的cookieheader分別替換成2.0\2.1\2.2的cookie,所以店鋪公眾號不用對齊參數直接對接會(huì )成功,要是客戶(hù)端修改了店鋪公眾號的cookie則難通過(guò)querylist進(jìn)行對齊;實(shí)際應用中要怎么操作對齊參數得根據實(shí)際需求而定。
支付寶和商戶(hù)開(kāi)放平臺可以互通,要么通過(guò)瀏覽器,要么通過(guò)querylistapi;阿里云方案可能有問(wèn)題(感覺(jué)沒(méi)通過(guò)審核),最簡(jiǎn)單的就是通過(guò)collection,在api后面加參數querylist:[2.1]就是2.1的公眾號端格式啊,
只能用querylist,不能用cookie,除非你寫(xiě)cookie主動(dòng)對接。上alifixion通過(guò)客戶(hù)端post獲取cookie發(fā)送給公眾號。前端通過(guò)網(wǎng)頁(yè)版發(fā)送數據,要通過(guò)cookie統計,目前支付寶的e-cookie抓取控制還不夠完善,有些數據抓取不到。所以只能用querylist。
看alibaba需求來(lái),比如天貓要完全對接聯(lián)盟,是要來(lái)回一個(gè)個(gè)查,如果只是對接個(gè)聯(lián)盟,那么不需要做對齊。如果雙方協(xié)議不一樣,你想最終相互對齊,那么就要再配置一遍querylist。
從alib申請連接,按照常規請求都可以,順便補充一下:querylist的數據結構是什么, 查看全部
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的處理思路
querylist采集微信公眾號文章數據,其他對齊參數對店鋪的公眾號一樣。2.重定向的處理思路是用jwttokenhttp/1.1,get/post的cookieheader分別替換成2.0\2.1\2.2的cookie,所以店鋪公眾號不用對齊參數直接對接會(huì )成功,要是客戶(hù)端修改了店鋪公眾號的cookie則難通過(guò)querylist進(jìn)行對齊;實(shí)際應用中要怎么操作對齊參數得根據實(shí)際需求而定。
支付寶和商戶(hù)開(kāi)放平臺可以互通,要么通過(guò)瀏覽器,要么通過(guò)querylistapi;阿里云方案可能有問(wèn)題(感覺(jué)沒(méi)通過(guò)審核),最簡(jiǎn)單的就是通過(guò)collection,在api后面加參數querylist:[2.1]就是2.1的公眾號端格式啊,
只能用querylist,不能用cookie,除非你寫(xiě)cookie主動(dòng)對接。上alifixion通過(guò)客戶(hù)端post獲取cookie發(fā)送給公眾號。前端通過(guò)網(wǎng)頁(yè)版發(fā)送數據,要通過(guò)cookie統計,目前支付寶的e-cookie抓取控制還不夠完善,有些數據抓取不到。所以只能用querylist。
看alibaba需求來(lái),比如天貓要完全對接聯(lián)盟,是要來(lái)回一個(gè)個(gè)查,如果只是對接個(gè)聯(lián)盟,那么不需要做對齊。如果雙方協(xié)議不一樣,你想最終相互對齊,那么就要再配置一遍querylist。
從alib申請連接,按照常規請求都可以,順便補充一下:querylist的數據結構是什么,
一下如何使用Python構建一個(gè)個(gè)人微信公眾號的電影搜索功能
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 221 次瀏覽 ? 2021-08-11 06:02
今天介紹一下如何使用Python為個(gè)人微信公眾號搭建電影搜索功能。本文文章將涉及:
要練習文章本文的所有內容,您需要擁有以下資源:
如果不使用注冊的域名和個(gè)人微信公眾號,可以申請微信官方平臺測試號使用。流程類(lèi)似,申請地址為:
現在我們開(kāi)始輸入文本。
1. 創(chuàng )建和部署 Django 應用程序
在這個(gè)個(gè)人公眾號電影搜索器中,一個(gè)可靠的網(wǎng)絡(luò )服務(wù)是連接電影資源數據和對接微信公眾號的關(guān)鍵。電影資源爬取采集后,需要存入數據庫。接收和回復還取決于 Web 應用程序提供的服務(wù)。所以我們首先需要創(chuàng )建一個(gè) Web 應用程序。 Python中有許多Web框架。這里我們選擇Django1.10,功能齊全,功能強大。沒(méi)有安裝Django的同學(xué)使用pip命令安裝Django模塊:
pip install django==1.10
1.1 創(chuàng )建 Django 項目
我們服務(wù)器上的當前目錄如下所示:
使用Django的django-admin在這個(gè)目錄下創(chuàng )建一個(gè)Django項目:
django-admin startproject wxmovie
這樣我們的文件夾目錄下多了一個(gè)叫wxmovie的文件夾,里面有一個(gè)manage.py文件和一個(gè)wxmovie文件夾:
1.2 創(chuàng )建 Django 應用程序
Django項目創(chuàng )建完成后,我們進(jìn)入項目路徑,使用其manage.py文件繼續創(chuàng )建Django應用:
python3 manage.py startapp movie
此時(shí)wxmovie項目下多了一個(gè)名為movie的文件夾,里面收錄了電影應用的所有文件:
1.3 配置 Django 項目
Django 項目-wxmovie 和它的應用影片創(chuàng )建完成后,讓我們對這個(gè)項目做一些基本的配置。打開(kāi)/wxmovie/wxmovie/目錄下的settings.py文件。
將應用影片添加到 wxmovie 項目中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'movie',
]
在項目根路徑下創(chuàng )建一個(gè)名為template的文件夾作為django模板目錄,并將此路徑添加到TEMPLATES中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(os.path.split(os.path.dirname(__file__))[0],'template'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
修改項目的數據庫配置為MySQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '****',
'USER': '****',
'PASSWORD': '***',
'HOST': '',
'PORT': '3306',
}
}
修改項目時(shí)區的語(yǔ)言配置:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
因為我們使用的是Python3,所以需要在/wxmovie/wxmovie/目錄下的\__init__.py文件中加入如下代碼,這樣我們才能在項目中使用MySQL(需要先安裝pymysql模塊): 查看全部
一下如何使用Python構建一個(gè)個(gè)人微信公眾號的電影搜索功能
今天介紹一下如何使用Python為個(gè)人微信公眾號搭建電影搜索功能。本文文章將涉及:
要練習文章本文的所有內容,您需要擁有以下資源:
如果不使用注冊的域名和個(gè)人微信公眾號,可以申請微信官方平臺測試號使用。流程類(lèi)似,申請地址為:
現在我們開(kāi)始輸入文本。
1. 創(chuàng )建和部署 Django 應用程序
在這個(gè)個(gè)人公眾號電影搜索器中,一個(gè)可靠的網(wǎng)絡(luò )服務(wù)是連接電影資源數據和對接微信公眾號的關(guān)鍵。電影資源爬取采集后,需要存入數據庫。接收和回復還取決于 Web 應用程序提供的服務(wù)。所以我們首先需要創(chuàng )建一個(gè) Web 應用程序。 Python中有許多Web框架。這里我們選擇Django1.10,功能齊全,功能強大。沒(méi)有安裝Django的同學(xué)使用pip命令安裝Django模塊:
pip install django==1.10
1.1 創(chuàng )建 Django 項目
我們服務(wù)器上的當前目錄如下所示:

使用Django的django-admin在這個(gè)目錄下創(chuàng )建一個(gè)Django項目:
django-admin startproject wxmovie

這樣我們的文件夾目錄下多了一個(gè)叫wxmovie的文件夾,里面有一個(gè)manage.py文件和一個(gè)wxmovie文件夾:

1.2 創(chuàng )建 Django 應用程序
Django項目創(chuàng )建完成后,我們進(jìn)入項目路徑,使用其manage.py文件繼續創(chuàng )建Django應用:
python3 manage.py startapp movie

此時(shí)wxmovie項目下多了一個(gè)名為movie的文件夾,里面收錄了電影應用的所有文件:

1.3 配置 Django 項目
Django 項目-wxmovie 和它的應用影片創(chuàng )建完成后,讓我們對這個(gè)項目做一些基本的配置。打開(kāi)/wxmovie/wxmovie/目錄下的settings.py文件。
將應用影片添加到 wxmovie 項目中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'movie',
]
在項目根路徑下創(chuàng )建一個(gè)名為template的文件夾作為django模板目錄,并將此路徑添加到TEMPLATES中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(os.path.split(os.path.dirname(__file__))[0],'template'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
修改項目的數據庫配置為MySQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '****',
'USER': '****',
'PASSWORD': '***',
'HOST': '',
'PORT': '3306',
}
}
修改項目時(shí)區的語(yǔ)言配置:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
因為我們使用的是Python3,所以需要在/wxmovie/wxmovie/目錄下的\__init__.py文件中加入如下代碼,這樣我們才能在項目中使用MySQL(需要先安裝pymysql模塊):
Q&;A(.39)模擬用戶(hù)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 113 次瀏覽 ? 2021-08-09 03:29
一.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 = {}
瀏覽器 = webdriver.Chrome()
browser.get('#39;)
睡覺(jué)(3)
browser.delete_all_cookies()
睡覺(jué)(2)
#點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
睡覺(jué)(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(密碼)
睡覺(jué)(2)
#點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
睡覺(jué)(2)
#微信登錄驗證
print('請掃描二維碼')
睡覺(jué)(20)
#刷新當前網(wǎng)頁(yè)
browser.get('#39;)
睡覺(jué)(5)
#獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
#獲取當前cookie
cookies = browser.get_cookies()
對于 cookie 中的項目:
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è)字典來(lái)存儲數據
paramdict = {}
對于 paramList 中的項目:
paramdict[item.split('=')[0]] = item.split('=')[1]
#返回令牌
返回參數['token']
定義一個(gè)登錄方法,里面的參數是登錄賬號和密碼,然后定義一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù),輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,用登錄微信掃一掃即可。
刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token,然后返回。
第二步:
1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
url ='#39;
標題 = {
'HOST':'',
'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 ='#39;
參數 = {
'action':'search_biz',
'開(kāi)始':'0',
'計數':'5',
'query':'搜索公眾號',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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]
1
通過(guò)上面的代碼可以得到對應的公眾號數據
fakeid = list.get('fakeid')
1
通過(guò)上面的代碼可以得到對應的fakeid
2.請求獲取微信公眾號文章接口,獲取我們需要的文章data
appmsg_url ='#39;
params_data = {
'action':'list_ex',
'開(kāi)始':'0',
'計數':'5',
'fakeid':fakeid,
'type': '9',
'查詢(xún)':'',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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í)間,否則賬號很容易被封,獲取不到返回的數據。 查看全部
Q&;A(.39)模擬用戶(hù)
一.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 = {}
瀏覽器 = webdriver.Chrome()
browser.get('#39;)
睡覺(jué)(3)
browser.delete_all_cookies()
睡覺(jué)(2)
#點(diǎn)擊切換到賬號密碼輸入
browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
睡覺(jué)(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(密碼)
睡覺(jué)(2)
#點(diǎn)擊登錄
browser.find_element_by_xpath("//a[@class='btn_login']").click()
睡覺(jué)(2)
#微信登錄驗證
print('請掃描二維碼')
睡覺(jué)(20)
#刷新當前網(wǎng)頁(yè)
browser.get('#39;)
睡覺(jué)(5)
#獲取當前網(wǎng)頁(yè)鏈接
url = browser.current_url
#獲取當前cookie
cookies = browser.get_cookies()
對于 cookie 中的項目:
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è)字典來(lái)存儲數據
paramdict = {}
對于 paramList 中的項目:
paramdict[item.split('=')[0]] = item.split('=')[1]
#返回令牌
返回參數['token']
定義一個(gè)登錄方法,里面的參數是登錄賬號和密碼,然后定義一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù),輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,用登錄微信掃一掃即可。
刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token,然后返回。
第二步:
1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
url ='#39;
標題 = {
'HOST':'',
'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 ='#39;
參數 = {
'action':'search_biz',
'開(kāi)始':'0',
'計數':'5',
'query':'搜索公眾號',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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]
1
通過(guò)上面的代碼可以得到對應的公眾號數據
fakeid = list.get('fakeid')
1
通過(guò)上面的代碼可以得到對應的fakeid
2.請求獲取微信公眾號文章接口,獲取我們需要的文章data
appmsg_url ='#39;
params_data = {
'action':'list_ex',
'開(kāi)始':'0',
'計數':'5',
'fakeid':fakeid,
'type': '9',
'查詢(xún)':'',
'token':令牌,
'lang':'zh_CN',
'f':'json',
'阿賈克斯':'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í)間,否則賬號很容易被封,獲取不到返回的數據。
蘇南大叔講述一下一款國人出品的php庫,叫做querylist
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2021-08-07 00:28
本文開(kāi)頭,蘇南大叔講了一個(gè)中國人出品的PHP庫,叫querylist,可以用來(lái)抓取網(wǎng)絡(luò )數據。這個(gè)查詢(xún)列表類(lèi)似于python下的scrapy。當然,在之前的文章中,蘇南大叔介紹了scrapy crawling。有興趣的可以通過(guò)文末的鏈接了解更多。
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-1)
另外,這個(gè)查詢(xún)列表是基于開(kāi)源庫phpquery的。如果你用過(guò)phpquery,在接下來(lái)的學(xué)習中你會(huì )看到一些類(lèi)似的陰影。如果你沒(méi)用過(guò)phpquery,那你還是可以對比一下jquery,思路都差不多。好了,介紹這么多。如果您有興趣,歡迎查看下一個(gè)查詢(xún)列表系列文章。
蘇南大叔實(shí)驗時(shí)的composer版本是:1.6.5,php版本是7.2.1。
官方網(wǎng)站和安裝要求
Querylist是中國人的作品,其官方網(wǎng)站是:
querylist要求的php版本至少為7.0,可以通過(guò)以下命令查看本地php版本號:
php -v
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-2)
安裝第一步是安裝composer
安裝composer就不描述太多了。 querylist的使用,理論上與composer密切相關(guān)。與composer的使用相關(guān)的文章請參考文末鏈接。如果你已經(jīng)安裝了composer,可以跳過(guò)這一步。
下面介紹的是mac下使用命令行語(yǔ)句安裝composer的例子:
curl -o composer.phar 'https://getcomposer.org/composer.phar'
mv composer.phar /usr/local/bin/composer
chmod 777 /usr/local/bin/composer
相關(guān)鏈接:
第二步是設置全局加速composer的repo庫
這一步不是必須的。如果安裝querylist時(shí)沒(méi)有響應,可以執行該語(yǔ)句。聲明的目的是為了把composer改成快速的國內源碼,類(lèi)似于node下的cnpm。
composer config -g repo.packagist composer https://packagist.phpcomposer.com
第三步,安裝querylist
在空白文件夾下,首先初始化composer項目。
composer init
然后使用composer安裝jaeger/querylist。
composer require jaeger/querylist
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-3)
安裝成功,查看版本號
截至發(fā)稿,使用以下命令查看最新版本的querylist版本號4.0.3。
composer show -i jaeger/querylist
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-4)
介紹示例demo
下面這句話(huà)是官方給出的最簡(jiǎn)單的配置。在此,限于篇幅,蘇南叔不做過(guò)多解釋。
require './vendor/autoload.php';
use QL\QueryList;
$html = array('.two>img:eq(1)','src'),
//采集span標簽中的HTML內容
'other' => array('span','html')
);
$data = QueryList::html($html)
->rules($rules)
->query()
->getData();
print_r($data->all());
使用
是key中的key點(diǎn)。新手經(jīng)常被卡在這里。還有autoload.php,這是composer項目的標準配置。剩下的就是querylist的相關(guān)功能了,下面蘇南叔叔會(huì )詳細介紹。敬請關(guān)注。
require './vendor/autoload.php';
use QL\QueryList;
如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-5)
相關(guān)鏈接匯總
本文中蘇南大叔介紹的querylist與scrapy類(lèi)似。但是querylist是基于php的,對php的忠實(shí)用戶(hù)更具吸引力。
不過(guò),蘇南叔還是給你一個(gè)建議,那就是多嘗試python。在目前的環(huán)境下,看來(lái)python系列還是很有前途的。而且在爬取方面,scrapy 還是比 querylist 有優(yōu)勢。好的,僅此而已。請繼續關(guān)注蘇南叔的后續文字,謝謝閱讀。
[蘋(píng)果]
[添加群組]
【源碼】本文中的代碼片段及相關(guān)軟件,請點(diǎn)擊此處獲取
【絕密】秘籍文章入口,只教給有緣人
查詢(xún)列表 phpquery 查看全部
蘇南大叔講述一下一款國人出品的php庫,叫做querylist
本文開(kāi)頭,蘇南大叔講了一個(gè)中國人出品的PHP庫,叫querylist,可以用來(lái)抓取網(wǎng)絡(luò )數據。這個(gè)查詢(xún)列表類(lèi)似于python下的scrapy。當然,在之前的文章中,蘇南大叔介紹了scrapy crawling。有興趣的可以通過(guò)文末的鏈接了解更多。

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-1)
另外,這個(gè)查詢(xún)列表是基于開(kāi)源庫phpquery的。如果你用過(guò)phpquery,在接下來(lái)的學(xué)習中你會(huì )看到一些類(lèi)似的陰影。如果你沒(méi)用過(guò)phpquery,那你還是可以對比一下jquery,思路都差不多。好了,介紹這么多。如果您有興趣,歡迎查看下一個(gè)查詢(xún)列表系列文章。
蘇南大叔實(shí)驗時(shí)的composer版本是:1.6.5,php版本是7.2.1。
官方網(wǎng)站和安裝要求
Querylist是中國人的作品,其官方網(wǎng)站是:
querylist要求的php版本至少為7.0,可以通過(guò)以下命令查看本地php版本號:
php -v

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-2)
安裝第一步是安裝composer
安裝composer就不描述太多了。 querylist的使用,理論上與composer密切相關(guān)。與composer的使用相關(guān)的文章請參考文末鏈接。如果你已經(jīng)安裝了composer,可以跳過(guò)這一步。
下面介紹的是mac下使用命令行語(yǔ)句安裝composer的例子:
curl -o composer.phar 'https://getcomposer.org/composer.phar'
mv composer.phar /usr/local/bin/composer
chmod 777 /usr/local/bin/composer
相關(guān)鏈接:
第二步是設置全局加速composer的repo庫
這一步不是必須的。如果安裝querylist時(shí)沒(méi)有響應,可以執行該語(yǔ)句。聲明的目的是為了把composer改成快速的國內源碼,類(lèi)似于node下的cnpm。
composer config -g repo.packagist composer https://packagist.phpcomposer.com
第三步,安裝querylist
在空白文件夾下,首先初始化composer項目。
composer init
然后使用composer安裝jaeger/querylist。
composer require jaeger/querylist

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-3)
安裝成功,查看版本號
截至發(fā)稿,使用以下命令查看最新版本的querylist版本號4.0.3。
composer show -i jaeger/querylist

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-4)
介紹示例demo
下面這句話(huà)是官方給出的最簡(jiǎn)單的配置。在此,限于篇幅,蘇南叔不做過(guò)多解釋。
require './vendor/autoload.php';
use QL\QueryList;
$html = array('.two>img:eq(1)','src'),
//采集span標簽中的HTML內容
'other' => array('span','html')
);
$data = QueryList::html($html)
->rules($rules)
->query()
->getData();
print_r($data->all());
使用
是key中的key點(diǎn)。新手經(jīng)常被卡在這里。還有autoload.php,這是composer項目的標準配置。剩下的就是querylist的相關(guān)功能了,下面蘇南叔叔會(huì )詳細介紹。敬請關(guān)注。
require './vendor/autoload.php';
use QL\QueryList;

如何安裝和使用 QueryList,一個(gè) php 數據捕獲庫? (圖5-5)
相關(guān)鏈接匯總
本文中蘇南大叔介紹的querylist與scrapy類(lèi)似。但是querylist是基于php的,對php的忠實(shí)用戶(hù)更具吸引力。
不過(guò),蘇南叔還是給你一個(gè)建議,那就是多嘗試python。在目前的環(huán)境下,看來(lái)python系列還是很有前途的。而且在爬取方面,scrapy 還是比 querylist 有優(yōu)勢。好的,僅此而已。請繼續關(guān)注蘇南叔的后續文字,謝謝閱讀。


[蘋(píng)果]

[添加群組]

【源碼】本文中的代碼片段及相關(guān)軟件,請點(diǎn)擊此處獲取

【絕密】秘籍文章入口,只教給有緣人

查詢(xún)列表 phpquery
幾天的總條數的話(huà)這樣寫(xiě)的,真是太神奇了
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 103 次瀏覽 ? 2021-08-04 03:32
這幾天一直在做一些python項目的開(kāi)發(fā)。我使用了 python 的 ORM 框架 sqlAlchemy。因為對python和sqlAlchemy不熟悉,所以積累了一些小知識點(diǎn)分享給大家。
獲取文章總數
一般情況下,如果我們想知道表的總條目數,sql是這樣寫(xiě)的:
select count(id) from user
這樣我們就可以得到表中項目的總數
如果我想在sqlAlchemy中獲取項目總數應該怎么做?
這種用途,func需要被引用
from sqlalchemy import func
count =session.query(func.count(user.id)).scalar()
如上,我們可以得到數據的數量。
相關(guān)鏈接
截圖
按頁(yè)面搜索
比較簡(jiǎn)單,直接粘貼代碼
我的錯誤
查詢(xún)總條目數時(shí)不使用Func.count()
我是這樣寫(xiě)的
userlist=session.query(user).order_by(user.id.desc())
count=len(list(userlist))
userlist = userlist.limit(pageSize).offset(
(pageIndex-1)*pageSize)
這樣也可以得到數據的個(gè)數。如果數據量很小,你可能沒(méi)有什么感覺(jué)。數據量大的時(shí)候,你會(huì )發(fā)現查詢(xún)數據真的很慢
相當于查詢(xún)數據庫兩次,然后重新計算內存中的條目數和分頁(yè)。
這在大量數據的情況下效率極低 查看全部
幾天的總條數的話(huà)這樣寫(xiě)的,真是太神奇了
這幾天一直在做一些python項目的開(kāi)發(fā)。我使用了 python 的 ORM 框架 sqlAlchemy。因為對python和sqlAlchemy不熟悉,所以積累了一些小知識點(diǎn)分享給大家。
獲取文章總數
一般情況下,如果我們想知道表的總條目數,sql是這樣寫(xiě)的:
select count(id) from user
這樣我們就可以得到表中項目的總數
如果我想在sqlAlchemy中獲取項目總數應該怎么做?
這種用途,func需要被引用
from sqlalchemy import func
count =session.query(func.count(user.id)).scalar()
如上,我們可以得到數據的數量。
相關(guān)鏈接
截圖

按頁(yè)面搜索
比較簡(jiǎn)單,直接粘貼代碼
我的錯誤
查詢(xún)總條目數時(shí)不使用Func.count()
我是這樣寫(xiě)的
userlist=session.query(user).order_by(user.id.desc())
count=len(list(userlist))
userlist = userlist.limit(pageSize).offset(
(pageIndex-1)*pageSize)
這樣也可以得到數據的個(gè)數。如果數據量很小,你可能沒(méi)有什么感覺(jué)。數據量大的時(shí)候,你會(huì )發(fā)現查詢(xún)數據真的很慢
相當于查詢(xún)數據庫兩次,然后重新計算內存中的條目數和分頁(yè)。
這在大量數據的情況下效率極低
與token的代碼與上篇文章銜接起來(lái)代碼的流程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 150 次瀏覽 ? 2021-08-04 00:37
獲取網(wǎng)址
在我們解決cookie和token之前,那我們只需要把這兩個(gè)參數放到請求頭中就可以得到我們想要的
首先搜索公司賬號名稱(chēng)
這里打開(kāi)素材管理,點(diǎn)擊新建圖形素材
點(diǎn)擊超鏈接。轉到此頁(yè)面
在此處提取url、headers和參數并找出更改的參數
random參數是0-1之間的隨機浮點(diǎn)數,query是搜索內容,前面提取token
接下來(lái)我們看看獲取文章的請求和接口
我們對頁(yè)面的分析完成了,接下來(lái)我們開(kāi)始編寫(xiě)代碼,這次的代碼是和上一篇文章的代碼連接起來(lái)的
import time
import json
import random
import csv
from selenium import webdriver
from lxml import html
import requests
import re
# 獲取cookies和token
class C_ookie:
# 初始化
def __init__(self):
self.html = ''
# 獲取cookie
def get_cookie(self):
cooki = {}
url = 'https://mp.weixin.qq.com'
Browner = webdriver.Chrome()
Browner.get(url)
# 獲取賬號輸入框
ID = Browner.find_element_by_name('account')
# 獲取密碼輸入框
PW = Browner.find_element_by_name('password')
# 輸入賬號
#輸入賬號
id =
#輸入密碼
pw =
# id = input('請輸入賬號:')
# pw = input('請輸入密碼:')
ID.send_keys(id)
PW.send_keys(pw)
# 獲取登錄button,點(diǎn)擊登錄
Browner.find_element_by_class_name('btn_login').click()
# 等待掃二維碼
time.sleep(10)
cks = Browner.get_cookies()
for ck in cks:
cooki[ck['name']] = ck['value']
ck1 = json.dumps(cooki)
print(ck1)
with open('ck.txt','w') as f :
f.write(ck1)
f.close()
self.html = Browner.page_source
# 獲取文章
class getEssay:
def __init__(self):
# 獲取cookies
with open('ck.txt','r') as f :
cookie = f.read()
f.close()
self.cookie = json.loads(cookie)
# 獲取token
self.header = {
"HOST": "mp.weixin.qq.com",
"User-Agent": 'Mozilla / 5.0(WindowsNT6.1;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 74.0.3729.131Safari / 537.36'
}
m_url = 'https://mp.weixin.qq.com'
response = requests.get(url=m_url, cookies=self.cookie)
self.token = re.findall(r'token=(\d+)', str(response.url))[0]
# fakeid與name
self.fakeid = []
# 獲取公眾號信息
def getGname(self):
# 請求頭
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 地址
url = 'https://mp.weixin.qq.com/cgi-b ... 39%3B
# query = input('請輸入要搜索的公眾號關(guān)鍵字:')
# begin = int(input('請輸入開(kāi)始的頁(yè)數:'))
query = 'python'
begin = 0
begin *= 5
# 請求參數
data = {
'action': 'search_biz',
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax':' 1',
'random': random.random(),
'query': query,
'begin': begin,
'count': '5'
}
# 請求頁(yè)面,獲取數據
res = requests.get(url=url, cookies=self.cookie, headers=headers, params=data)
name_js = res.text
name_js = json.loads(name_js)
list = name_js['list']
for i in list:
time.sleep(1)
fakeid = i['fakeid']
nickname =i['nickname']
print(nickname,fakeid)
self.fakeid.append((nickname,fakeid))
# 獲取文章url
def getEurl(self):
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 遍歷fakeid,訪(fǎng)問(wèn)獲取文章鏈接
for i in self.fakeid:
time.sleep(1)
fake = i[1]
data = {
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'action': 'list_ex',
'begin': 0,
'count': 5,
'fakeid': fake,
'type': 9
}
res = requests.get(url, cookies=self.cookie, headers=headers, params=data)
js = res.text
link_l = json.loads(js)
self.parJson(link_l)
# 解析提取url
def parJson(self,link_l):
l = link_l['app_msg_list']
for i in l:
link = i['link']
name = i['digest']
self.saveData(name,link)
# 保存數據進(jìn)csv中
def saveData(self,name,link):
with open('link.csv' ,'a',encoding='utf8') as f:
w = csv.writer(f)
w.writerow((name,link))
print('ok')
C = C_ookie()
C.get_cookie()
G = getEssay()
G.getGname()
G.getEurl()
整個(gè)爬取過(guò)程就到這里,希望能幫到你 查看全部
與token的代碼與上篇文章銜接起來(lái)代碼的流程
獲取網(wǎng)址
在我們解決cookie和token之前,那我們只需要把這兩個(gè)參數放到請求頭中就可以得到我們想要的
首先搜索公司賬號名稱(chēng)

這里打開(kāi)素材管理,點(diǎn)擊新建圖形素材


點(diǎn)擊超鏈接。轉到此頁(yè)面

在此處提取url、headers和參數并找出更改的參數
random參數是0-1之間的隨機浮點(diǎn)數,query是搜索內容,前面提取token
接下來(lái)我們看看獲取文章的請求和接口

我們對頁(yè)面的分析完成了,接下來(lái)我們開(kāi)始編寫(xiě)代碼,這次的代碼是和上一篇文章的代碼連接起來(lái)的
import time
import json
import random
import csv
from selenium import webdriver
from lxml import html
import requests
import re
# 獲取cookies和token
class C_ookie:
# 初始化
def __init__(self):
self.html = ''
# 獲取cookie
def get_cookie(self):
cooki = {}
url = 'https://mp.weixin.qq.com'
Browner = webdriver.Chrome()
Browner.get(url)
# 獲取賬號輸入框
ID = Browner.find_element_by_name('account')
# 獲取密碼輸入框
PW = Browner.find_element_by_name('password')
# 輸入賬號
#輸入賬號
id =
#輸入密碼
pw =
# id = input('請輸入賬號:')
# pw = input('請輸入密碼:')
ID.send_keys(id)
PW.send_keys(pw)
# 獲取登錄button,點(diǎn)擊登錄
Browner.find_element_by_class_name('btn_login').click()
# 等待掃二維碼
time.sleep(10)
cks = Browner.get_cookies()
for ck in cks:
cooki[ck['name']] = ck['value']
ck1 = json.dumps(cooki)
print(ck1)
with open('ck.txt','w') as f :
f.write(ck1)
f.close()
self.html = Browner.page_source
# 獲取文章
class getEssay:
def __init__(self):
# 獲取cookies
with open('ck.txt','r') as f :
cookie = f.read()
f.close()
self.cookie = json.loads(cookie)
# 獲取token
self.header = {
"HOST": "mp.weixin.qq.com",
"User-Agent": 'Mozilla / 5.0(WindowsNT6.1;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 74.0.3729.131Safari / 537.36'
}
m_url = 'https://mp.weixin.qq.com'
response = requests.get(url=m_url, cookies=self.cookie)
self.token = re.findall(r'token=(\d+)', str(response.url))[0]
# fakeid與name
self.fakeid = []
# 獲取公眾號信息
def getGname(self):
# 請求頭
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 地址
url = 'https://mp.weixin.qq.com/cgi-b ... 39%3B
# query = input('請輸入要搜索的公眾號關(guān)鍵字:')
# begin = int(input('請輸入開(kāi)始的頁(yè)數:'))
query = 'python'
begin = 0
begin *= 5
# 請求參數
data = {
'action': 'search_biz',
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax':' 1',
'random': random.random(),
'query': query,
'begin': begin,
'count': '5'
}
# 請求頁(yè)面,獲取數據
res = requests.get(url=url, cookies=self.cookie, headers=headers, params=data)
name_js = res.text
name_js = json.loads(name_js)
list = name_js['list']
for i in list:
time.sleep(1)
fakeid = i['fakeid']
nickname =i['nickname']
print(nickname,fakeid)
self.fakeid.append((nickname,fakeid))
# 獲取文章url
def getEurl(self):
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'mp.weixin.qq.com',
'Referer': 'https://mp.weixin.qq.com/cgi-b ... 25int(self.token),
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 遍歷fakeid,訪(fǎng)問(wèn)獲取文章鏈接
for i in self.fakeid:
time.sleep(1)
fake = i[1]
data = {
'token': self.token,
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
'random': random.random(),
'action': 'list_ex',
'begin': 0,
'count': 5,
'fakeid': fake,
'type': 9
}
res = requests.get(url, cookies=self.cookie, headers=headers, params=data)
js = res.text
link_l = json.loads(js)
self.parJson(link_l)
# 解析提取url
def parJson(self,link_l):
l = link_l['app_msg_list']
for i in l:
link = i['link']
name = i['digest']
self.saveData(name,link)
# 保存數據進(jìn)csv中
def saveData(self,name,link):
with open('link.csv' ,'a',encoding='utf8') as f:
w = csv.writer(f)
w.writerow((name,link))
print('ok')
C = C_ookie()
C.get_cookie()
G = getEssay()
G.getGname()
G.getEurl()
整個(gè)爬取過(guò)程就到這里,希望能幫到你
上面這種是支持微信、短信通知的嗎?(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 101 次瀏覽 ? 2021-08-02 05:10
上面這種是支持微信、短信通知的嗎?(圖)
\Phpcmf\Service::M('member')->notice($uid,?$type,?$note,?$url?=?'')
$uid?會(huì )員id
$type?類(lèi)型:1系統?2用戶(hù)?3內容?4應用?5交易?6訂單
$note?通知內容
$url?相關(guān)鏈接
以上類(lèi)型是否支持微信和短信通知?不需要設置通知模板? ?
----------------------------------------------- ------
使用系統通知,不知道如何攜帶URL參數。如果你想在小程序或者APP中傳遞一個(gè)URL參數! !
\Phpcmf\Service::L('Notice')->send_notice('news', $userlist);
最新任務(wù)《{$title}》,時(shí)間:{dr_date($sys_time)}
{
"id":?"98",
"type":?"1",
"uid":?"1",
"isnew":?"0",
"content":?"完成調查任務(wù)",
"url":?"",
"inputtime":?"1575019067"
}, 查看全部
上面這種是支持微信、短信通知的嗎?(圖)
\Phpcmf\Service::M('member')->notice($uid,?$type,?$note,?$url?=?'')
$uid?會(huì )員id
$type?類(lèi)型:1系統?2用戶(hù)?3內容?4應用?5交易?6訂單
$note?通知內容
$url?相關(guān)鏈接
以上類(lèi)型是否支持微信和短信通知?不需要設置通知模板? ?
----------------------------------------------- ------
使用系統通知,不知道如何攜帶URL參數。如果你想在小程序或者APP中傳遞一個(gè)URL參數! !
\Phpcmf\Service::L('Notice')->send_notice('news', $userlist);
最新任務(wù)《{$title}》,時(shí)間:{dr_date($sys_time)}
{
"id":?"98",
"type":?"1",
"uid":?"1",
"isnew":?"0",
"content":?"完成調查任務(wù)",
"url":?"",
"inputtime":?"1575019067"
},
微信小程序訂閱消息升級,以前的消息模板不適合使用
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2021-08-01 22:09
微信小程序訂閱消息更新,之前的消息模板不適合使用
官方文檔微信官方文檔
要求
使用小程序開(kāi)啟直播講座,學(xué)生可以預約,已經(jīng)預約的學(xué)生會(huì )在直播開(kāi)始前發(fā)送提醒和直播開(kāi)始提醒
整體流程
1、模板由產(chǎn)品在微信小程序中設計,模板id和內容給前后端
2、前端在小程序頁(yè)面發(fā)起消息訂閱授權。用戶(hù)同意授權后,微信返回的templateIds傳遞給后端
3、后端保存templateIds并組裝相應的內容,保存到數據庫中
4、使用定時(shí)器查詢(xún)要發(fā)送的數據并發(fā)送給用戶(hù)(廣播前提醒)
5、用戶(hù)廣播,發(fā)送啟動(dòng)提醒
后端關(guān)鍵設計及代碼
定義模板
public interface ConstantTemplate {
/**
* 提前提醒
*/
String CLOUD_PREACH_TEMPLATE_ID = "xxxxxxxxxxxxxx";
String CLOUD_PREACH_TEMPLATE_DATA = "{\"time1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\"thing3\":{\"value\":\"%s\"}}";
/**
* 開(kāi)播提醒
*/
String INTERVIEW_NOTICE_TEMPLATE_ID = "xxxxxxxxxxxxxxxx";
String INTERVIEW_NOTICE_TEMPLATE_DATA ="{\"thing1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\time3\":{\"value\":\"%s\"},\"thing4\":{\"value\":\"%s\"},\"thing5\":{\"value\":\"%s\"}}";
}
@Getter
public enum WxMiniMsgTemplateEnum {
/**
* 微信小程序消息模板
*/
CLOUD_PREACH_TEMPLATE(CLOUD_PREACH_TEMPLATE_ID, CLOUD_PREACH_TEMPLATE_DATA),
INTERVIEW_NOTICE_TEMPLATE(INTERVIEW_NOTICE_TEMPLATE_ID, INTERVIEW_NOTICE_TEMPLATE_DATA);
private final String id;
private final String data;
WxMiniMsgTemplateEnum(String id, String data) {
this.id = id;
this.data = data;
}
public static String getDataById(String id) {
return Arrays.stream(WxMiniMsgTemplateEnum.values()).filter(r -> r.getId().equals(id)).findFirst().map(WxMiniMsgTemplateEnum::getData).orElse(null);
}
}
保存消息
for (String templateId : dto.getTemplateIds()) {
//發(fā)送小程序訂閱消息
XyWxMiniMsgDTO wxMsgDTO = new XyWxMiniMsgDTO();
wxMsgDTO.setPage(dto.getPage());
wxMsgDTO.setEndpoint(com.xyedu.sims.common.enums.SourceTypeEnum.STUDENT_MINI.getCode());
wxMsgDTO.setLang("zh_CN");
wxMsgDTO.setMiniprogramState(ConstantUtil.MiniprogramState);
wxMsgDTO.setTouser(social.getOpenId());
LocalDateTime sendTime = topicInfo.getStartTime();
LocalDateTime pastTime = topicInfo.getEndTime();
//提前20分鐘發(fā)送通知
wxMsgDTO.setSendTime(sendTime.minusMinutes(20));
wxMsgDTO.setPastTime(pastTime);
String date = DateUtil.getDefaultFormatDate(DateUtil.localDateTimeToDate(topicInfo.getStartTime()));
//組裝模板數據
String data = WxMiniMsgTemplateEnum.getDataById(templateId);
if (ToolUtil.isNotEmpty(data)) {
data = String.format(data, date, StrUtil.subWithLength(topicInfo.getTitle(), 0, 20), userCache.getRealName() + "同學(xué),云宣講即將開(kāi)始~");
wxMsgDTO.setData(JSONUtil.toJsonStr(data));
}
wxMsgDTO.setTemplateId(templateId);
XyWxMiniMsg miniMsg = BeanUtil.copy(wxMsgDTO, XyWxMiniMsg.class);
//保存至數據庫
remoteXyWxMiniMsgService.add(miniMsg);
}
包裹發(fā)送工具
@Slf4j
public class WxMiniMsgUtil {
//官方文檔: https://developers.weixin.qq.c ... .html
private static final String WX_MINI_MSG_URL = "https://api.weixin.qq.com/cgi- ... 3B%3B
public static Object send(String accessToken, XyWxMiniMsgDTO dto) {
String url = WX_MINI_MSG_URL + accessToken;
Map reqBody = new HashMap();
reqBody.put("touser", dto.getTouser());
reqBody.put("template_id", dto.getTemplateId());
reqBody.put("miniprogram_state", dto.getMiniprogramState());
reqBody.put("lang", dto.getLang());
reqBody.put("page", dto.getPage());
reqBody.put("data", JSONUtil.parseObj(dto.getData()));
try {
return HttpRequest.post(url)
.body(JSONUtil.toJsonStr(reqBody))
.timeout(5000)
.execute()
.body();
} catch (Exception e) {
log.error("send wx mini msg occur an exception,e={}", e.getMessage());
return null;
}
}
}
使用定時(shí)器發(fā)送,定時(shí)器每3分鐘執行一次查詢(xún),查詢(xún)未發(fā)送或發(fā)送失敗的消息。如果超過(guò)時(shí)間,發(fā)送狀態(tài)將設置為過(guò)期
@Getter
public enum WxMiniMsgSendStatusEnum {
/**
*
*/
SENDING(0, "未發(fā)送"),
SEND_SUCCESS(1, "發(fā)送成功"),
SEND_FAIL(2, "發(fā)送失敗"),
OVERDUE(3,"過(guò)期");
private Integer code;
private String msg;
WxMiniMsgSendStatusEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public static String getMsg(Object code) {
if (code == null) {
return null;
}
return Arrays.stream(values()).filter(e -> e.getCode().equals(code)).findFirst().map(e -> e.getMsg()).orElse("");
}
}
@Override
public ReturnT execute(String param) throws Exception {
log.debug("[send wx mini msg]-start");
XyWxMiniMsgQueryDTO dto = new XyWxMiniMsgQueryDTO();
dto.setEndpoint(SourceTypeEnum.STUDENT_MINI.getCode());
//從數據庫中獲取應發(fā)送的數據列表
List list = remoteXyWxMiniMsgService.list(dto);
if (CollectionUtil.isNotEmpty(list)) {
log.debug("[send wx mini msg]-query list,list.size={}", list.size());
final WxMaService wxService = WxMaConfiguration.getMaService();
String accessToken = wxService.getAccessToken();
for (XyWxMiniMsg msg : list) {
XyWxMiniMsgDTO msgDTO = BeanUtil.copy(msg, XyWxMiniMsgDTO.class);
//通知微信發(fā)送訂閱消息
Object response = WxMiniMsgUtil.send(accessToken, msgDTO);
if (ToolUtil.isNotEmpty(response)) {
msg.setResponse(response.toString());
JSONObject object = JSONUtil.parseObj(response);
//處理微信響應信息
if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 0) {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_SUCCESS.getCode());
} else if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 42001) {
log.error("[send wx mini msg]-response fail,refresh accessToken={}", response);
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
WxMaConfiguration.getMaService().getAccessToken(true);
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response fail,response={}", response);
}
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response empty,may be catch exception,params[accessToken={}\n,msgDTO={}]", accessToken, msgDTO);
}
}
remoteXyWxMiniMsgService.updateBatch(list);
}
log.debug("[send wx mini msg]-finish");
return ReturnT.SUCCESS;
}
要求點(diǎn) 5 尚未完成。思路大概是在組裝提前提醒模板的時(shí)候把開(kāi)機提醒消息保存到數據庫中,用templateId+演示的id作為唯一標識,在數據庫中查詢(xún)廣播開(kāi)始時(shí)要發(fā)送的消息,最后直接通過(guò)工具類(lèi)發(fā)送 查看全部
微信小程序訂閱消息升級,以前的消息模板不適合使用
微信小程序訂閱消息更新,之前的消息模板不適合使用
官方文檔微信官方文檔
要求
使用小程序開(kāi)啟直播講座,學(xué)生可以預約,已經(jīng)預約的學(xué)生會(huì )在直播開(kāi)始前發(fā)送提醒和直播開(kāi)始提醒
整體流程
1、模板由產(chǎn)品在微信小程序中設計,模板id和內容給前后端
2、前端在小程序頁(yè)面發(fā)起消息訂閱授權。用戶(hù)同意授權后,微信返回的templateIds傳遞給后端
3、后端保存templateIds并組裝相應的內容,保存到數據庫中
4、使用定時(shí)器查詢(xún)要發(fā)送的數據并發(fā)送給用戶(hù)(廣播前提醒)
5、用戶(hù)廣播,發(fā)送啟動(dòng)提醒
后端關(guān)鍵設計及代碼
定義模板
public interface ConstantTemplate {
/**
* 提前提醒
*/
String CLOUD_PREACH_TEMPLATE_ID = "xxxxxxxxxxxxxx";
String CLOUD_PREACH_TEMPLATE_DATA = "{\"time1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\"thing3\":{\"value\":\"%s\"}}";
/**
* 開(kāi)播提醒
*/
String INTERVIEW_NOTICE_TEMPLATE_ID = "xxxxxxxxxxxxxxxx";
String INTERVIEW_NOTICE_TEMPLATE_DATA ="{\"thing1\":{\"value\":\"%s\"},\"thing2\":{\"value\":\"%s\"},\time3\":{\"value\":\"%s\"},\"thing4\":{\"value\":\"%s\"},\"thing5\":{\"value\":\"%s\"}}";
}
@Getter
public enum WxMiniMsgTemplateEnum {
/**
* 微信小程序消息模板
*/
CLOUD_PREACH_TEMPLATE(CLOUD_PREACH_TEMPLATE_ID, CLOUD_PREACH_TEMPLATE_DATA),
INTERVIEW_NOTICE_TEMPLATE(INTERVIEW_NOTICE_TEMPLATE_ID, INTERVIEW_NOTICE_TEMPLATE_DATA);
private final String id;
private final String data;
WxMiniMsgTemplateEnum(String id, String data) {
this.id = id;
this.data = data;
}
public static String getDataById(String id) {
return Arrays.stream(WxMiniMsgTemplateEnum.values()).filter(r -> r.getId().equals(id)).findFirst().map(WxMiniMsgTemplateEnum::getData).orElse(null);
}
}
保存消息
for (String templateId : dto.getTemplateIds()) {
//發(fā)送小程序訂閱消息
XyWxMiniMsgDTO wxMsgDTO = new XyWxMiniMsgDTO();
wxMsgDTO.setPage(dto.getPage());
wxMsgDTO.setEndpoint(com.xyedu.sims.common.enums.SourceTypeEnum.STUDENT_MINI.getCode());
wxMsgDTO.setLang("zh_CN");
wxMsgDTO.setMiniprogramState(ConstantUtil.MiniprogramState);
wxMsgDTO.setTouser(social.getOpenId());
LocalDateTime sendTime = topicInfo.getStartTime();
LocalDateTime pastTime = topicInfo.getEndTime();
//提前20分鐘發(fā)送通知
wxMsgDTO.setSendTime(sendTime.minusMinutes(20));
wxMsgDTO.setPastTime(pastTime);
String date = DateUtil.getDefaultFormatDate(DateUtil.localDateTimeToDate(topicInfo.getStartTime()));
//組裝模板數據
String data = WxMiniMsgTemplateEnum.getDataById(templateId);
if (ToolUtil.isNotEmpty(data)) {
data = String.format(data, date, StrUtil.subWithLength(topicInfo.getTitle(), 0, 20), userCache.getRealName() + "同學(xué),云宣講即將開(kāi)始~");
wxMsgDTO.setData(JSONUtil.toJsonStr(data));
}
wxMsgDTO.setTemplateId(templateId);
XyWxMiniMsg miniMsg = BeanUtil.copy(wxMsgDTO, XyWxMiniMsg.class);
//保存至數據庫
remoteXyWxMiniMsgService.add(miniMsg);
}
包裹發(fā)送工具
@Slf4j
public class WxMiniMsgUtil {
//官方文檔: https://developers.weixin.qq.c ... .html
private static final String WX_MINI_MSG_URL = "https://api.weixin.qq.com/cgi- ... 3B%3B
public static Object send(String accessToken, XyWxMiniMsgDTO dto) {
String url = WX_MINI_MSG_URL + accessToken;
Map reqBody = new HashMap();
reqBody.put("touser", dto.getTouser());
reqBody.put("template_id", dto.getTemplateId());
reqBody.put("miniprogram_state", dto.getMiniprogramState());
reqBody.put("lang", dto.getLang());
reqBody.put("page", dto.getPage());
reqBody.put("data", JSONUtil.parseObj(dto.getData()));
try {
return HttpRequest.post(url)
.body(JSONUtil.toJsonStr(reqBody))
.timeout(5000)
.execute()
.body();
} catch (Exception e) {
log.error("send wx mini msg occur an exception,e={}", e.getMessage());
return null;
}
}
}
使用定時(shí)器發(fā)送,定時(shí)器每3分鐘執行一次查詢(xún),查詢(xún)未發(fā)送或發(fā)送失敗的消息。如果超過(guò)時(shí)間,發(fā)送狀態(tài)將設置為過(guò)期
@Getter
public enum WxMiniMsgSendStatusEnum {
/**
*
*/
SENDING(0, "未發(fā)送"),
SEND_SUCCESS(1, "發(fā)送成功"),
SEND_FAIL(2, "發(fā)送失敗"),
OVERDUE(3,"過(guò)期");
private Integer code;
private String msg;
WxMiniMsgSendStatusEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public static String getMsg(Object code) {
if (code == null) {
return null;
}
return Arrays.stream(values()).filter(e -> e.getCode().equals(code)).findFirst().map(e -> e.getMsg()).orElse("");
}
}
@Override
public ReturnT execute(String param) throws Exception {
log.debug("[send wx mini msg]-start");
XyWxMiniMsgQueryDTO dto = new XyWxMiniMsgQueryDTO();
dto.setEndpoint(SourceTypeEnum.STUDENT_MINI.getCode());
//從數據庫中獲取應發(fā)送的數據列表
List list = remoteXyWxMiniMsgService.list(dto);
if (CollectionUtil.isNotEmpty(list)) {
log.debug("[send wx mini msg]-query list,list.size={}", list.size());
final WxMaService wxService = WxMaConfiguration.getMaService();
String accessToken = wxService.getAccessToken();
for (XyWxMiniMsg msg : list) {
XyWxMiniMsgDTO msgDTO = BeanUtil.copy(msg, XyWxMiniMsgDTO.class);
//通知微信發(fā)送訂閱消息
Object response = WxMiniMsgUtil.send(accessToken, msgDTO);
if (ToolUtil.isNotEmpty(response)) {
msg.setResponse(response.toString());
JSONObject object = JSONUtil.parseObj(response);
//處理微信響應信息
if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 0) {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_SUCCESS.getCode());
} else if (object.containsKey("errcode")
&& NumberUtil.isNumber(object.get("errcode").toString())
&& Integer.valueOf(object.get("errcode").toString()) == 42001) {
log.error("[send wx mini msg]-response fail,refresh accessToken={}", response);
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
WxMaConfiguration.getMaService().getAccessToken(true);
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response fail,response={}", response);
}
} else {
msg.setSendStatus(WxMiniMsgSendStatusEnum.SEND_FAIL.getCode());
log.error("[send wx mini msg]-response empty,may be catch exception,params[accessToken={}\n,msgDTO={}]", accessToken, msgDTO);
}
}
remoteXyWxMiniMsgService.updateBatch(list);
}
log.debug("[send wx mini msg]-finish");
return ReturnT.SUCCESS;
}
要求點(diǎn) 5 尚未完成。思路大概是在組裝提前提醒模板的時(shí)候把開(kāi)機提醒消息保存到數據庫中,用templateId+演示的id作為唯一標識,在數據庫中查詢(xún)廣播開(kāi)始時(shí)要發(fā)送的消息,最后直接通過(guò)工具類(lèi)發(fā)送
基于PHP的服務(wù)端開(kāi)源項目之phpQuery采集文章(一)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 185 次瀏覽 ? 2021-08-01 07:04
phpQuery 是一個(gè)基于 PHP 的服務(wù)器端開(kāi)源項目,它可以讓 PHP 開(kāi)發(fā)者輕松處理 DOM 文檔的內容,例如獲取新聞的頭條新聞網(wǎng)站。更有趣的是它使用了jQuery的思想。你可以像使用jQuery一樣處理頁(yè)面內容,獲取你想要的頁(yè)面信息。
采集頭條
先看個(gè)例子,現在我要的是采集國內新聞的標題,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
echo pq(".blkTop h1:eq(0)")->html();
簡(jiǎn)單的三行代碼,即可獲取標題內容。首先在程序中收錄phpQuery.php核心程序,然后調用讀取目標網(wǎng)頁(yè),最后輸出對應標簽下的內容。
pq() 是一個(gè)強大的方法,就像jQuery的$()一樣,jQuery的選擇器基本可以用在phpQuery上,只要把“.”改一下就行了。到“->”。如上例, pq(".blkTop h1:eq(0)") 抓取class屬性為blkTop的DIV元素,找到DIV里面的第一個(gè)h1標簽,然后使用html()方法獲取h1 標簽中的內容(帶html標簽)就是我們要獲取的標題信息,如果使用text()方法,只會(huì )獲取到標題的文本內容,當然一定要用好phpQuery,關(guān)鍵是在文檔Node中找到對應的內容。
采集文章List
下面再看一個(gè)例子,獲取網(wǎng)站的博客列表,請看代碼:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
$artlist = pq(".blog_li");
foreach($artlist as $li){
echo pq($li)->find('h2')->html()."";
}
找到文章 標題并通過(guò)循環(huán)遍歷列表中的 DIV 將其輸出就是這么簡(jiǎn)單。
解析 XML 文檔
假設有一個(gè)像這樣的 test.xml 文檔:
復制代碼代碼如下:
張三
22
王舞
18
現在想獲取聯(lián)系人張三的年齡,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('test.xml');
echo pq('contact> age:eq(0)');
結果輸出:22
和jQuery一樣,它就像準確找到文檔節點(diǎn),輸出節點(diǎn)下的內容,解析一個(gè)XML文檔一樣簡(jiǎn)單?,F在您不必為采集網(wǎng)站 內容使用繁瑣的代碼,例如頭痛的常規算法和內容替換。有了 phpQuery,一切都變得簡(jiǎn)單了。
phpquery項目官網(wǎng)地址: 查看全部
基于PHP的服務(wù)端開(kāi)源項目之phpQuery采集文章(一)
phpQuery 是一個(gè)基于 PHP 的服務(wù)器端開(kāi)源項目,它可以讓 PHP 開(kāi)發(fā)者輕松處理 DOM 文檔的內容,例如獲取新聞的頭條新聞網(wǎng)站。更有趣的是它使用了jQuery的思想。你可以像使用jQuery一樣處理頁(yè)面內容,獲取你想要的頁(yè)面信息。
采集頭條
先看個(gè)例子,現在我要的是采集國內新聞的標題,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
echo pq(".blkTop h1:eq(0)")->html();
簡(jiǎn)單的三行代碼,即可獲取標題內容。首先在程序中收錄phpQuery.php核心程序,然后調用讀取目標網(wǎng)頁(yè),最后輸出對應標簽下的內容。
pq() 是一個(gè)強大的方法,就像jQuery的$()一樣,jQuery的選擇器基本可以用在phpQuery上,只要把“.”改一下就行了。到“->”。如上例, pq(".blkTop h1:eq(0)") 抓取class屬性為blkTop的DIV元素,找到DIV里面的第一個(gè)h1標簽,然后使用html()方法獲取h1 標簽中的內容(帶html標簽)就是我們要獲取的標題信息,如果使用text()方法,只會(huì )獲取到標題的文本內容,當然一定要用好phpQuery,關(guān)鍵是在文檔Node中找到對應的內容。
采集文章List
下面再看一個(gè)例子,獲取網(wǎng)站的博客列表,請看代碼:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('');
$artlist = pq(".blog_li");
foreach($artlist as $li){
echo pq($li)->find('h2')->html()."";
}
找到文章 標題并通過(guò)循環(huán)遍歷列表中的 DIV 將其輸出就是這么簡(jiǎn)單。
解析 XML 文檔
假設有一個(gè)像這樣的 test.xml 文檔:
復制代碼代碼如下:
張三
22
王舞
18
現在想獲取聯(lián)系人張三的年齡,代碼如下:
復制代碼代碼如下:
收錄'phpQuery/phpQuery.php';
phpQuery::newDocumentFile('test.xml');
echo pq('contact> age:eq(0)');
結果輸出:22
和jQuery一樣,它就像準確找到文檔節點(diǎn),輸出節點(diǎn)下的內容,解析一個(gè)XML文檔一樣簡(jiǎn)單?,F在您不必為采集網(wǎng)站 內容使用繁瑣的代碼,例如頭痛的常規算法和內容替換。有了 phpQuery,一切都變得簡(jiǎn)單了。
phpquery項目官網(wǎng)地址: