【问题标题】:Correct Xpath for ScrapyScrapy 的正确 Xpath
【发布时间】:2016-06-06 15:37:52
【问题描述】:

我是一名足球迷,正在努力学习scrapy。但是,我遇到了一些与 xpath 相关的问题,想知道是否有人可以帮忙。我在https://whoscored.com/Statistics 页面上并试图获取有关 2774 名玩家的所有信息。这听起来像是一个完全新手的问题,但我如何刮掉玩家的名字?我尝试使用

`response.xpath('//*[(@id = "player-table-statistics-body")]//*[contains(concat( " ", @class, " " ), concat( " ", "player-link", " " ))]/text()').extract()` 

但它不会刮掉任何东西。我通过在 Chrome 中使用 selectorgadget 获得了 xpath。不过,

`response.xpath('//*[contains(concat( " ", @class, " " ), 
concat( " ", "player-link", " " ))]/text()').extract()` 

有效,但它会刮掉 Statistical XI 列表中的所有名称,这也是我不想要的。非常感谢这里的一些帮助。谢谢!

@Steve 这就是我在 scrapy shell 中所做的事情:

scrapy shell https://www.whoscored.com/Statistics
response.xpath('//*[(@id = "player-table-statistics-body")]//*[contains(@class, "player-link")]/text()').extract()

我认为这会给我我正在寻找的十个名字,但事实并非如此。在这一点上我真的一无所知!

【问题讨论】:

  • @alecxe 对不起,我的错。现在修好了。

标签: xpath scrapy


【解决方案1】:

xpath ('//*[(@id = "player-table-statistics-body")]//*[contains(@class, "player-link")]/text()') 从“玩家统计”表中获取 10 个玩家。

你想用 concats 实现什么?

【讨论】:

  • 史蒂夫,感谢您的回复。好吧,就像我提到的,我只是复制了 Chrome 中的 selectorgadget 插件给出的 xpath,其中包含 concat() 函数。我对 xpaths 的了解几乎没有,我正在为初学者弄清楚这一点。但是,我按如下方式尝试了您的 xpath:response.xpath('//*[(@id = "player-table-statistics-body")]//*[contains(@class, "player-link")]/text()').extract() 但这也没有给我希望的结果。我在这里做的一定有什么根本性的错误。
  • 我在 Firefox 中使用 Firebug,它非常可靠。另一个方便的调试工具是scrapy shell。将您的代码添加到您的问题中,我们再看看。
  • 看起来页面的那部分是由javascript动态生成的,这是有道理的。您将需要使用 Selenium 之类的东西来提取它。
【解决方案2】:

Follow Xpath 对你有用。

player_list = respose.xpath('//*[@id="overall-formation-seasonal-content"]//li//a[contains(@class,"player-link")]/text()')

【讨论】:

  • 乌斯曼,不完全是。您所指的 xpath 是页面底部的 Statistical Best XI,它不是动态生成的。我正在寻找 @Steve 正确指出的“播放器表统计体”,我将不得不使用 Selenium。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多