使用Symfony DomCrawler获取Table Rows

时间:2015-10-22 05:56:28

标签: php symfony goutte

我尝试使用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);

任何指针都表示赞赏!

1 个答案:

答案 0 :(得分: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中=&#34; yfncsumtab&#34;] / tbody的/ TR [2] / TD [1] /表[2] / <德尔> TBODY / TR / TD /表<德尔> / 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"