2017-08-12 39 views
1

我试图让报废让统计在此URL Scrapy不返回结果使用XPath

http://www.acb.com/redaccion.php?id=133495

我首先与玩家名称尝试:

进口scrapy 进口从scrapy.item请求 import Item,领域 from ligafemanager.items进口LigafemanagerItem

class Lf1Spider(scrapy.Spider): 
    name = 'lf1' 
    allowed_domains = ['acb.com'] 
    start_urls = ['http://www.acb.com/redaccion.php?id=133495'] 
    def parse(self, response): 
    self.logger.info('A response from %s just arrived!', response.url) 
    i = LigafemanagerItem() 
    i['acb_player_name'] = response.xpath('//td/div/codigo/table[1]/tbody/tr/td[2]/font/text()').extract() 
    self.logger.info('------------ACB NAME is: %s ------', 
    i['acb_player_name']) 
    return i 

永不返回结果

回答

0

那么这是一个棘手的问题,因为你看到的并不是真实的真相。从萤火虫

Firebug

考虑HTML现在看到相同的页面

View Source

在读强调所有的人都用在Firefox中查看源代码窗口的错误标签的查看源代码。另外请注意一个关键的问题tbody缺失。这是许多网站发生的情况,HTML中没有使用tbody,但浏览器执行自动更正并添加tbody以在浏览器中正确显示表格。

当您使用脚本时,tbody不在源代码中,因为scrapy不会执行任何自动更正,您的XPATH与tbody不会找到您感兴趣的元素。那么最简单的解决方案?从您的XPath删除TBODY

In [3]: response.xpath('//td/div/codigo/table[1]/tr/td[2]/font/text()').extract() 
Out[3]: ['Nombre'] 
+0

首先感谢您的帮助,有一个问题,如果我写 // TD/DIV/codigo /表/ TR/TD [2] /字体/文本()“)。摘录() 不会返回所有名称,只有第一个TR解决方案? –

+0

那么应该是“// td/div/codigo // table/tr/td [2]/font/text()”您需要使用“//”来匹配任何子节点。因此,而不是使用'/ table'来使用'// table' –