我试图制作一个" API"对于我不拥有的网站,并尝试从页面中删除信息,但是我已经尝试过关于stackoverflow和其他有关DOM和正则表达式的位置的建议,这通常需要一个上下文或特定的div标签,看来这个网站没有使用,只使用通用网站,有没有办法可以从网站上删除信息?
HTML我试图抓住的一些例子:
<div class="col-md-6">
<strong style="font-weight:500;">Date Created</strong>
</div>
<div class="col-md-6">
03-12-2016 4:08PM
div>
或
<div class="col-xs-6 col-md-2 text-center">
<font style="font-size:22px;">
Feb 12, 2016
</font>
<br />
<div style="color:#999;">join date</div>
</div>
我如何能够抓取创建日期(实际日期)和加入日期?我在网络编程方面不是那么先进,所以我找不到任何其他内容,我通常只使用PHP。
答案 0 :(得分:1)
你的样本很差,所以这只是一个展示道路的例子。
基于此HTML示例:
<html>
<head><title>Test</title></head>
<body>
<div class="col-md-6">
<strong style="font-weight:500;">Date Created</strong>
</div>
<div class="col-md-6">
03-12-2016 4:08PM
</div>
<div class="col-xs-6 col-md-2 text-center">
<font style="font-size:22px;">
Feb 12, 2016
</font>
<br />
<div style="color:#999;">join date</div>
</div>
</body>
</html>
我们使用DOMDocument
和DOMXPath
:
$dom = new DOMDocument();
libxml_use_internal_errors( 1 );
$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
然后我们搜索加入日期的正确路径:
$nodes = $xpath->query( '//div[@class="col-xs-6 col-md-2 text-center"]/div[.="join date"]/preceding-sibling::font' );
我们输出其节点值:
echo trim( $nodes->item(0)->nodeValue );
结果:
2016年2月12日
XPath是一种使用短语法处理XML / HTML文档部分的语言,用于复杂搜索。
上述路径意味着:
// Following pattern no matter where they are in the document
div[@class="col-xs-6 col-md-2 text-center"] <div> with class "col-xs-6 col-md-2 text-center"
/div[.="join date"] <div> with “join date” as node value
/preceding-sibling::font preceding sibling with tag <font>
因此,您必须在HTML中搜索最佳的独特模式,以隔离所需的节点并编写适当的模式以匹配它。
答案 1 :(得分:0)
如果您想要抓取的数据没有明显一致的格式,那就不容易了。你需要某种聪明才能找到日期,也许文本“加入日期”在距日期文本n个字符的距离内(所以你可以假设它是相关的,因此你有他们的加入日期)。
制作可靠的工具并不容易。