2017-03-31 15 views
0

私は自分の時間を短縮して私の会社で繰り返しクリックするのに役立つプロジェクトですので、違反や禁止でないことを願っています。Symfony DomCrawlerのリンクには検索されたHTMLが含まれています

Page to be scraped

Preview of the page

それは、正確な検索の試合であるので、私は唯一の、第2のリンクのURIをしたいです。最初のものには-V1331という接尾辞も含まれています。

間違っ:

<a href="http://pdb2.turck.de/en/DE/products/0000000000011ba40002003a"> 
    <strong> Product&nbsp;BI1-EH04-AP6X-V1331</strong> (HTML, 48.7K)<br> 
    Product&nbsp;<strong>BI1-EH04-AP6X-V1331</strong> 
    Click to enlarge Inductive sensor Order number: &nbsp;4608440 Smooth barrel, Ø 4 mm Stainless steel, 1.4427 SO DC 3-wire, 10…30 VDC NO contact, PNP 
</a> 

右:私は試してみました

<a href="http://pdb2.turck.de/en/DE/products/000000000001ecee0003003a"> 
    <strong> Product&nbsp;BI1-EH04-AP6X</strong> (HTML, 48.6K)<br> 
    Product&nbsp;<strong>BI1-EH04-AP6X</strong> 
    Click to enlarge Inductive sensor Order number: &nbsp;4609540 Smooth barrel, Ø 4 mm Stainless steel, 1.4427 SO DC 3-wire, 10…30 VDC NO contact, PNP output 
</a> 

この:<a>要素内のHTMLがたくさんあるので

$search = 'BI1-EH04-AP6X'; 
$crawler = Goutte::request('GET', 'http://www.turck.de/en/search.php?q_simple=' . $search); 
return $crawler->selectLink(' Product&nbsp;' . $search)->link()->getUri(); 

しかし、これは明らかに失敗しますしたがって、リンクは一致しません。

LaravelのGoutte facadeと混同しないでください。それは、Symfony Dom Crawlerメソッドです。

2番目のリンクのURIを取得するにはどうすればよいですか?検索HTMLスニペット(この場合は> Product&nbsp;BI1-EH04-AP6X<)が含まれていると、リンクに一致するメソッドがありますか?

答えて

0

私はXPathヘルパー拡張と、以下に述べるSOページの情報を試して答えを見つけました。

Locating the node by value containing whitespaces using XPath

$search = 'BI1-EH04-AP6X'; 
$crawler = Goutte::request('GET', 'http://www.turck.de/en/search.php?q_simple=' . $search); 
$crawler->filterXPath('//strong[normalize-space(text())="' . $search . '"]')->each(function ($node) { 
print $node->parents()->link()->getUri()."\n"; 
}); 

これは、いくつかのより多くの最適化を必要としますが、今のところ、それはオールライトです。

関連する問題