`
lovnet
  • 浏览: 6921316 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

转载,一个可以解析HTML中链接和图片URL的代码

阅读更多

function ExtractHtmlTagValues(const HtmlText: string; TagName, AttribName: string; var Values: TStrings): integer;

function FindFirstCharAfterSpace(const Line: string; StartPos: integer): Integer;
var i: integer;
begin
Result := -1;
for i := StartPos to Length(Line) do
begin
if (Line[i] <> ' ') then
begin
Result := i;
exit;
end;
end;
end;

function FindFirstSpaceAfterChars(const Line: string; StartPos: integer): Integer;
begin
Result := PosEx(' ', Line, StartPos);
end;

function FindFirstSpaceBeforeChars(const Line: string; StartPos: integer): Integer;
var i: integer;
begin
Result := 1;
for i := StartPos downto 1 do
begin
if (Line[i] = ' ') then
begin
Result := i;
exit;
end;
end;
end;

var InnerTag: string;
LastPos, LastInnerPos: Integer;
SPos, LPos, RPos: Integer;
AttribValue: string;
ClosingChar: char;
TempAttribName: string;
begin
Result := 0;
LastPos := 1;
while (true) do
begin
// find outer tags '<' & '>'
LPos := PosEx('<', HtmlText, LastPos);
if (LPos <= 0) then break;
RPos := PosEx('>', HtmlText, LPos+1);
if (RPos <= 0) then
LastPos := LPos + 1
else
LastPos := RPos + 1;

// get inner tag
InnerTag := Copy(HtmlText, LPos+1, RPos-LPos-1);
InnerTag := Trim(InnerTag); // remove spaces
if (Length(InnerTag) < Length(TagName)) then continue;

// check tag name
if (SameText(Copy(InnerTag, 1, Length(TagName)), TagName)) then
begin
// found tag
AttribValue := '';
LastInnerPos := Length(TagName)+1;
while (LastInnerPos < Length(InnerTag)) do
begin
// find first '=' after LastInnerPos
RPos := PosEx('=', InnerTag, LastInnerPos);
if (RPos <= 0) then break;

// this way you can check for multiple attrib names and not a specific attrib
SPos := FindFirstSpaceBeforeChars(InnerTag, RPos);
TempAttribName := Trim(Copy(InnerTag, SPos, RPos-SPos));
if (true) then
begin
// found correct tag
LPos := FindFirstCharAfterSpace(InnerTag, RPos+1);
if (LPos <= 0) then
begin
LastInnerPos := RPos + 1;
continue;
end;
LPos := FindFirstCharAfterSpace(InnerTag, LPos); // get to first char after '='
if (LPos <= 0) then continue;
if ((InnerTag[LPos] <> '"') and (InnerTag[LPos] <> '''')) then
begin
// AttribValue is not between '"' or ''' so get it
RPos := FindFirstSpaceAfterChars(InnerTag, LPos+1);
if (RPos <= 0) then
AttribValue := Copy(InnerTag, LPos, Length(InnerTag)-LPos+1)
else
AttribValue := Copy(InnerTag, LPos, RPos-LPos+1);
end
else
begin
// get url between '"' or '''
ClosingChar := InnerTag[LPos];
RPos := PosEx(ClosingChar, InnerTag, LPos+1);
if (RPos <= 0) then
AttribValue := Copy(InnerTag, LPos+1, Length(InnerTag)-LPos-1)
else
AttribValue := Copy(InnerTag, LPos+1, RPos-LPos-1)
end;

if (SameText(TempAttribName, AttribName)) and (AttribValue <> '') then
begin
Values.Add(AttribValue);
inc(Result);
end;
end;

if (RPos <= 0) then
LastInnerPos := Length(InnerTag)
else
LastInnerPos := RPos+1;
end;
end;
end;
end;





For eg. you want to extract all links in a page, just do:


var Links: TStrings;
begin
Links := TStrings.Create;
try
LinksFound := ExtractHtmlTagValues(HtmlText, 'A', 'HREF', Links);
Showmessage(Links.Text);
finally
Links.Free;
end;
end;

原始连接:
http://www.delphi3000.com/articles/article_4365.asp?SK=

分享到:
评论

相关推荐

    自动识别HTML代码里的图片链接 (代码行)

    此代码片段是一个开源解决方案,可以被集成到任何需要处理HTML内容并下载其中图片的项目中。它特别适用于网站爬虫或者需要离线存储网页内容的场景。需要注意的是,由于它使用了`HttpContext.Current.Server.MapPath`...

    解析Html的源代码

    在这个例子中,我们创建了一个BeautifulSoup对象,可以使用它来查找特定标签、属性或者内容。例如,查找所有的段落(`&lt;p&gt;`标签): ```python paragraphs = soup.find_all('p') for p in paragraphs: print(p.text...

    Spring三大URL路径解析器(附工程源代码)

    本篇文章将深入探讨Spring中的三种主要URL路径解析器,包括`SimpleUrlHandlerMapping`、`RequestMappingHandlerMapping`以及`BeanNameUrlHandlerMapping`,并提供一个附带的工程源代码供读者实践。 1. **...

    Android-AndroidRichText富文本解析器支持网络图片图片和链接点击事件

    在Android开发中,文本输入和显示是一个至关重要的部分,特别是在构建用户界面时。"Android-AndroidRichText富文本解析器支持网络图片图片和链接点击事件"这个项目专注于提供一种高效且功能丰富的解决方案来处理富...

    vue解析后端返回的二维码图片数据流

    Chrome浏览器的preview中可以看到二维码(图片),如下: 解析思路: 尝试用二进制大对象Blob解析,然后生成图片的URL,代码如下: // QRCode 为后端接口返回的图片数据流 const blob = new Blob([QRCode]) const ...

    jurl一个快速简单的URL解析Java库

    `jurl`是一个针对Java开发者的高效且易用的URL解析库。这个库的设计目标是提供对URL的快速处理,同时包含了对UTF-8编码的支持以及对URL路径的有效解析。在Java开发中,处理URL是常见的任务,比如在构建网络请求、...

    数控机床G代码解析demo提取G代码中的各种数据

    例如,可以创建一个字典,键为坐标轴('X'、'Y'),值为对应的坐标值。 5. **错误检查**:确保提取的数据符合G代码规范,处理可能存在的语法错误或不完整数据。 6. **数据应用**:提取出的数据可以用于多种目的,...

    QQ、微信表情符号解析:字符串到图片URLqq-wechat-emotion-parser-master.zip

    每个表情都有一个唯一的标识符(即字符串),解析器需要知道这个标识符和图片URL之间的对应关系。这通常通过数据结构如字典或者数据库来实现。 4. **微信小程序应用**: 标签提到的是“微信小程序”,这意味着这个...

    Android通过网络URL获取图片并显示

    在Android开发中,展示网络上的图片是一项常见的任务。这一过程涉及到多个步骤,包括网络请求、数据...使用合适的网络库和图片加载库能有效提高效率和用户体验。在实际开发中,应根据项目需求选择最适合的工具和方法。

    自己用c++写的html文件解析程序(html-x)

    5. **DOM解析**:DOM(Document Object Model)是HTML和XML文档的标准表示,程序可能使用DOM模型来构建一个树形结构,方便遍历和修改HTML文档。 6. **开源**:意味着源代码可供公众查看、使用和改进,体现了开放源...

    从本地选择二维码图片解析的简单示例

    总的来说,从本地选择二维码图片解析是一个实用且常见的功能,涉及图像处理、解码算法和用户界面交互等多个方面。开发者需要理解二维码的工作原理,熟悉相应的编程库,并掌握良好的用户交互设计,才能实现一个高效、...

    vb6生成和解析二维码条形码的动态链接库 标准dll

    标题提到的“vb6生成和解析二维码条形码的动态链接库 标准dll”就是一个专门为此目的设计的组件。 动态链接库(DLL)是一种可共享的代码库,它可以被多个应用程序同时调用,以减少内存占用和提高代码重用性。VB6...

    java获取网网页中出现的图片及判断网页代码中是否包含有效图片

    3. **保存图片**:从网页内容中解析出图片链接后,可以再次使用`URL`和`BufferedInputStream`下载图片,并用`FileOutputStream`将其保存到本地文件系统。 4. **正则表达式匹配图片链接**:为了从HTML源码中提取图片...

    findurl从网页的代码中检索你需要的连接,比如jpg

    在IT行业中,`findurl` 是一个常见的任务,它涉及到从网页源代码中提取特定类型的链接,例如图像(如jpg格式)或其他资源。这个任务在数据抓取、网络爬虫和自动化信息处理等领域中十分常见。PowerBuilder 是一款强大...

    AT指令解析代码

    在STM32微控制器上实现AT指令解析代码,可以让你的设备具备拨打电话、发送短信、使用FTP和HTTP协议的能力,这对于创建一个嵌入式通信系统至关重要。 首先,让我们深入理解AT指令。"AT"代表"Attention",它是一个...

    VB对URL代码href分析,并调用FLVCD获取FLV地址

    在解析HTML源代码时,可以使用正则表达式或者DOM解析库。正则表达式能快速匹配特定格式的`href`,而DOM解析则可以更精确地处理复杂的HTML结构。VB中可以利用MSXML库提供的DOMDocument类进行解析。例如: ```vb Dim ...

    url_迅雷url转换_php_

    标题中的“url_迅雷url转换_php_”指的是一个基于PHP开发的URL转换工具,它主要功能是将常规的URL转换成迅雷、快车、旋风等下载管理器所支持的专用下载链接。这样的工具在处理需要特定下载器才能高速下载的资源时...

    java 解析 html

    首先,我们需要一个强大的库来解析HTML,如Jsoup。Jsoup是一个用于处理实际世界HTML的Java库,它提供了一种易于使用的API,可以方便地解析、操作和抓取HTML内容。要使用Jsoup,首先需要将其添加到项目的依赖中,如果...

    C# 表达式解析器源代码(修正)

    C#表达式解析器是一个程序,它能够分析输入的字符串表达式,并将其转换为计算机可以理解的形式,以便执行计算或逻辑操作。 首先,让我们了解什么是表达式解析。在编程中,表达式是包含变量、常量、运算符和函数的...

    at指令发送和解析模块代码

    在使用RM08模块时,开发者需要编写一个AT指令发送和解析的模块,以便与模块进行有效的通信。这个模块通常包括以下部分: 1. **初始化模块**:在开始通信前,必须先初始化RM08模块。这通常涉及设置波特率、数据位、...

Global site tag (gtag.js) - Google Analytics