一、采集器的制作的基本知识点。
1、懂一些简单的正则表达式的知识,知道些基本知识对大家在采集软件设置规则的时候是有帮助,正则表达式的一些基础知识是很容易掌握的,而绝大多数采集用的是最基本的正则表达式的内容。
如: 你起码要知道”.” “\n” “\s” ”\d” “*” “+” “?” “{3,5}” “[3-6]”。 了解这些简单正则式的基本含义,这里不作详细详解,大家可以从网上查到资料。我个人觉得正则还是比较容易学习,但是不经常使用的话,忘记的比较快。经常会 出现边在网上查正则,边书写采集规则的情况。
2、会使用一些程序命令将网页的内容正确抓取下来。
——-使用webclient来抓取网页内容
String PageUrl = @”http://www.79zw.com/files/article/info/65/65670.htm”;
WebClient wc = new WebClient();
///方法一:
Byte[] pageData = wc.DownloadData(PageUrl);
ContentHtml.Text = Encoding.Default.GetString(pageData);
/// 方法二:
/// ***************代码开始**********
Stream resStream = wc.OpenRead(PageUrl);
StreamReader sr = new StreamReader(resStream,System.Text.Encoding.Default);
ContentHtml.Text = sr.ReadToEnd();
resStream.Close();
/// **************代码结束********
///
wc.Dispose();
——-使用webrequest来抓取网页内容
PageUrl = @”http://www.79zw.com/files/article/info/65/65670.htm”;
WebRequest request = WebRequest.Create(PageUrl);
WebResponse response = request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
String content = sr.ReadToEnd();
resStream.Close();
sr.Close();
——使用xmlhttp来抓取网页内容
XMLHTTP xhttp = new XMLHTTP();
string url=@”http://www.79zw.com/files/article/info/65/65670.htm”;
xhttp.open(“post”, url, false, null, null);
xhttp.send(“”);
Byte[] bb = (Byte[])xhttp.responseBody;
xhttp.abort();
二、对小说站进行采集的思路。
就看一下如何采集世纪,世纪的站长不在这里吧?
只要知道一个书本的ID号就可以开始啦。。。。。
书籍简介页面:http://www.79zw.com/files/article/info/59/59295.htm
<font size=”4″ color=”red”>佛本是道<img
<td width=”25%”>类 别:仙侠奇侠</td>
<td width=”25%”>作 者:梦入神机</td>
<td width=”25%”>管 理 员:</td>
<td width=”25%”>全文长度:2008072字</td>
<td>最后更新:2007-03-04</td>
<td>文章状态:完成</td>
<td>授权级别:暂未授权</td>
<td>首发状态:他站首发</td>
<td>总点击数:13197071</td>
<td>本月点击:693848</td>
<td>本周点击:270326</td>
<td>本日点击:20941</td>
书籍目录页面:http://www.79zw.com/files/article/html/59/59295/index.html
<td colspan=”3″ class=”vcss”>
正文 </td>
</tr>
<tr>
<td class=”ccss”>
<a href=”1639383.html”>前 言</a>
</td>
<td class=”ccss”>
<a href=”1639384.html”>第一章 原 由 第一节 奥林匹亚风云</a>
</td>
<td class=”ccss”>
<a href=”1639385.html”>第二节神符巨人</a>
</td>
</tr>
书籍章节内容页面:http://read.2100book.com/files/article/html/45/45647/2144288.html
通过前面的采集代码,一层一层的从网页上抓取数据,然后根据你设置的正则表达式标签,把所需要的内容取出来,判断是文字内容,还是图片内容,然后分别写入后端数据库。
如果是批量采集就按照设置的ID号不断循环,直到全部采集完。如果你设置从1-50000号开始采集,就基本可以目标书站的书全部采集完。
就算目标站中有空号,比如说:4678这个号没有书,这样大抓取这个号的时候会出现错误,通过正则采集判断是空号就放弃采集这个ID号就成啦。
手上的蓝心采集已经实现了三种批采模式
三、防采集的基本思路。
目前而言,防采集还没有一个还没有一个完全彻底的解决方案
一,增加采集的规则难度,经常变换规则,这种方法对于防止采集是比较容易使用的方法,而且效果比较好,容易。
大家请看两个地址:
1、 http://read.2100book.com/files/article/html/45/45647/index.html
2、 http://www.79zw.com/files/article/html/39/39621/index.html
抽出我们所需要的资料
世纪:<a href=”1639384.html”>第一章 原 由 第一节 奥林匹亚风云</a>
<a href=”1639385.html”>第二节神符巨人</a>
<a href=”1639386.html”>第三节异次元空间门</a>
<a href=”1639387.html”>第四节 龙之墓地</a>
世纪的章节规则:<a href=”\d+.html”>[^<|>]*</a>
79:<a href=696794.html title=”第一章原由第一节奥林匹亚风云”>第一章原由第一节奥林匹亚风云</a>
<a title=” href=8384.html 生成时间:2007-3-9 12:33:57″ href=696795.html>第二节神符巨人</a>
<a href=”696796.html”>第三节异次元空间门</a>
79的章节规则就不好写啦,有3个,难度比世纪就大多啦。
如果把内容页和图片页的规则也设置很多个的话,这样采集的难度就更大了,非牛人不能采集。
二、可以设置IIS和apache对图片的采集进行限制。
IIS通过重写一些附加模块可以实现,但是直接在IIS里通过设置来实现方法比较困难,需要附加模块来做这个事。
Apache可以实现图片简单防采和防盗链,设置比较简单,而且很实用。
SetEnvIfNoCase Referer “^http://www.88zw.com” local_ref=1
SetEnvIfNoCase Referer “^http://88zw.com” local_ref=1
SetEnvIfNoCase Referer “^$” local_ref=1
SetEnvIf Request_URI /images/logo(.)+ local_ref=1
<FilesMatch “\.(gif|jpg|bmp|jpeg|png)”>
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
</FilesMatch>