之前在github上发布了一个Scrapy的抓取项目,然后收到了来自 krake.io 的邮件,准确的说是推广邮件,抱着好奇心进去看了看
krake 基于 EC2提供了在线的数据抓取服务,不过对于国人来说 遗憾的一点是他是收费的
不过注册有送500点券,也就是能免费抓500条数据 也太少了点 呵呵...
为了节省您的时间,如果感觉不必要的 请就此打住。
下面是花了大概半个下午的时间在 krake上的测试
感觉他用于结构简单、关系清晰的数据采集还是不错的(ps:由于api文档说明不太完善,加之鄙人的英文不是太好,复杂的东西就没去深究了)
好了,废话不多说了,上范例代码:
//一个抓取对象 说明
//周公解梦生活篇 http://astro.sina.com.cn/jian/jiemeng/shenghuo.html
// 此页面的 中间部分采用 iframe 加载了 http://astro.sina.com.cn/jian/4997.shtml
// 然后到达最终页面 如 http://astro.sina.com.cn/jian/4997.shtml
{
// 抓取网址
origin_url : ["http://astro.sina.com.cn/jian/jiemeng/shenghuo.html",],
// 采集的数据 规则
columns : [
{
col_name : '第一层',
xpath : '//iframe[@id="content"]',//选中iframe
required_attribute : 'src',
options : {
columns : [ /** An array of column_object **/
{//一个数据列为一个对象
col_name : '第二层',
//dom_query : '.css_class_name_of_columns'//jQuery 选择器 包含jQuery时可使用如下规则进行分析
xpath : '//div[@id="wrap"]/h4',//'//xpath/to/elements'// xPath 选择器 默认使用
required_attribute : "innerText",
},
{
col_name : '子项内容',
xpath : '//div[@id="wrap"]/p/a',//最终层
required_attribute : 'href',//required_attribute_type //你希望采集的属性 比如 innerHTML innerText textContent href src
options : { //扩展一个新的 抓取对象
columns : [
{
col_name : '标题',
xpath : '//div[@id="wrap"]/h4',
required_attribute : "innerText",
},
{
col_name : '内容',
xpath : '//div[@id="wrap"]/p',
required_attribute : "innerHTML",
},
],
wait : 0,
},
}
],
},
wait : 0,
}
],
// 分页规则
next_page : '',//next_page_object,包含 dom_query 或 xPath 选择器 的对象
// cookie 验证规则
cookies : '',//cookies_object,包含 cookie内容的 对象数组
// 需要提取的数据列 可选择columns 中的部分数据导出
column_filter : [],//column_filter_object
// 是否包含jQuery(可使用 jquery dom选择器) 需注意是否会导致原页面js冲突问题
exclude_jquery : true,//boolean
// 页面数据采集等待时间(用于Ajax延迟)
wait : 3,//integer 默认0秒
}
如果有兴趣,你也可以试试哦
当然在需求比较复杂的时候,建议还是直接使用Scrapy这类的抓取框架,就不要在这种小的在线工具代码上浪费时间了(恐怕对于国人来说,收费才是最要命的 哈哈)
这边顺便附上 测试的项目地址吧
https://krake.io/krakes/445-testkrake