PHP開(kāi)發(fā)-微信公眾號文章采集原理及思路
優(yōu)采云 發(fā)布時(shí)間: 2020-06-22 08:03
之前有發(fā)布一篇文章,簡(jiǎn)單寫(xiě)了一下文章內容頁(yè)面的爬取。近日又寫(xiě)了一下爬取文章列表,可用于采集公眾號文章。
在搜索引擎上搜:搜狗陌陌文章爬取
可發(fā)覺(jué)一大堆借助了 搜狗 的陌陌搜索功能去爬取并采集微信公眾號文章的內容。
也可以發(fā)覺(jué),都是用 Python 寫(xiě)的。而本文一直采用 PHP 編寫(xiě)以達到同樣療效,文章僅講解爬取原理及思路,用于學(xué)習研究。
打開(kāi) 搜狗 可以隨意輸入一個(gè)關(guān)鍵詞搜索公眾號文章。
此時(shí)注意看 URL 地址欄
https://weixin.sogou.com/weixin?type=2&s_from=input&query=%E4%B8%8D%E8%B4%A5%E5%90%9B&ie=utf8&_sug_=n&_sug_type_=
簡(jiǎn)單剖析下 URL 參數。
參數 type 是定義搜索類(lèi)型,為 1 時(shí)搜索的是公眾號,為 2 就是公眾號文章。
參數 query 是定義搜索關(guān)鍵詞微信文章采集 php,注意是經(jīng)過(guò) URL 編碼的。
另外還有一個(gè) page 參數,由于搜索進(jìn)來(lái)沒(méi)有翻頁(yè) 所以這個(gè)參數沒(méi)顯示下來(lái)。需要曉得這個(gè)參數是拿來(lái)翻頁(yè)即可。
知道 URL 的規則后,就可以進(jìn)行拼接 URL 進(jìn)行文章列表采集了,具體代碼實(shí)現 可參考之前的博文:
其實(shí)無(wú)非就是循環(huán)列表的 div 標簽收集到文章的標題、描述、公眾號名稱(chēng)。然后執行完了下一頁(yè)的時(shí)侯可在原 page 參數值上加一。
到目前為止還沒(méi)哪些技術(shù)難點(diǎn),因為列表的采集沒(méi)很強的反爬蟲(chóng),當然 如果執行頻度很高才會(huì )觸發(fā)反爬蟲(chóng)機制。所以這個(gè)頻度要控制好。
觸發(fā)反爬蟲(chóng)以后:
之前的博文中是采集文章內容,但是并沒(méi)有遇見(jiàn)反爬蟲(chóng)機制,此處的列表頁(yè)是有反爬蟲(chóng)機制的。爬取列表頁(yè)須要加上 UA 偽造??蓞⒖枷逻叴a:
$ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, '列表頁(yè)地址');
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec($curl);
curl_close($curl);
爬取到該列表的 HTML 代碼然后,請求中會(huì )有一段 COOKIE,需要將這段 COOKIE 保存出來(lái)。然后采集到的 a 標簽的 href 值,是須要攜帶 COOKIE 進(jìn)行懇求的,爬取頻度很高都會(huì )封禁 IP 及 COOKIE。
所以本文的做法是不采集 href 屬性,而是 data-share 屬性,采集之后就挺好操作了,和先前的博文幾乎一致的操作。
頻率很高太可能還會(huì )被封禁 IP,所以還嘗試了使用 IP 代理
使用 IP 代理的方式也很簡(jiǎn)單,由于這是免費的 IP 代理服務(wù) 所以可能隨時(shí)就會(huì )難以聯(lián)接。解決方式是 先爬取這個(gè)站點(diǎn)的 IP 代理,爬取出來(lái)執行一次 CURL 看看能不能連上,如果連上就保存上去。
一個(gè)簡(jiǎn)單的 CURL 加代理 DEMO:
$ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, '文章內容頁(yè)');
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_COOKIE, '這里可放cookie');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl,CURLOPT_PROXY,'代理 IP');
curl_setopt($curl,CURLOPT_PROXYPORT,'端口');
curl_setopt ($curl, CURLOPT_TIMEOUT, 100);
curl_exec($curl);
curl_getinfo($curl); //可獲取請求信息
curl_close($curl);
爬取到了 HTML 后,可使用 PHP Simple HTML DOM Parser 或者 QueryList 進(jìn)行解析 HTML。
解析 HTML 獲取到須要的內容就可以保存到數據庫了。
經(jīng)過(guò)處理后的療效(已經(jīng)可展示在自己的 H5 網(wǎng)頁(yè)):
此時(shí)早已可以完成借助搜狗爬取微信公眾號文章。還有一些網(wǎng)站不寫(xiě)原創(chuàng )文章微信文章采集 php,使用爬蟲(chóng)四處爬文章發(fā)布也是同樣的原理。
最后還是說(shuō)一句,本文僅供學(xué)習與研究。