Использование Symfony DomCrawler для получения строк таблицы

Я пытаюсь получить доступ к таблице на веб-странице с помощью DomCrawler и не уверен, что использую правильный подход. Пример ниже указывает на сайт Yahoo и использует XPath целевой таблицы. В идеале я буду перебирать s для данных, но пока я просто не могу понять, как заставить DomCrawler найти эту таблицу или мне следует использовать другой подход. Например,

use Goutte\Client;
$client = new Client();

$baseURL = 'http://finance.yahoo.com/'; 
$urlEndpoint = 'q/pr?s=MSFT+Profile';
$domSelector = '//*[@id="yfncsumtab"]/tbody/tr[2]/td[1]/table[2]/tbody/tr/td/table/tbody'; 
$crawler = $client->request('GET', $baseURL . $urlEndpoint); 
$message = $crawler->filterXPath($domSelector)->text(); 
dd($message);

Любые указатели приветствуются!


person Gunnar    schedule 22.10.2015    source источник
comment
Ваш код выглядит хорошо. Ошибка возвращается?   -  person scoolnico    schedule 22.10.2015


Ответы (1)


Я ничего не знаю о goutte, но вы должны сделать следующее: получить тело ответа и передать его сканеру.

...
$html = $response->getBody(); // or $response->getContent() - it depends on tool what you are using 
$crawler = new Crawler();
$crawler->addHtmlContent($html);
// use $crawler->filter() or $crawler->filterXPath()

Обновление:

Так что используйте фильтр-запрос без tbody, потому что этот тег автоматически создается в инспекторе Google Chrome и реально не существует, например (можете проверить - просто откройте сырой html-код страницы [Ctrl+U]).

//*[@id="yfncsumtab"]/tbody/tr[2]/td[1]/table[2]/tbody/tr/td/table/tbody

$crawler->filterXPath('//*[@id="yfncsumtab"]/tr[2]/td[1]/table[2]/tr/td/table')->text();

И вы получите то, что хотите:

string(101) "Index Membership:N/ASector:TechnologyIndustry:Business Software & ServicesFull Time Employees:118,000"
person Stafox    schedule 22.10.2015
comment
Goutte уже реализует компонент Crawler SF2. Нет необходимости создавать его экземпляр. - person scoolnico; 22.10.2015
comment
Спасибо за ваше предложение! Я действительно использовал Chrome, который предоставил XPath, заполненный неправильными тегами tbody. Я удалил их и могу легко добраться до строки. Благодарю вас! - person Gunnar; 22.10.2015