嗯,这个是前几天弄网页下载工具的时候查找到的,帮助很大,保存一份

说到网页采集,通常大家以为到网上偷数据,然后把到收集到的数据挂到自己网上去其实也可以将采集到的数据做为公司的参考,或把收集的数据跟自己公司的业务做对比等
目 前网页采集多为3P代码为多(3P即ASPPHP JSP)用得最有代表的就动易科技公司BBS中新闻采集系统,和网上流传的新浪新闻采集系统等都是用ASP程序来使用,但速度从理论上来说不是很好如果尝 试用其它软件的多线程采集是不是更快?答案是肯定的用DELPHIVCVBJB都可以,PB似乎比较不好做以下用DELPHI来解释采集网页数据
一 简单的新闻采集
新闻采集是最简单的,只要识别标题副题作者出处日期新闻主体分页就可以了在采集之前肯定要取得网页的内容,所以在DELPHI里加入idHTTP控件(在indy Clients面板),然后用idHTTP1.GET 方法取得网页的内容,声明如下:
function Get(AURL: string): string; overload;
AURL参数,是string类型,指定一个URL地址字符串函数返回也是string类型,返回网页的HTML源文件比如我们可以这样调用:
tmpStr:= idHTTP1.Get(http://www.163.com);
调用成功后,tmpstr变量里存储的就是网易主页的代码了
接下来,讲一下数据的截取,这里,我定义了这么一个函数:
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;
StrSource:string类型,表示HTML源文件
StrBegin:string类型,表示截取开始的标记
StrEnd:string,表示截取结束的标记
函数返回字符串StrSource中从StrSource到StrBegin之间的一段文本
比如:
strtmp:=TForm1.GetStr(A123BCD,A,BC);
运行后,strtmp的值为:123
关于函数里用到的AnsiPos和copy,都是系统定义的,可以从delphi的帮助文件里找到相关说明,我在这里也简单罗嗦一下:
function AnsiPos(const Substr, S: string): Integer
返回Substr在S中第一次出现的位置
function copy(strsource,in_sta,in_end-in_star): string;
返回字符串strsource中,从in_sta(整型数据)开始到in_end-in_star(整型数据)结束的字符串
有 了以上函数,我们就可以通过设置各种标记,来截取想要的文章内容了在程序中,比较麻烦的是我们需要设置许多标记,要定位某一项内容,必须设置它的开始和结 束标志比如要取得网页上的文章标题,必须事先查看网页代码,查看出文章标题前边和后边的一些特征代码,通过这些特征代码,来截取文章的标题
下面我们来实际演示一下,假设要采集的文章地址为http://www.xxx.com/test.htm
代码为:
<html>
<head>
<meta http-equiv=”Content-Language” content=”zh-cn”>
<meta content=”Microsoft FrontPage 5.0″>
<meta content=”FrontPage.Editor.Document”>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
<title>新建网页 1</title>
</head>
<body>
<p align=”center”><b>文章标题</b></p>
<table border=”1″ cellpadding=”0″ cellspacing=”0″ style=”border-collapse: collapse” bordercolor=”#111111″ width=”100%” >
<tr><td width=”60%”>作者</td>
<td width=”40%”>出处</td></tr>
</table>
<p><font size=”2″>这里是文章内容正文</font></p>
<a href=’..new_pr.asp’>上一页</a>??<a href=’new_ne.asp’>下一页</a>
</body>
</html>
第一步,我们用StrSource:= idHTTP1.Get(http://www.xxx.com/test.htm );将网页代码保存在strsource变量中
然后定义strTitlestrAuthorstrCopyFromstrContent:
strTitle:= GetStr(StrSource, <p align=”center”><b>, </b></p>):
strAuthor:= GetStr(StrSource, <tr><td width=”60%”>, </td>):
strCopyFrom:= GetStr(StrSource, <td width=”40%”>, </td></tr>):
strContent:= GetStr(StrSource, <p><font size=”2″>, </font></p>):
这样,就能把文章的标题副题作者出处日期内容和分页分别存储在以上变量中
第二步,用循环的办法,打开下一页,并取得内容,加到strContent变量中
StrSource:= idHTTP1.Get(new_ne.asp);
strContent:= strContent +GetStr(StrSource, <p><font size=”2″>, </font></p>):
然后再判断有没有下一页,如果还有就接着取得下一页的内容
这样就完成了一个简单的截取过程从以上的程序代码可以看到,我们使用的截取办法都是找截取内容的头部和尾部的,如果遇到这个头部和尾部有多个怎么办?似乎没办法,只会找到第一个,所以在找之前应该验证一下是不是只有一处有这个截取的内容的前后部
以上内容没有程序验证,仅供参考,如果认为有用可以试试
///
用 Delphi 下载网页

http://dev.csdn.net/develop/article/61/61609.shtm

新建一个工程,放上一个TIdHTTP控件,一个TIdAntiFreeze控件,一个TProgressBar用于显示下载进度最后放上一个TButton用于开始执行我们的命令代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
MyStream:TMemoryStream;
begin
IdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.
MyStream:=TMemoryStream.Create;
try
//下载我站点的一个ZIP文件
IdHTTP1.Get(‘http://www.138soft.com/download/Mp3ToExe.zip’,MyStream);
except//INDY控件一般要使用这种try..except结构.
Showmessage(‘网络出错!’);
MyStream.Free;
Exit;
end;
MyStream.SaveToFile(‘c:\Mp3ToExe.zip’);
MyStream.Free;
Showmessage(‘OK’);
end;

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
ProgressBar1.Max:=AWorkCountMax;
ProgressBar1.Min:=0;
ProgressBar1.;
end;
IdHTTP1的Get还有一种形式就是获取字符串:例如,上面的程序可以改写成:
procedure TForm1.Button1Click(Sender: TObject);
var
MyStr:String;
begin
IdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.
try
MyStr:=IdHTTP1.Get(‘http://www.138soft.com/default.htm’);
except
Showmessage(‘网络出错!’);
Exit;
end;
Showmessage(MyStr);
end;

DELPHI读取网页源文件和获取字符串相关推荐

  1. android读取网页标题,如何获取WebView中页面的Title信息

    应用开发中需要获取WebView当前页面的标题,可能通过对WebChromeClient.onReceivedTitle()方法的重写来实现 代码如下:public class MainActivit ...

  2. python3读取网页_python3+selenium获取页面加载的所有静态资源文件链接操作

    软件版本: python 3.7.2 selenium 3.141.0 pycharm 2018.3.5 具体实现流程如下,废话不多说,直接上代码: from selenium import webd ...

  3. 使用vb获取网页源文件并保存的简单代码

    使用vb获取网页源文件并保存的简单代码 Private Sub Command1_Click() Inet1.URL = "HTTP://www.wangjianran.com/" ...

  4. 获取按键精灵论坛网页源文件

    //TracePrint url.get("http://11.2.191.180//log_in.html/") TracePrint url.get("http:// ...

  5. C语言 读取字符串数组中的字符串并获取字符串的长度

    #include <stdio.h> #define LENGTH 128 #define NUMBER 5int main(void){int i;char s[NUMBER][LENG ...

  6. java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...

    本文主要向大家介绍了Java语言通过URL读取网页数据并保存到本地文件(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java通过URL读取网页数据并保存到本地文件(代码 ...

  7. Go 学习笔记(31)— 字符串 string、字符 rune、字节 byte、UTF-8 和 Unicode 区别以及获取字符串长度

    1. 字符串 string 类型 Go 语言中字符串的内部实现使用 UTF-8 编码,通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问.当然, Go 语言也支持按照传统的 ASCII ...

  8. VB 读取资源文件里面的字符串

    Private Sub Form_Load() Dim TempStr() As Byte TempStr = LoadResData(101, 6) Text1.Text = TempStr End ...

  9. 艺赛旗RPA 网页处理系列(四):网页表格中获取数据,并点击相应记录后的按钮操作说明总结

    目前艺赛旗RPA已经更新到8.0版本,可以让所有用户免费下载试用http://www.i-search.com.cn/index.html?from=line1 (复制链接下载) 问题描述 最近有很多 ...

  10. Delphi编程中资源文件的应用

    Delphi编程中资源文件的应用 2008-02-03 14:08Dephi中资源文件的应用 /转自 http://chamlly.spaces.live.com/blog/cns!548f73d87 ...

最新文章

  1. sap oracle 内存参数,ORACLE 25个需要深思熟虑重要的初始化参数
  2. Asp.net2.0下的大文件上传服务器控件
  3. python自媒体创作_做自媒体该做什么领域?
  4. 中小企业SaaS型软件BI的发展前景
  5. 【ECCV2020】接收论文列表part1
  6. 【第4篇】Python爬虫实战-抓取B站弹幕视频
  7. android 混淆移除log,关于安卓代码混淆和Release版本中去除Debug信息
  8. 将Excel列表数据转换成html代码
  9. LTE系统信息 --- MIB、SIB
  10. 试用bus hound来分析STM32CubeMX来生成USB_HID_Mouse工程
  11. SW中如何将拉伸的物体转化为钣金件
  12. @ELK集群环境部署搭建
  13. 第六章:个人主页和头像
  14. 跑步听歌用哪种耳机更好?精挑五款适合跑步听歌的耳机分享
  15. Win10下运行复活之秦殇前传
  16. 手机网页html字体很小的解决办法
  17. 计算机配置好坏怎么看,电脑配置怎么看 史上最全的查看电脑配置好坏方法
  18. [转载]苹果公司与分工原理
  19. “坝上”到底在哪里?
  20. ORACLE数据库 自动备份 定时计划任务 windows

热门文章

  1. windows 全系列电脑加速,告别电脑“卡”的时代
  2. FRM 风险管理基础:复习提纲二
  3. Redis源码解读(七)——基本类型—dict
  4. python最新抢票脚本
  5. 一次macbook安装iftop失败的经历及解决方式
  6. Joyoshare Media Cutter for Mac(智能媒体剪辑软件)激活版
  7. 基于centos7和windows 搭建局域网wiki.js知识管理库的两种解决方案
  8. “新基建”投资背景下 安防企业如何把握发展机遇?
  9. 关于chm提示 已取消到该网页的导航的解决方法
  10. Hacker(15)----嗅探原理