聲明:僅供學習參考,嚴禁用于非法或者侵權操作
一,首先要計劃好
1.抓取分類
2.抓取分類的每頁產(chǎn)品鏈接
3.抓取每頁的產(chǎn)品鏈接
4.抓取每個產(chǎn)品
盡量的細分,一開始一個大循環(huán),很容易把程序卡死.分而治之,穩(wěn)多啦
二,選擇爬蟲工具
這里介紹兩種
1.phpspider
優(yōu)點:速度快,文檔齊全,簡單容易上手
缺點:只支持靜態(tài)頁面
composer require owner888/phpspider
2.PhantomJs
優(yōu)點:功能強大,可以抓取js渲染后的數(shù)據(jù)
缺點:速度慢,抓取出來的數(shù)據(jù),和實際數(shù)據(jù),會有差異注意坑(可能是因為js渲染了兩次引起的)
缺點:只支持靜態(tài)頁面
在抓取產(chǎn)品詳情的時候,我發(fā)現(xiàn)屬性為什么一直無法抓取呢?
原來屬性是用js異步渲染的,這里只好使用PhantomJs
composer require jaeger/querylist-phantomjs
三,設計數(shù)據(jù)庫,使用mysql隊列
mysql隊列更加直觀,還能看到是否抓取成功,適合大量儲存
1.分類url表 (里面有一個待抓取url)
2.頁碼url表page_list(里面有一個待抓取url)
3.產(chǎn)品url表product_list(里面有一個待抓取url)
4.產(chǎn)品表
三,執(zhí)行頭三步,生成產(chǎn)品隊列
通過定時器,一步步生成產(chǎn)品url表,大約有幾十萬條數(shù)據(jù)
4,抓取產(chǎn)品
可以建10臺虛擬機,用定時任務開始跑了,注意分庫
根據(jù)公司產(chǎn)品特點抓取產(chǎn)品數(shù)據(jù)
//初始化
$ql = QueryList::getInstance();
// 安裝時需要設置PhantomJS二進制文件路徑
$ql->use(PhantomJs::class, '/usr/local/bin/phantomjs');
//獲取整個頁面數(shù)據(jù)
$ql->use(PhantomJs::class, '/usr/local/bin/phantomjs', 'browser');
$producView = $ql->browser($produc)->getHtml();
//使用phpspider選擇器
$produc = selector::select($producView, "http://div[contains(@class,'contents')]", "xpath");
xpath選擇器,真好用,老師再也不擔心我不會寫正則了
(正則精通幫助還是很大)