首页 > 编程 > PHP > 正文

PHP抓取网页的所有超链接的代码问题

2020-03-24 18:37:38
字体:
来源:转载
供稿:网友
通用HTML标准超链接参数取得html' target='_blank'>正则表达式测试

因为最近要做一个类似专业搜索引擎的东西,需要抓取网页的所有超链接。
大家帮忙测试一下子,下面的代码是否可以针对所有的标准超链接。

测试代码如下:
?php
//--------------------------------------------------------------------------
//Filename:Noname1.php
//Description:通用链接参数获取正则表达式测试
//Requirement:PHP4(http://www.php.net)
//Copyright(C),HonestQiao,2005,AllRightsReserved.
//Author:HonestQiao(honestqiao@hotmail.com)
//参数说明:
//$strSource:包含标准链接的HTML网页
//$strResult:处理的结果
//附加说明:
//标准链接,使用 a /a 形势包含的链接
//--------------------------------------------------------------------------
$strSource= HTML
ahref=1.htm t1 /a
ahref='2.htm' t2 /a
ahref= 3.htm t3 /a
ahref=4.htm >HTML;
preg_match_all('/ a.*?(?:|//t|//r|//n)?href=[/' ]?(.+?)[/' ]?(?:(?:|//t|//r|//n)+.*?)? (.+?) //a.*? /sim',$strSource,$strResult,PREG_PATTERN_ORDER);
for($i=0;$i count($strResult[1]);$i++)
{
printf( %dhref=(%s)title=(%s)/n ,$i,$strResult[1][$i],$strResult[2][$i]);
}
?

如果您的测试数据,符合标准链接,但是此处没有被处理出来,请告诉我测试数据,以及你的测试环境。

谢谢。

也欢迎提供任何怪异的超链接,不过使用javascript来打开链接的除外。

[本帖最后由HonestQiao于2005-11-621:29编辑]


ydlhero 回复于:2005-11-06 17:44:26

版大很多我看不懂可否提供正则表达方法的一些资料
我知道手册有点但那点点远远不够^_^

HonestQiao 回复于:2005-11-06 18:37:41

http://www.pcre.org/

如果要深究,可以查看这里。

太深奥而其表达也太过于简略,无法用通俗的语言去表达和解释。

cloudchen 回复于:2005-11-06 20:27:41

匹配总是不能做到适应任何情况的,只要能适应一些常见的标记方法就OK了,否则不是一个正则能搞定的,浏览器在分析html标记时极其错误的写法也就忽略

这个有个问题asdfhref= 1.htm 这也能获取到不太合适把,这样就不成获取属性了,得改改

HonestQiao 回复于:2005-11-06 21:18:40

引用:原帖由cloudchen于2005-11-620:27发表
匹配总是不能做到适应任何情况的,只要能适应一些常见的标记方法就OK了,否则不是一个正则能搞定的,浏览器在分析html标记时极其错误的写法也就忽略

这个有个问题asdfhref= 1.htm 这也能获取到不太合...



等一下子我在修改,嘿嘿。

[本帖最后由HonestQiao于2005-11-621:24编辑]

HonestQiao 回复于:2005-11-06 21:21:36

已经修正了,作为:

preg_match_all('/ a.*?(?:|//t|//r|//n)?href=[/' ]?(.+?)[/' ]?(?:(?:|//t|//r|//n)+.*?)? (.+?) //a.*? /sim',$strSource,$strResult,PREG_PATTERN_ORDER);


[本帖最后由HonestQiao于2005-11-621:29编辑]

litie123 回复于:2005-11-06 21:57:02

ahref= so.php?id gfgfd 这个有问题 /a

笨狗 回复于:2005-11-07 08:23:00

如果不是一定要用php的话
偶推荐用perl的HTML::TokeParser
很好用D

HonestQiao 回复于:2005-11-07 08:44:23

引用:原帖由笨狗于2005-11-708:23发表
如果不是一定要用php的话
偶推荐用perl的HTML::TokeParser
很好用D


用perl很简单,作这个。

不果现在用php.

HonestQiao 回复于:2005-11-07 08:45:31

引用:原帖由litie123于2005-11-621:57发表
ahref= so.php?id gfgfd 这个有问题 /a


啊,这也够BT的啊。

langyufeng 回复于:2005-12-01 16:54:14

引用:原帖由HonestQiao于2005-11-708:45发表


啊,这也够BT的啊。


先replace掉 就好拉

Haohappy 回复于:2005-12-01 21:43:44

供参考呵呵。

preg_match_all( ' /s*a/s.*?href/s*=/s*#find ahref=
([/ /'])?#findsingleordoublequote
(?(1)(.*?)//1|([^/s/ ]+))#ifquotefound,matchuptonextmatching
#quote,otherwisematchuptonextspace
'isx ,$document,$links);

giant35 回复于:2006-07-08 19:14:04

a.*?/s*href/s*=[/' ]?(.+?)[/' ].*? (.+?) /ahtml教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表