我在 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/