【问题标题】:Trying to get same result by xpath and css element试图通过 xpath 和 css 元素获得相同的结果
【发布时间】:2019-09-15 01:13:05
【问题描述】:

我试图通过使用 dom 元素和 xpath 从站点获得相同的结果。所以我可以让这个爬虫为更多的网站动态,这样我只需要填写 url 和什么类型(xpath,domelement)。

 $url = 'https://#/';
        $xpath = "/html[1]/body[1]/div[3]/header[1]/div[1]/div[1]/div[2]/div[1]/ul[1]/li[2]/ul[1]/li[1]/span[1]";        
        $client = new Client();
        $guzzleClient = new GuzzleClient(array(
            'timeout' => 60,
        ));
        $client->setClient($guzzleClient);
        $crawler = $client->request('GET', $url);
        $crawler->filter('.rate')->filter('.gold')->each(function ($node) {
        print $node->text()."\n";
        });

        $result = $crawler->filterXPath($xpath);
        var_dump($result);

结果应该是,像这段代码输出的黄金价格: $crawler->filter('.rate')->filter('.gold')->each(function ($node) { 打印 $node->text()."\n"; });

如果有什么不清楚的地方请告诉我!

【问题讨论】:

  • 给定的代码有什么问题?
  • @NicoHaase 问题在于 filterXpath 输出整个站点,而不仅仅是像 $node 那样的黄金价格。
  • 是什么让您无法调整 XPath 选择器?为什么不在那里使用更具体的部分,例如类或 ID - 或者只是向该数据的提供者询问 API?您应该已经与他们联系,因为未经明确同意不得抓取该数据....
  • 感谢您的回答!好吧,如果我将 XPath 选择器调整到很大程度,是否很难让它为其他站点动态化?不幸的是,他们没有 api。是的,我们确实同意
  • 任何 XPath 选择器都是脆弱的,是的,让多个页面动态化是很困难的

标签: php web-crawler goutte


【解决方案1】:

欢迎来到 SO。

如果你想获取黄金价格,那么你可以使用下面的选择器。

xpath

//ul[@class='rates-widget list-inline']//span[@class='rate gold']

CSS

ul.rates-widget.list-inline span.rate.gold

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多