Javascript 如何刮;含糊的;网站上的信息?
我正在尝试为一个我不拥有的网站制作一个“API”,并尝试从页面上刮取信息,但是我尝试了关于stackoverflow和其他关于DOM和regex的位置的建议,这些位置通常需要上下文或特定的div id标记,这表明该网站不使用,而只是使用一般的标记,有没有办法从网站上刮取信息 我会尝试抓取的HTML示例:Javascript 如何刮;含糊的;网站上的信息?,javascript,php,html,regex,web-scraping,Javascript,Php,Html,Regex,Web Scraping,我正在尝试为一个我不拥有的网站制作一个“API”,并尝试从页面上刮取信息,但是我尝试了关于stackoverflow和其他关于DOM和regex的位置的建议,这些位置通常需要上下文或特定的div id标记,这表明该网站不使用,而只是使用一般的标记,有没有办法从网站上刮取信息 我会尝试抓取的HTML示例: <div class="col-md-6"> <strong style="font-weight:500;">Date Created</strong>
<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>
创建日期
2016年12月3日下午4:08
div>
或
2016年2月12日
加入日期
我如何才能抓取创建日期(实际日期)和加入日期?我在网络编程方面没有那么先进,所以我找不到任何其他东西,我通常只使用PHP。如果没有可识别的一致格式的数据,你想刮取,这将是不容易的。您需要一些技巧来查找日期,也许文本“join date”与日期文本之间的距离不超过n个字符(因此您可以假定它是相关的,因此您有它们的join date)
制作可靠的工具并不容易。您的示例很差,因此这只是一个示例 基于此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>
然后我们搜索加入日期的正确路径:
$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文档的某些部分进行寻址的语言,用于复杂的搜索
上述路径意味着:
//以下模式,无论它们在文档中的什么位置
div[@class=“col-xs-6 col-md-2文本中心”]和类“col-xs-6 col-md-2文本中心”
/以“加入日期”作为节点值的div[.=“加入日期”]
/前置同级::带有标记的前置同级字体
因此,您必须在HTML中搜索最佳的唯一模式,以隔离所需的节点,并编写适当的模式来匹配它
- 了解更多关于
- 了解更多关于
->loadHTML()
HTML内容,而不是文件路径(也许这就是问题所在?)在我的回答中,您有很多链接可以查看命令语法、更多示例和教程。第21行是trim($created->item(0)->nodeValue,它试图从$created=$xpath->query('//div[@class=“col-md-6”]/div[=“Date Created”]/Previous sibling::div');因此您的路径不匹配:您不必复制和粘贴,您需要使其适应您的文档结构。在您的示例中,例如,div[.=“Date Created”]没有Previous sibling。请参见此处,我并不完全了解每一个代表什么,我假设它是子axe?
$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 );