Php 使用xpath刮取

Php 使用xpath刮取,php,xpath,web-scraping,scrape,Php,Xpath,Web Scraping,Scrape,我正在尝试使用DOMXPath获取搜索结果的项目。下面是一个包含4个结果元素的搜索结果示例: 现在,通过下面的代码,我得到了4个元素的值,但我不知道如何在元素中获得每个项目(比如名称、街道等) 你能帮我吗 $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1

我正在尝试使用DOMXPath获取搜索结果的项目。下面是一个包含4个结果元素的搜索结果示例:

现在,通过下面的代码,我得到了4个元素的值,但我不知道如何在元素中获得每个项目(比如名称、街道等)

你能帮我吗

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, 'https://www.11880.com/suche/0521441422/deutschland'); 
$page = curl_exec($ch);

$dom = new DOMDocument();
$dom->loadHTML($page);
$xpath = new DOMXPath($dom);

foreach($xpath->query('//li[@class="search-result-list-item"]') as $item)
{
    echo trim($item->nodeValue).'<br>';
}
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(Windows;U;windowsnt 5.1;en-US;rv:1.8.1.1)Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_URL,'https://www.11880.com/suche/0521441422/deutschland'); 
$page=curl\u exec($ch);
$dom=新的DOMDocument();
$dom->loadHTML($page);
$xpath=newdomxpath($dom);
foreach($xpath->query('//li[@class=“搜索结果列表项”]')作为$item)
{
回声修剪($item->nodeValue)。“
”; }
我想您可以使用:

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, 'https://www.11880.com/suche/0521441422/deutschland');
$page = curl_exec($ch);

libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($page);
$xpath = new DOMXPath($dom);

$results = [];
$results['name'] = $xpath->query('//h2[@itemprop="name"]');
$results['street-name'] = $xpath->query('//span[@class="street-address"]');
$results['postal-code'] = $xpath->query('//span[@class="postal-code"]');
$results['address-locality'] = $xpath->query('//span[@class="address-locality"]');
$results['quarter'] = $xpath->query('//span[@class="quarter"]');

for($x=0; $x < $results['name']->length;$x++)
{
    print trim($results['name']->item($x)->textContent);
    print trim($results['street-name']->item($x)->textContent);
    print trim($results['postal-code']->item($x)->textContent);
    print trim($results['address-locality']->item($x)->textContent);
    print trim($results['quarter']->item($x)->textContent)."\n";
}
我想你可以使用:

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, 'https://www.11880.com/suche/0521441422/deutschland');
$page = curl_exec($ch);

libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($page);
$xpath = new DOMXPath($dom);

$results = [];
$results['name'] = $xpath->query('//h2[@itemprop="name"]');
$results['street-name'] = $xpath->query('//span[@class="street-address"]');
$results['postal-code'] = $xpath->query('//span[@class="postal-code"]');
$results['address-locality'] = $xpath->query('//span[@class="address-locality"]');
$results['quarter'] = $xpath->query('//span[@class="quarter"]');

for($x=0; $x < $results['name']->length;$x++)
{
    print trim($results['name']->item($x)->textContent);
    print trim($results['street-name']->item($x)->textContent);
    print trim($results['postal-code']->item($x)->textContent);
    print trim($results['address-locality']->item($x)->textContent);
    print trim($results['quarter']->item($x)->textContent)."\n";
}

请让我知道您是否解决了问题,GLHi Pedro,请让我知道您是否解决了问题,GLHi Pedro,当每个参数始终存在时,这非常有效。Bit如何添加列表中每个条目中不存在的参数:在本例中,它将是“开放时间”。如果我只是像其他参数一样添加hopenung,它就会与错误的业务相关。因此,在本例中,添加这一额外行并稍后打印它确实会将前3家公司与营业时间“连接”,即使它应该是最后3家公司$结果['opening_hours']=$xpath->query('//span[@class=“open or closed”]');嗨,佩德罗,当每个参数始终存在时,这项功能非常有效。Bit如何添加列表中每个条目中不存在的参数:在本例中,它将是“开放时间”。如果我只是像其他参数一样添加hopenung,它就会与错误的业务相关。因此,在本例中,添加这一额外行并稍后打印它确实会将前3家公司与营业时间“连接”,即使它应该是最后3家公司$结果['opening_hours']=$xpath->query('//span[@class=“open or closed”]');