Scrapy从动态表中提取数据

时间:2015-11-01 00:25:35

标签: python python-2.7 web-scraping scrapy

我试图从表格中提取所有TD值=" table-main"来自网站:http://www.oddsportal.com/basketball/usa/nba/results/

我正在使用Scrapy和Python 2.7

从Scrapy Shell我可以通过以下方式获取该表:

response.xpath('//*[@id="tournamentTable"]')

但我似乎无法获得该表的任何TR或TD。

response.xpath('//*[@id="tournamentTable"]/tbody')

and response.xpath('//*[@id="tournamentTable"]/tbody/tr')

返回一个空列表。我怀疑表可能是动态创建的。任何人都可以帮助我从该表中抓取所有团队名称,分数和赔率。我已经坚持了一段时间。

这个问题与人们推荐的重复内容有所不同:Scrapy not finding table因为这个问题与获取表格有关。这个问题是关于获取表中的数据。

1 个答案:

答案 0 :(得分:0)

是的,结果加载了对网站API的额外调用。在这种情况下,请求发送到http://fb.oddsportal.com/ajax-sport-country-tournament-archive/3/MmbLsWh8/X0/1/-1/1/?_=1446338252826

我不确定您是否可以对您的蜘蛛网中的网址进行硬编码,因为至少网址的3MmbLsWh8部分实际上来自{{1}主页上的标签:

script

另外,有一个<script type="text/javascript"> //<![CDATA[ var op = new OpHandler();if(!page)var page = new PageTournament({"id":"MmbLsWh8","sid":3,"cid":200,"archive":true});var menu_open = null;vJs();op.init();if(page && page.display)page.display(); var sigEndPage = true; try { if (sigEndJs) { globals.onPageReady(); } } catch (e) { } //]]> </script> 参数,看起来像一个时间戳。

对此AJAX网址的调用会返回一个JSONP响应,其中包含NBA结果的HTML代码。您需要从响应中提取HTML代码(例如,使用正则表达式),将其提供给_并提取结果。 shell中的一些示例代码可以帮助您入门:

Selector