我试图从表格中提取所有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因为这个问题与获取表格有关。这个问题是关于获取表中的数据。
答案 0 :(得分:0)
是的,结果加载了对网站API的额外调用。在这种情况下,请求发送到http://fb.oddsportal.com/ajax-sport-country-tournament-archive/3/MmbLsWh8/X0/1/-1/1/?_=1446338252826。
我不确定您是否可以对您的蜘蛛网中的网址进行硬编码,因为至少网址的3
和MmbLsWh8
部分实际上来自{{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