【从零开始学爬虫】采集收视率排行数据
![【从零开始学爬虫】采集收视率排行数据](https://static001.geekbang.org/infoq/59/59120bf7a99d6e1336191da4279d5610.jpeg)
![](https://static001.geekbang.org/infoq/5e/5e54fbfae3e72a6b57effaa2ca4af9ee.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
l 采集网站
【场景描述】采集收视率排行数据。
【源网站介绍】收视率排行网提供收视率排行,收视率查询,电视剧收视率,综艺节目收视率和电视台收视率信息。
【使用工具】前嗅 ForeSpider 数据采集系统
【入口网址】
![](https://static001.geekbang.org/infoq/31/312db3e6af63bc34963999f629b8b693.png)
【采集内容】
采集收视率排行网上省级卫视收视率数据,采集字段:标题、发布时间、排行内容。
![](https://static001.geekbang.org/infoq/c1/c1277911951adc5c2872656910f2e7ee.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【采集效果】
如下图所示:
![](https://static001.geekbang.org/infoq/47/4715f24cac51dafb32cadb0fa85a833b.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
l 思路分析
配置思路概览:
![](https://static001.geekbang.org/infoq/e7/e70b29cb9e1599f248e685de287f5d81.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
l 配置步骤
一.新建采集任务
选择【采集配置】,点击任务列表右上方【+】号可新建采集任务,将采集入口地址填写在【采集地址】框中,【任务名称】自定义即可,点击下一步。
![](https://static001.geekbang.org/infoq/7c/7c7189a9d51db58c5a2a35333eec4a9e.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
二. 模板配置
1. 翻页链接采集配置
①查找翻页链接及其规律
在入口地址页内打开“F12”,按如下步骤找到翻页地址,并复制刷新后的翻页链接地址
![](https://static001.geekbang.org/infoq/17/17bd98537108fd8f294a5233ef901d39.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
对比观察翻页链接的规律观察:随着翻页变化,页码数与请求网址(Requestrian URL)中“page/”后的数字相关。所以,其规律为:http://www.tvtv.hk/archives/category/tv/page/+翻页页码
找到翻页链接位置及其规律就可以对应去编写脚本。
②脚本的创建与编写
![](https://static001.geekbang.org/infoq/b1/b11132d5de8046b414830b90375a4686.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【脚本的创建与编写】
脚本文本:
url u;
for ( var i=1;i<=165;i++){
u.title ="第"+i+"页";//页码
u.urlname = "http://www.tvtv.hk/archives/category/tv/page/"+i;
u.tmplid = 1; //模板关联
u.entryid = CHANN.id;
RESULT.AddLink(u,"","");
}
③查看采集预览
查看采集预览,并将链接粘贴到浏览器验证一下是否采集正确。
![](https://static001.geekbang.org/infoq/e4/e43630d97dbd7a0a2d92f6dc5bc1df5b.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【采集预览】
2. 列表链接抽取配置
①添加链接抽取,更名为列表链接
②点击脚本窗口
③新建脚本
④编写列表链接抽取脚本
![](https://static001.geekbang.org/infoq/6a/6a65f5d410ffad450925552db39b7fb5.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
脚本文本:
var sta=DOM.FindClass("page-header","header",0);//定位到 header 标签
var list=sta.next;//定位下一子标签
while(list) {
var link=DOM.FindClass("entry-header","header",list);//定位到 header 标签
var linkin=link.child.child.child.child.next.child.child.child;//定位到列表链接所在标签
url u;//定义一个 url
u.title = DOM.GetTextAll(link);//取标题
u.urlname =linkin.href;//取列表链接
u.entryid = this.id;
u.tmplid =2;//关联数据抽取模板
link=link.next;
list=list.next;
RESULT.AddLink(u,"","");//传递链接
}
⑤据观察发现,列表链接规律为:http://www.tvtv.hk/archives/而翻页链接规律为:http://www.tvtv.hk/archives/category/tv/page/此处则可以用地址过滤排除翻页链接,如图;然后复制任意一个列表链接到浏览器打开验证
![](https://static001.geekbang.org/infoq/2a/2a36af3da2f418a07210d297e3d98848.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
3. 数据抽取
①新建模板、添加数据抽取
如下新建模板并添加数据抽取,在示例地址框内输入上一步复制的列表链接
![](https://static001.geekbang.org/infoq/b4/b4ee1c0c4ad3ef3cc4e011d1907af768.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【新建模板、添加数据抽取】
②数据表结构创建
如下在表结构内创建出所需采集的字段
![](https://static001.geekbang.org/infoq/ee/ee7467e3dae78be1e8474671a1a6a3f3.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【创建表结构】
③关联表单
数据抽取关联数据结构表单
![](https://static001.geekbang.org/infoq/c5/c5f825dfcd114a546350ee175a99d564.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
【关联表单】
④创建并编写数据抽取脚本
如下创建脚本,并根据网页结构编写数据抽取脚本
![](https://static001.geekbang.org/infoq/27/270734062f4a5a1403e592e61072fa7f.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【脚本的创建与编写】
脚本文本:
record re;//定义一个 record 记录集
var name=DOM.FindClass("entry-header","header",0);//定位到 header 标签
var cont=DOM.FindClass("entry-content","div",0);//定位到 div 标签
re.title=DOC.GetDom().GetTextAll(name.child);//取标题文本
re.time_sub=DOC.GetDom().GetTextAll(name.child.next.child);//取时间文本
re.content=DOC.GetDom().GetTextAll(cont).Right("排名");//取排名文本
re.id=MD5(URL.urlname) ;//id
RESULT.AddRec(re,this.schemaid);//输出结果
⑤查看采集预览
查看采集预览,并核对一下内容是否采集正确。
![](https://static001.geekbang.org/infoq/bb/bba4fce58558be213d021ba17c73f0f8.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【采集预览】
l 采集步骤
三、数据采集
1.建立数据表单:
选择【数据建表】,点击【表单列表】中该模板的表单,在【关联数据表】中选择【创建】,表名称自定义,这里命名为【shoushilv】(注意命名不能用数字、文字和特殊符号),点击【确定】。创建完成,勾选数据表,并点击右上角保存按钮。
![](https://static001.geekbang.org/infoq/51/514b665b38adb01cf3ee70466f63461c.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【建立关联数据表】
2.开始采集
选择【数据采集】,勾选任务名称,点击【开始采集】,则正式开始采集。
![](https://static001.geekbang.org/infoq/c9/c9412d7a9e8bfe9a733aefb870beecf1.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【开始采集】
3.导出数据
采集结束后,可以在【数据浏览】中,选择数据表查看采集数据,并可以导出数据。
![](https://static001.geekbang.org/infoq/6a/6a2a852ba5c757589cf29b2b4690f1ec.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【数据浏览】
![](https://static001.geekbang.org/infoq/40/402b08c243303398b46229f7fbcc3ab5.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【数据导出】
4.导出的文件打开如下图所示:
![](https://static001.geekbang.org/infoq/cc/cc03e0b628c264235c410abbade153a8.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
【查看导出数据】
本教程仅供教学使用,严禁用于商业用途!
版权声明: 本文为 InfoQ 作者【前嗅大数据】的原创文章。
原文链接:【http://xie.infoq.cn/article/88c543b2ff66095bf5e6e9876】。文章转载请联系作者。
评论