[转载]网站采集 - jyshi - 博客园

[转载]网站采集 – jyshi – 博客园.

一、采集器的制作的基本知识点。

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>

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏