【发布时间】: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