【从零开始学爬虫】采集谷歌网页列表数据
采集网站
【场景描述】采集谷歌浏览器关键词搜索出的网页列表数据。
【源网站介绍】谷歌一家位于美国的跨国科技企业,被公认为全球最大的搜索引擎公司,业务包括互联网搜索、云计算、广告技术等,同时开发并提供大量基于互联网的产品与服务。
【使用工具】前嗅 ForeSpider 数据采集系统,免费下载:
http://www.forenose.com/view/forespider/view/download.html
【入口网址】
【采集内容】采集谷歌“apple”关键词下的全部列表数据,包括来源、标题以及摘要。
【待采集内容】
思路分析
配置思路概览:
配置步骤
一. 新建采集任务
选择【采集配置】,点击任务列表右上方【+】号可新建采集任务,将采集入口地址填写在【采集地址】框中,自定义任务名称并输入在【任务名称】框内,点击“完成”。
【新建采集任务】
二.模板配置
1.翻页链接采集配置
①查找翻页链接及其规律
在入口地址页内打开“F12”,按如下步骤找到翻页地址,并复制刷新后的翻页链接地址
【翻页链接位置】
对比观察翻页链接的规律
【翻页链接】
观察发现:随着翻页变化,页码数与请求网址(Requestrian URL)中“start=”后的数字相关。所以,其规律为:
"https://www.google.com/search?q=apple&ei=K_UaY4yIFNqBxc8PuNiymAk&start="+页码数减 1 后乘以 10+"&sa=N&ved=2ahUKEwjMyfG7oYf6AhXaQPEDHTisDJM4KBDy0wN6BAgBEEE&biw=553&bih=755&dpr=1"
找到翻页链接位置及其规律就可以对应去编写脚本。
②脚本的创建与编写
【脚本的创建与编写】
脚本文本:
url u;//定义一个 u,赋予其 url 属性
var url_beg=DOM.FindClass("AaVjTc","table");//定义一个 url_beg,其属性位置位于 table class ="AaVjTc"所属节点下
var ur=url_beg.child.child.next.next.next;//定义一个 ur,其位置属性位于 url_beg 二级子节点三级兄弟节点下
for(int i=0;i<=7;i++){ //为翻页数字页码写一个循环
u.title="谷歌第"+(i+1)+"页";//将标题内容设置为:谷歌第几页
var ur="https://www.google.com/search?q=apple&ei=K_UaY4yIFNqBxc8PuNiymAk&start="+i*10+"&sa=N&ved=2ahUKEwjMyfG7oYf6AhXaQPEDHTisDJM4KBDy0wN6BAgBEEE&biw=553&bih=755&dpr=1";//根据翻页链接规律,拼全链接
u.urlname=ur;//取得已拼合链接
u.entryid=CHANN.id;
u.tmplid=2;//关联模板 02
RESULT.AddLink(u); //输出采集结果
ur=ur.next;//进入下个翻页链接的采集
}
③查看采集预览
查看采集预览,并将链接粘贴到浏览器验证一下是否采集正确。
【采集预览】
2.数据抽取
①新建模板、添加数据抽取
如下新建模板并添加数据抽取,在示例地址框内输入任一翻页链接
【新建模板、添加数据抽取】
②数据表结构创建
如下在表结构内创建出所需采集的字段
【创建表结构】
③关联表单
数据抽取关联数据结构表单
【关联表单】
④创建并编写数据抽取脚本
如下创建脚本,并根据网页结构编写数据抽取脚本
【脚本的创建与编写】
脚本文本:
record re ;//定义一个 re,赋予其 record 属性
var ret=DOM.FindClass("hlcw0c","div");//定义一个 ret,其位置属性位于 div class="hlcw0c"所在节点下
while (ret){//遍历 ret
var beg=DOM.FindClass("MjjYud","div",ret);//定义一个 beg,其位置属性位于 div class="MjjYud"所在节点下
var pu =beg.child.child.child;// 定义一个 pu,其位置属性位于 div class="Z26q7c UK95Uc jGGQ5e VGXe8"所在节点下
var tit=pu.child.child.child.next; //定义一个 tit,其位置属性位于 h3 class="LC20lb MBeuO DKV0Md"所在节点下
var pag=tit.next;//定义一个 pag ,其位置属性位于 tit 下一兄弟节点下
var con=pu.next;//定义一个 con ,其位置属性位于 pu 下一兄弟节点下
re.page=DOM.GetTextAll(pag);//取得列表内容来源
re.title=DOM.GetTextAll(tit);//取得列表内容标题
re.content=DOM.GetTextAll(con);//取得列表内容摘要
RESULT.AddRec(re,this.schemaid);//输出采集结果
ret=ret.next;//进入下一个待采集列表
}
⑤查看采集预览
查看采集预览,并核对一下内容是否采集正确。
【采集预览】
版权声明: 本文为 InfoQ 作者【前嗅大数据】的原创文章。
原文链接:【http://xie.infoq.cn/article/bd768fb3b830b75e34ba199e1】。文章转载请联系作者。
评论