Javascript 如何刮;含糊的;网站上的信息?

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>

我正在尝试为一个我不拥有的网站制作一个“API”,并尝试从页面上刮取信息,但是我尝试了关于stackoverflow和其他关于DOM和regex的位置的建议,这些位置通常需要上下文或特定的div id标记,这表明该网站不使用,而只是使用一般的标记,有没有办法从网站上刮取信息

我会尝试抓取的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>

创建日期
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中搜索最佳的唯一模式,以隔离所需的节点,并编写适当的模式来匹配它


  • 了解更多关于
  • 了解更多关于

如果您了解python,那么有一个非常棒的废弃库,可以做到这一点。我收到了以下错误“注意:在第21行尝试获取/www/public_api/store/getItemInfo.php中的非对象属性”我不知道您的文件中有什么第21行:让我知道。顺便说一句,您必须传递到
->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 );