tory burch white &lt

 
Napisz nowy temat   Odpowiedz do tematu    Forum Naukowe Koło Chemików Uniwersytetu Gdańskiego Strona Główna -> Drogi Gościu!!
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
tods5eshoes
Ununokt



Dołączył: 23 Lut 2011
Posty: 18577
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: England

PostWysłany: Pon 16:57, 14 Mar 2011    Temat postu: tory burch white &lt

StrEnd:string,表示截取结束的标记。
然后定义strTitle、strAuthor、strCopyFrom、strContent:
strTitle:= GetStr(StrSource,’ <p><b>’,’ </b></p>’):
strAuthor:= GetStr(StrSource,’ <tr><td>’,’ </td>’):
strCopyFrom:= GetStr(StrSource,’ <td>’,’ </t[link widoczny dla zalogowanych]t;</tr>’):
strContent:= GetStr(StrSource,’ <p><font>,’ </font></p>’):
<p><b>文章标题</b></p>
<table>
<tr><td>作者</td>
<td>出处</td></tr>
</table>
<p><font>这里是文章内容正文。</font></p>
</body>
对了,这就是列表的开始,那么列表结束的位置,显然是在这里:
今天,我们讨论的是网站新闻采集程序的制作。所谓新闻采集程序,就是自动抓取网上信息,并保存到自己网站数据库的一种程序。现在很多大型网站都有自己的新闻采集系统,其中许多采集系统价值不菲。通过这篇文章,我希望大家都能自己做一个采集程序,来维护自己的网站。
为了便于理解,先阐述一下本文的新闻采集程序的一些基本信息。这里的新闻系统,是用delphi实现,并将采集到的数据保存到本地access数据库。所以,这将是一个基与桌面的采集程序,而不是类似“动易采集”的基于浏览器。个人认为,基于桌面的采集系统,更容易实现强大的功能,有更高的稳定和安全性能。而经过扩展,大家完全可以把这个例子做成可以访问远程数据库的大型采集系统。
这样就完成了一个简单的截取过程。
function AnsiPos(const Substr,[link widoczny dla zalogowanych], S: string): Integer
</html>
这样,就能把文章的标题、作者、出处和内容分别存储在以上变量中。
那么如何取得文章列表里每篇文章的url呢?通过查看源文件,我们发现列表里的每个超链接是这样的格式:<a>Oracle中通过存储过程中返回数据集及在Delphi中使用 </a>。显然,我们只要截取出 “rticle/68/68316.shtm”,再加上http://dev.csdn.net/article/69/ 就是“Oracle中通过存储过程中返回数据集及在Delphi中使用”这篇文章的URL了。
现在,假设我们已经取得了列表中每篇文章的URL,[link widoczny dla zalogowanych],我们只循环读取每篇文章的网页代码,再利用HTML里的特征字符,分离出文章的“标题”、“作者”、“出处”、“内容”等信息,然后一一保存进本地数据库。
函数返回字符串StrSource中从StrSource到StrBegin之间的一段文本。
<hea[link widoczny dla zalogowanych]t;
<meta>
<meta>
<meta>
<meta>
<title>新建网页 1</title>
</head>
function copy(strsource,in_sta,in_end-in_star): string;
接下来,讲一下数据的截取,这里,我定义了这么一个函数:
StrBegin:string类型,[link widoczny dla zalogowanych],表示截取开始的标记。
在说如何制作采集程序之前,我们先来定义一个本地access数据库,用来存取采集到的信息。这个数据库只有一个表,表名”T_Article”,该表有ArticleID、ClassID、Title、Keyword、CopyFrom、Content六个字段,[link widoczny dla zalogowanych],分别代表新闻的编号、类别编号、标题、关键字、出处、内容。
比如:
strtmp:=TForm1.GetStr(‘123456789’,‘12’,‘78’);
首先,所谓采集,第一步当然是要能抓取信息,并且是能按照用户的要求,从网上抓取相关信息。这里假设我们要抓取 [link widoczny dla zalogowanych] 的文章,加到自己网站的“delphi技术”这么一个栏目。首先要做的,是读取 [link widoczny dla zalogowanych] 上的文章列表,然后通过列表索引,逐篇将文章正文内容读到我们的网站数据库。接下来将是关键,如何采集 [link widoczny dla zalogowanych] 上的文章列表。这里分为两步,一、利用delphi网络功能,读取 [link widoczny dla zalogowanych] 的HTML源文件。二、通过分析源文件,截取其中列表部分。第一步的实现,可以用delphi的indy控件族的idHTTP控件,该控件在indy Clients面板,该控件的具体使用,将在后面讲解,现在我们只要知道,给定一个URL地址,就能通过indy控件返回该URL的网页源代码。第二步的实现,则是简单的字符串处理了。
function Get(AURL: string): string; overload;
<td>共 2475 篇文章 第 1/71 页</td><td><a>第一页</a> |
<a>上一页</a> |
<a>下一页</a> |
<a>末页</a> |
跳转到<select>
<option>1</option>
关于函数里用到的AnsiPos和copy,都是系统定义的,可以从delphi的帮助文件里找到相关说明,我在这里也简单罗嗦一下:
<html>
第一步,我们用
StrSource:= idHTTP1.Get(‘http://www.xxx.com/test.htm’);将网页代码保存在strsource变量中。
function TForm1.GetStr(StrSource,StrBegin,StrEnd:string):string;
var
in_star,in_end:integer;
begin
in_star:=AnsiPos(strbegin,strsource)+length(strbegin);
in_end:=AnsiPos(strend,strsource);
result:=copy(strsource,in_sta,in_end-in_star);
end;
tmpStr:= idHTTP1.Get(‘http://www.163.com’);
调用成功后,tmpstr变量里存储的就是网易主页的代码了。
<body>
我们先来讨论第二步如何实现,打开http://dev.csdn.net/articlelist.aspx?c=2 可以看到左边是“我的技术中心”“最新文档列表”等东西,这些和我们没有关系。右边则是一篇篇文章的列表,这些就是我们要的。如何截取列表里的内容呢?查看网页的源代码,CTRL+F查找“标题”,可以发现这样一段代码:
</24038>
<td></td>
<td>
<table>
<tr>
<TD>
<b><font>标题</font></b>
以上的例子,非常简单,如果真正做一个采集程序,还有许多实际因素要考虑进去。比如:错误处理、多线程采集、远程入库、文章内广告内容的过滤、自动分类等等。
运行后,strtmp的值为:’3456’。
返回Substr在S中第一次出现的位置。
AURL参数,是string类型,指定一个URL地址字符串。函数返回也是string类型,返回网页的HTML源文件。比如我们可以这样调用:
解释一下该函数的三个参数:
最后,是将变量的值存储到本地数据库,这一步不讲了,相信大家都会。
在前一篇文章里,我们讨论了新闻采集程序的原理。今天要来具体实现了。
首先,程序将用到idHTTP控件(在indy Clients面板)。关于该控件的详细文档,E文好的朋友可以登陆这里查看:http://www.rfc-editor.org/rfc/rfc2616.txt 本程序用到的GET方法在第53页。网上关于indy的帮助文档也整理了不少,可是我一直没找到中文的。在本程序中,我们只使用idHTTP控件的一个方法,就是idHTTP1.GET 方法。该方法是这样声明的:
返回字符串strsource中,从in_sta(整型数据)开始到in_end-in_star(整型数据)结束的字符串。
下面我们来实际演示一下,假设要采集的文章地址为http://www.xxx.com/test.htm
代码为:
有了以上函数,我们就可以通过设置各种标记,来截取想要的文章内容了。在程序中,比较麻烦的是我们需要设置许多标记,要定位某一项内容,必须设置它的开始和结束标志。比如要取得网页上的文章标题,必须事先查看网页代码,查看出文章标题前边和后边的一些特征代码,通过这些特征代码,来截取文章的标题。
接下来,我们要做的只是利用字符串函数,截取这两段代码中间的部分――“文章列表”。具体函数,也将在后面详细讲解。得到文章列表后,我们还要进一步处理,截取出每篇文章的url地址,因为前边已经讲过,给定一个url,idHTTP控件能够返回网页代码。当我们返回文章列表里每篇文章的源代码的时候,就等于说把文章内容采集回来了,只要进一步分析处理,就能保存进本地数据库,从而完成采集工作。
StrSource:string类型,表示HTML源文件。
other article


[link widoczny dla zalogowanych]

[link widoczny dla zalogowanych]

[link widoczny dla zalogowanych]


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Naukowe Koło Chemików Uniwersytetu Gdańskiego Strona Główna -> Drogi Gościu!! Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


Bluetab template design by FF8Jake of FFD
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
Regulamin