python - Scrapy xpath 返回表中每一行的结果,而不仅仅是选定的行

标签 python xpath scrapy

我在 Windows Vista 64 位上使用 Python.org 版本 2.7 64 位。我有以下 Scrapy 代码,每次找到 Span 元素“title =“Goal””的实例时,该代码应该返回单词“GOAL”:

from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy.utils.markup import remove_tags
from scrapy.cmdline import execute
import re


class MySpider(Spider):
    name = "goal"
    allowed_domains = ["whoscored.com"]
    start_urls = ["http://www.whoscored.com/Players/3859/Fixtures/Wayne-Rooney"]

    def parse(self, response):
        for row in response.selector.xpath('//table[@id="player-fixture"]//tr[td[@class="tournament"]]'):
            list_of_goals = row.xpath('//span[@title="Goal"]')

            if list_of_goals:
                print "GOAL"

execute(['scrapy','crawl','goal'])

但是,它会为标题为“韦恩·鲁尼的比赛历史记录”的表中的所有 47 行返回“GOAL”字符串。

有人能明白为什么它不仅仅返回那场比赛中进球的实例吗?

谢谢

最佳答案

开头带有双斜杠的

表达式 '//span[@title="Goal"]' 会迭代当前文档的所有节点。这是你想要的吗?

如果您只想迭代当前行的后代,请尝试 './/span[@title="Goal"]',其中 dot 显式设置 //迭代到当前上下文节点,或者简单地从当前节点开始'descendant::span[@title="Goal"]'

关于python - Scrapy xpath 返回表中每一行的结果,而不仅仅是选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761588/

相关文章:

python - 无法使用 asyncio.ensure_future() 获取堆栈跟踪

java - xPath 在使用 for-each 循环变量时找不到选择器,但在其他情况下有效

带条件的 Xml 路径

xpath - 根据前缀选择属性的 XPath 表达式是什么?

python - 如何使用scrapy Spider python获取<ol> <li>下的值

python - 使用 Shell 脚本从 python 获取返回值

python - SQLAlchemy `.fetchmany()` 与 `.limit()`

python - 需要帮助使用祖先从 Scrapy 的列表中抓取项目

python - 如何在Ubuntu 16.04上安装Scrapy?

python - 打印所有能被 7 整除并包含 7 从 0 到 100 的数字