火车采集器/采集任务新建
任务是采集器采集数据时的基本工作单元,它一定是建立在站点中的。采集器通过运行任务来采集发布数据。
任务工作的步骤总体可以分为三步:采网址,采内容,发内容。一个任务的运行可以任意选择哪几步。而采集器又可以同时运行多个任务(默认设置是同时最多运行3个任务)。
任务的编辑界面如图:
采集器的使用最主要的就是对任务的设置。而采集数据可以分为两步,第一步是:采网址,第二步:采内容。
采网址[ ]
采网址,就是从列表页中提取出内容页的地址。
- 从页面自动分析得到地址连接
以http://roll.news.sina.com.cn/news/gjxw/hqqw/index_1.shtml 页面为例。来采集这个网址上的新闻,这个页面中有很多新闻的链接,要采集每个链接中新闻内容.首先需要将每个新闻的链接地址抓取到也就是抓取内容页的地址。
先将该列表页地址添加到采集器里。点击“<<向导添加”后弹出“添加开始采集地址”对话框。选择“单条网址”并将要采集的网址添加进去。如图:
然后点击“添加”按钮,并点击“完成”按钮,即可添加一条采集地址。如图:
点击“完成”按钮后即可添加了一条采集网址。内容页的地址就从这条地址中提取出来。先不作任何过滤提取,在软件里测试下可以从该地址中得到哪些地址。如图:
点击“开始测试网址采集”按钮后会得到http://roll.news.sina.com.cn/news/gjxw/hqqw/index_1.shtml页面中的所有连接地址。如图:
其中有很多链接地址不是想要的,观察下得到得的地址发现想要的地址都包含有“/w/”。如图:
点击“返回修改设置”按钮回到添加采集地址界面。在“文章内容页面的地址必要包含”处填写上“/w/”(指定内容页的地址必须包含“/w/”),然后再点“开始测试网址采集”如图:
当再次测试得到内容页地址时,就已经过滤了很多地址剩下的地址都是包含“/w/”的,如图:
在采集http://roll.news.sina.com.cn/news/gjxw/hqqw/index_1.shtml页面中的地址时,由原先的81条地址过滤后只剩下了40条地址。和页面比较发现这40条地址就是想要的新闻地址。如果在已经得到的地址中,还想排除一些地址可以通过“不得包含”来过滤。假如要排除2010-03-17日的新闻,可以如图设置:
测试地址后如图:
如果既想过滤掉含有2010-03-17的地址也想过滤掉含有2010-03-18的地址可以通过这样的设置,如果:
中间的竖线“|”代表“或”的意思,上述写法就代表了:抓取的地址不得包含2010-03-17或2010-03-18测试地址后会发现抓取到的地址不会含有2010-03-17或2010-03-18。
- 手动填写链接地址规则:
以百度知道的这个页面为例http://zhidao.baidu.com/q?ct=17&tn=ikaslist&rn=10&word=%CE%EF%C1%F7&lm=0&pn=00,打开这个页面发现一种有76页。其中网址如:
第一页:http://zhidao.baidu.com/q?ct=17&tn=ikaslist&rn=10&word=%CE%EF%C1%F7&lm=0&pn=00 第二页:http://zhidao.baidu.com/q?ct=17&tn=ikaslist&rn=10&word=%CE%EF%C1%F7&lm=0&pn=10 第三页:http://zhidao.baidu.com/q?ct=17&tn=ikaslist&rn=10&word=%CE%EF%C1%F7&lm=0&pn=20 第四页:http://zhidao.baidu.com/q?ct=17&tn=ikaslist&rn=10&word=%CE%EF%C1%F7&lm=0&pn=30 …….
观察后发现每页网址都是按规律递增的。可以按上面所述方法添加网址但需要添加76个单独网址比较繁琐。这种情况的网站可以使用“批量/多页”来添加网址。在任务中点击“向导添加”按钮后添加网址如图:
图中添加的网址 pn=00 部分改为了 pn=(*)n。
“(*)”是通配符,数字变化从0到75表示“(*)”可以代表0,1,2,3…..75,这样拼起的网址就会从pn=00到pn=750正好和要采集的页面及其所有分页。同时也可以如下图所示设置:
将“间隔倍数”设为10,pn=(*),得到的地址也会是从pn=00到pn=75。添加完地址后测试网址得到0级网址76个,如图:
添加了好网址,接下来提取需要的内容页地址。观察下测试得到的1级网址发现要通过“文章内容页面的地址必须包含\不得包含”提取出想要的地址比较困难。这样的情况用“手工填写连接地址规则”比较方便。如图:
点击后,会弹出如下界面:
接下来分析下网页的源代码(html代码),在页面上右击鼠标选择“查看源文件”,如图:
打开源文件可以发现要抓取的内容页连接地址都在里面,如图:
由网页源代码可见要抓取的每个连接地址都包含在统一的一段HTML代码中。如:
<table border=0 cellpadding=0 cellspacing=0><tr><td class=f> <a href="链接地址" target=_blank>
这段代码就是提取网址的脚本规则。选中“启用自定义链接格式得到地址”和“禁用系统自动识别链接”,并如下图设置
这样采集器在采集的时候,会从网页源文件中去匹配上图脚本规则里的HTML代码,匹配到一段这样的代码后会将“[参数]”提取出来(网页的地址)传递给实际连接。实际连接得到参数后可以做任意的组合。如实际连接处可以填写:http://zhidao.baidu.com[参数1] 这样拼接起来得到的地址正好是要抓取的地址。可以简化填写[参数1],采集器会自动补上http://zhidao.baidu.com。当采集器会匹配完所有的和脚本规则中相同的HTML代码,并不是匹配完一次就不再匹配的。测试网址后如图:
采内容[ ]
当所有网址抓取完后就可以开始抓取内容。抓取内容就是采集器请求到内容页后分析内容页的HTML源代码并依据在采集器中的标签规则设置匹配出相应的数据。
在测试到的地址中,任意选择一个子地址,双击选中的地址或者点击“测试该页”按钮。如图:
将会跳转到任务中的“第二步:采集内容规则”如图:
在典型页面中会出现刚才选中的网址,这里就是测试采集内容。左边的标签名下面有:出处、时间、作者、内容、标题,一共五个标签,可以对标签进行添加、删除和编辑等操作。每个标签就是采集后得到的一段内容,可以是从页面中截取的内容,也可以是设置的一个固定的值或其他方式得到的值。点测试按钮后在文本框中会得到典型页面(http://zhidao.baidu.com/question/50942867.html?si=1&wtp=wk)测试的效果,如图:
由图可见,测试页面后得到的内容没经过任何处理所有的网页HTML代码都在。通过在标签中设置就可以提取出所需的内容。假设现在要提取问题,问题补充和最佳答案。首先添加这个三个标签,可以重新添加标签,也可以在上图中标签里编辑。我们重新添加一下。先将原来的标签删除再点击“添加标签”按钮后在“内容页标签编辑框”中填写上标签名:问题。
如图:
再打开http://zhidao.baidu.com/question/50942867.html?si=1&wtp=wk 页面并查看该页的HTML源代码。在源代码中可以找到页面中的问题部分。如图:
在“内容页标签编辑框”中进行相应的设置句可以从网页HTML源代码里得到需要的内容。
复制页面HTML中“
复制这段代码到“内容有标签编辑框”的“开始字符串处”。 “</cq>”是“<div class="f14 B wr" id="question_title"><cq>”后面第一次出现的地方。复制“</cq>”到“结束字符串”处。如图:
点击“确定”按钮后点“测试”按钮得到页面中的数据。如图:
采集器首先从网页源代码(HTML代码)中从头开始往下查找“开始字符串”中的内容第一次出现的位置(例上面:<div class="f14 B wr" id="question_title"><cq>),当找到与“开始字符串”处相同的内容时,再从找到的位置开始往后查找“结束字符串”处中的内容的(例上面:</cq>)第一次出现的位置(后面再次出现时不再理会)。当找到了“开始字符串”和“结束字符串后”就会提取出它们之间的内容作为采集到的内容。
再如来提取最佳答案。新建“答案”标签,分析网页源代码。“<div class="f14 p90 pl10" id="best_answer_content">”是答案得内容前面的一段代码,把它作为“开始字符串”处。通过txt文本中的查找发现这段代码是第一次出现的地方所以可以用做“开始字符串”处的内容。不难发现“<div class="f14 p90 pl10" id="best_answer_content">”后第一次出现的“</div>”正好是在答案内容的结束的地方所以可以将“</div>”当做“结束字符串处的内容”。如图设置。
保存标签测试后得到的效果如图:
这样就采集到了最佳答案内容,发现内容中含有“<ca><pre><\pre><\ca>”这样的HTML代码,内容开头和结尾处也有很多的空格,可以在标签设置里将这些没用的代码排除。设置如图:
其中HTML标签排除中的“所有标签<”是指排除掉采集的内容中的所有“<”括起来的HTML标签。“<ca><pre><\pre><\ca>”就属于“<”类型的标签,所以可以被排除。保存标签测试如图:
这样通过排除一些无用的东西基于可以得到了纯净的内容了。