【发布时间】:2013-09-01 16:21:07
【问题描述】:
目前我正在从 HTML 页面中抓取数据。我的代码之一不起作用。 HTML 内容是这样的。
<ul class="pagination">
<li>
<span class="page active">
1
</span>
</li>
<li>
<a class="page available" href="/somethingherewithanychars1">
2
</a>
</li>
<li>
<a class="page available" href="/somethingherewithanychars2">
3
</a>
</li>
<li>
<a class="page available" href="/somethingherewithanychars3">
4
</a>
</li>
<ul>
我尝试使用此代码获取活动页面链接旁边的 href 值,就像在示例中活动页面链接是第 1 页一样,所以我将获得的 href 值必须是第 2 页,其中值为 /somethingherewithanychars1 但它不起作用
$file_string = file_get_contents($url);
preg_match('/<li><span class="page active">.*?<\/span><\/li><li><a class="page available" href="(.*)">/i', $file_string, $pages);
print_r($pages);
我正在访问的 html 有一些这样的代码
<div class="attributes">
<a class="name" href="/linksTothissite" data-hovercard-id="somechars">link1</a>
<span class="list">
USA
</span>
<a class="name" href="/linksTothissite" data-hovercard-id="somechars">link2</a>
<span class="list">
CANADA
</span>
</div>
我尝试使用此代码获取值,我可以获取链接 1 和链接 2
preg_match_all('/<a class="name" href=".*?" data-hovercard-id=".*?">(.*)<\/a>/i', $file_string, $values);
这个我也可以拿到美国和加拿大
preg_match_all('/<span class="list">(.*?)<\/span>/s',$file_string, $values);
$val= $values[1];
为什么我的 preg_match 没有得到我需要的值?我也尝试使用 pre_match_all() 但我仍然在我的 print_r Array () 中得到一个输出,但我的其余代码可以工作。
【问题讨论】:
-
也许这有帮助:stackoverflow.com/a/1732454
-
Regex 仅适用于此类任务,前提是您知道自己在做什么。看到您的 preg_match 甚至没有考虑
<li>和<span之间的空格,您可能应该调查 simpler alternatives。 -
我明白了。我尝试添加我的代码以忽略空格和换行符,但仍然无法正常工作。其他代码也有换行符,但我可以得到它的值。
-
@Cobra_Fast 请不要发布指向该问题的链接,因为它们对读者没有帮助,除非您用他们可以使用的答案跟进它。 你知道评论的重点,那堵文字墙是用正则表达式解析 HTML 是个坏主意。但是,对于正在询问的其他人来说,这根本不清楚。更糟糕的是,它并没有为读者指出任何可以帮助可靠地解析 HTML 的有用解决方案。
-
@AndyLester 我链接的帖子以“您是否尝试过使用 XML 解析器代替?”...
标签: php regex html-parsing