声明:仅供学习参考,严禁用于非法或者侵权操作
一,首先要计划好
1.抓取分类
2.抓取分类的每页产品链接
3.抓取每页的产品链接
4.抓取每个产品
尽量的细分,一开始一个大循环,很容易把程序卡死.分而治之,稳多啦
二,选择爬虫工具
这里介绍两种
1.phpspider
优点:速度快,文档齐全,简单容易上手
缺点:只支持静态页面
composer require owner888/phpspider
2.PhantomJs
优点:功能强大,可以抓取js渲染后的数据
缺点:速度慢,抓取出来的数据,和实际数据,会有差异注意坑(可能是因为js渲染了两次引起的)
缺点:只支持静态页面
在抓取产品详情的时候,我发现属性为什么一直无法抓取呢?
原来属性是用js异步渲染的,这里只好使用PhantomJs
composer require jaeger/querylist-phantomjs
三,设计数据库,使用mysql队列
mysql队列更加直观,还能看到是否抓取成功,适合大量储存
1.分类url表 (里面有一个待抓取url)
2.页码url表page_list(里面有一个待抓取url)
3.产品url表product_list(里面有一个待抓取url)
4.产品表
三,执行头三步,生成产品队列
通过定时器,一步步生成产品url表,大约有几十万条数据
4,抓取产品
可以建10台虚拟机,用定时任务开始跑了,注意分库
根据公司产品特点抓取产品数据
//初始化
$ql = QueryList::getInstance();
// 安装时需要设置PhantomJS二进制文件路径
$ql->use(PhantomJs::class, '/usr/local/bin/phantomjs');
//获取整个页面数据
$ql->use(PhantomJs::class, '/usr/local/bin/phantomjs', 'browser');
$producView = $ql->browser($produc)->getHtml();
//使用phpspider选择器
$produc = selector::select($producView, "//div[contains(@class,'contents')]", "xpath");
xpath选择器,真好用,老师再也不担心我不会写正则了
(正则精通帮助还是很大)
网友评论