PHP采集商家信息及采集方法概述(上)
最近电子商务市场上面,有很多商家的导航,里面收集了大量的商家信息,如果从事电子商务的这些信息还是有用的。我最近在做的一个项目就要用到这些信息,但是你总不能给别人要吧,这样别人是不给滴。所以只有自己爬了。以前也写过几个类似的爬虫爬取一个站点的某些信息总结说来就是
第一:确定要爬取的资源。
第二:确定爬取资源的资源地址(url)
第三:分析找出资源地址规律
第四:抓取资源地址。
第五:循环获取地址的内容
第六:匹配抓取内容入库
第六:完结,使用抓取数据。
上一次爬取的是一淘的商家信息,大概有5000个商家信息。当时匹配用的是正则匹配,整个html的正则有时候比较麻烦。这次用的是phpquery(这里做个简介,稍后会单独写一篇介绍的文章)。
这一次爬取一家网(shop.yijia.com)的数据 商家信息有100000个,这次把爬取的思路和相关代码给大家分享下,以便有以后有相同或者类似的需求的参考交流学习。如果有需要这次爬取的数据的留言吧,可以给。
爬取开始...........
第一:
确定爬取的资源。我要爬取的是商家信息,这个网站号称“商城超过500家并从万余家电子商务网站中精选23个分类,最后我确实爬取到90585个商家,去除重复的无效的大概也有50000+的有效商家列表。那么我要爬取的就是这些商家信息,如果每一个商家是一个record那么我大概要爬取10万条数据。
第二:
确定爬取资源地址。一家网的商家地址在shop.yijia.com。商家分为二级分类,一级大类例如:服装饰品,美容护发,数码产品等。在一级下面有二级分类,二级下面就直接是商家列表,每一页是十个。一家网的规律很好找
我们来找一些例子分析....
第一级大类:
服装饰品:http://shop.yijia.com/listshop/index_1/
美容护发:http://shop.yijia.com/listshop/index_2/
数码产品:http://shop.yijia.com/listshop/index_1048/
一类的大类其实只有十来个,我没有爬取直接手动添加了。(爬取是为了简化劳动,如果为了十来条数据去写个爬虫,就不值当了)
第二级类别:我们拿服装饰品下面分类(女装,女鞋,女包,男装,男鞋,男包)的来举例,
女装,http://shop.yijia.com/listshop/index_1_25/
女鞋:http://shop.yijia.com/listshop/index_1_26/
女包:http://shop.yijia.com/listshop/index_1_27/
很明显的规律,这里就细说了,如果这个观察不出来,那个就不要采集了
然后分类下面的分页 我们拿女装来举例
第一页:http://shop.yijia.com/listshop/index_1_25_0_0_1/
第二页:http://shop.yijia.com/listshop/index_1_25_0_0_2/
第三页:http://shop.yijia.com/listshop/index_1_25_0_0_3/
第三:
分析资源地址规律,这里比较简单的规律,其实一般统一网站的资源类型资源地址不会差别太大,
关键是最后一个参数index_x_y_0_0_z
其中x 一级分类 y二级分类 z分页 至于当中两个0干嘛的 我也不知道。观察抽取分析后就是都是这样的。
第四:抓取资源地址,抓取后我们不能随便的保存是吧,最好能分类保存,这里就设计到一个本地数据库的设计,可以参考的猜解。
第一步:一级分类入库,我这里手动拷贝的毕竟只有十来条
第二步:抓取二级分类,这里观察页面结构可以发现,一级分类页面中的内容中页面结构相似 在一级分类页面的一个div是保存二级分类的目录树的 dd id="dd_open_1" 里面的
- <dd id="dd_open_1">
- <ul>
- <li class="sel"><a href="/listshop/index_1_25/" target="_self">女装</a></li>
- <li><a href="/listshop/index_1_26/" target="_self">女鞋</a></li>
- <li><a href="/listshop/index_1_27/" target="_self">女包</a></li>
- <li><a href="/listshop/index_1_28/" target="_self">男装</a></li>
- <li><a href="/listshop/index_1_29/" target="_self">男鞋</a></li>
- <li><a href="/listshop/index_1_30/" target="_self">男包</a></li>
- <li><a href="/listshop/index_1_31/" target="_self">内衣</a></li>
- <li><a href="/listshop/index_1_32/" target="_self">配饰</a></li>
- <li><a href="/listshop/index_1_33/" target="_self">饰品</a></li>
- <li><a href="/listshop/index_1_34/" target="_self">运动服饰</a></li>
- <li><a href="/listshop/index_1_1086/" target="_self">成衣定制</a></li>
- </ul>
- </dd>
那么好的规律找到了哦 只要在每个一级页面里面的id为dd_open_1里面的ul就行了
循环是一个一级分类的页面内容然后抓取里面的li 和对应的href
然后 是二级分类对应的分页数量
进入一个二级分类然后查看 这里有不同的方法 不过这要找到有一种可行就可以了我说下我的,如果有分页那么一定会有一个尾页 那么尾页的url中的最后一个参数是
(int a)/ 那么 a就是这个分页的数量
我们来看个示例
- <div class="pager cardlist03"><a href="/listshop/index_1_25_0_0_1/" target="_self">首页</a>
- <a href="/listshop/index_1_25_0_0_1/" target="_self">上一页</a>
- <a href="/listshop/index_1_25_0_0_1/" target="_self">1</a>
- 2 <a href="/listshop/index_1_25_0_0_3/" target="_self">3</a>
- <a href="/listshop/index_1_25_0_0_4/" target="_self">4</a>
- <a href="/listshop/index_1_25_0_0_5/" target="_self">5</a>
- <a href="/listshop/index_1_25_0_0_3/" target="_self">下一页</a>
- <a href="/listshop/index_1_25_0_0_500/" target="_self">尾页</a>
- 共500页 到第
- <!-- .....省略输入框代码 太长了 不好截断 哈哈 -->
- </div>
我的做法是取得 div class="pager" 的这个然后取得里面的最后一个a标签
获取他的属性href 用explode 已‘_’ 截断 然后取得的数值就是他如果没有就默认一页如果有就是相应的页数。
然后在最后的商家页面中有我们需要的两个信息,商家简介和url 。logo在商家列表页里面可以获得。这个就说了见代码吧。
这样我们得到了所有的资源路径(规律,推出所有的分类)
下面的就是采集阶段了。
这里就不多说了直接上代码。
注意:
第一:这里分了三个小脚本,因为是在pc上跑。如果在服务器上可以合成一个来跑。
第二:不要恶意和暴力采集,这样对大家都不好,会被当成DDOS 攻击屏蔽你的ip或者给网站服务器太大压力致使崩溃的。刚开始就被封了IP 然后我这里一次采集后sleep(1) 就没什么问题了。
代码相关
数据库结构
- 'yj_shop_category', 'CREATE TABLE `yj_shop_category` (
- `sc_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键id',
- `sc_name` varchar(255) NOT NULL COMMENT '分类名称',
- `sc_parent_id` int(10) NOT NULL DEFAULT '0' COMMENT '父类id',
- `sc_url` varchar(255) NOT NULL COMMENT '分类url',
- `sc_page_num` int(6) NOT NULL COMMENT '共多少个分页',
- `sc_current_page_num` int(6) NOT NULL DEFAULT '1' COMMENT '当前采集页',
- `sc_add_time` int(10) NOT NULL COMMENT '增加时间',
- `is_grab` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否采集过',
- PRIMARY KEY (`sc_id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8'
- 'yj_shop_information', 'CREATE TABLE `yj_shop_information` (
- `si_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '商家主键',
- `si_name` varchar(255) NOT NULL COMMENT '商家名称',
- `si_cat_id` int(10) NOT NULL COMMENT '商家所属分类',
- `si_shop_url` varchar(255) NOT NULL COMMENT '一家中的商家url',
- `si_true_url` varchar(255) NOT NULL COMMENT '实际url',
- `si_yijia_url` varchar(255) NOT NULL COMMENT '一家中商家简介页面',
- `si_logo_url` varchar(255) NOT NULL COMMENT 'logo图片地址',
- `si_desc` text NOT NULL COMMENT '详细描述',
- `si_front_desc` text NOT NULL COMMENT '简介描述',
- `si_add_time` int(10) NOT NULL COMMENT '增加时间',
- PRIMARY KEY (`si_id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=86367 DEFAULT CHARSET=utf8'
这一篇就到这里然后我们下一篇说具体的采集代码
PHP采集商家信息及采集方法概述(下)
本文转自kefirking 51CTO博客,原文链接:http://blog.51cto.com/phpzf/799458,如需转载请自行联系原作者
PHP采集商家信息及采集方法概述(上)相关推荐
- 淘宝/天猫采集商家信息插件
淘宝/天猫采集商家信息插件 填写APIkey,APIsecret 点击Set 登陆淘宝账号,自定义抓取关键词店铺信息
- python自动采集财经信息翻译成英文一并上传到wordpress网站
#coded by 伊玛目的门徒 #coding=utf-8 from wordpress_xmlrpc import Client, WordPressPost from wordpress_xml ...
- python snmp采集交换机信息_Python采集12星座信息,分析出12星座的各个特点
一个微博热搜引发的故事 一.故事从这里开始 二.搞事情第一步:搜集图片 三.搞事情第二步:展示图片 四.搞事情第三步:推广链接 五.搞事情第四步:统计分析 1.数据处理2.数据筛选3.统计各天的频率4 ...
- (超简单)ESP8266深度睡眠模式下远程采集温湿度信息
(超简单)ESP8266深度睡眠模式下远程采集温湿度信息 项目背景 相关技术 ESP8266深度睡眠模式 DHT11温湿度采集 MQTT数据收发 Node.js前后端实现 后端 前端 项目背景 自己用 ...
- 采集工商信息的10个经典方法
采集工商信息的工商信息.公司规模.法人号码.人员名录.网页数据采集软件.python爬虫.HTM网页提取.APP数据采集.一站式网站采集技术.BI数据的数据分析.数据标注等成为大数据发展中的热门技术关 ...
- 如何批量采集饿了么外卖商家信息
有时候大家可能由于业务上的发展,业务的对象是外卖商家.餐厅,所以就需要和外卖商家联系洽谈.如果采用传统的线下的方式,也就是挨个去找各个餐厅跟他们谈合作,这种方式交流最为直接,而且面对面的交谈有时候更为 ...
- python采集高德地图上商家信息代码(亲测OK)
项目场景: 项目场景:我需要采集本地的商户信息,获得相关的行业信息数据,分析一下. 描述 我之前有想过从企查查拿企业信息,但是我想获得更多的个体商户信息,想对当前城市做一个数据统计,分析出到底哪一行业 ...
- 大数据信息资料采集:中国知网文献资料网站数据信息资料爬取
大数据信息资料采集:中国知网文献资料网站数据信息资料爬取 数据采集满足多种业务场景:适合产品.运营.销售.数据分析.政府机关.电商从业者.学术研究等多种身份职业. 舆情监控:全方位监测公开信息,抢先获 ...
- 大数据信息资料采集:刘润公众号历史商业评论文章采集评论搜集
大数据信息资料采集:刘润公众号历史商业评论文章采集评论搜集 公众号历史文章评论内容采集,导出表格格式. 采集到的内容包含:文章标题,发布时间,所属栏目,评论ID,评论内容,该评论得到的点赞数,号主评论 ...
最新文章
- 新版直播其他问题QA
- MIT:睡眠不足会让你连路都走不好,但补觉还有救
- Android内核剖析 目录
- python udp编程_在Python下进行UDP网络编程的教程
- LeetCode 350. 两个数组的交集 II(哈希)
- linux rz sz 安装_Windows与Linux文件传输之lrzsz工具
- iOS 图形编程总结
- elsevier模板_英文论文双栏模板
- Python程序设计学习笔记-概述
- Java 常用正则表达式搜集ing
- form提交xml文件
- 中国银行业100强名单发布
- 小榕密码管家xp 绿色
- js如何实现数组随机排序【附洗牌算法心得】
- 第七届山东理工大学ACM趣味编程循环赛 Round#1 sdut4109 玄黄的字符串
- 网络技术——路由器及其配置
- 修改服务器配额有什么坏处,云服务器配额调整
- 安卓下微信内置浏览器视频出现解析错误
- 收藏一些非常不错的学习资源
- 集成科大讯飞语音合成