我的蜘蛛怎么了?它在几秒钟内开始和结束,创建一个空文件

What is wrong with my spider? It starts and ends within seconds, creating an empty file

import scrapy
from scrapy.loader import ItemLoader

class Summoner(scrapy.Item):
    summ = scrapy.Field()
    rank = scrapy.Field()

class myspider(scrapy.Spider):
    name = 'spider1'
    start_urls = ['https://www.op.gg/ranking/ladder/']
    def parse(self, response):
        sel = scrapy.Selector(response)
        summoners = sel.xpath('//ul[@class="ranking-highest__list"]/ul')

        for ran, summon in enumerate(summoners):
            item = ItemLoader(Summoner(), summon)
            item.add_xpath('summ', './/li/a/text()')
            item.add_value('rank', ran)
            yield item.load_item()

我的目的是从排行榜中获取每个召唤师的名字及其排名(通过 enumerate)。

然后我 运行 scrapy runspider myscript.py -o results.xml 蜘蛛停止了,留下了一个 0 字节的文件。xml 文件。

没有显示错误。

我已经多次尝试从 summoners 更改 xpath,但都没有成功。

此外,还有一个问题:我应该像上面尝试的那样自己 'figure' xpath,还是应该从 Inspect 元素复制它?这样做,我得到了这样的东西 /html/body/div[2]/div[3]/div[3]/div/div/div/div[1]/ul (顺便说一句,这仍然不起作用)

我确定我的问题出在 xpath,你能纠正我吗?

你的 xpath 是错误的。请尝试以下操作:

import scrapy
from scrapy.loader import ItemLoader

class Summoner(scrapy.Item):
    summ = scrapy.Field()
    rank = scrapy.Field()

class myspider(scrapy.Spider):
    name = 'spider1'
    start_urls = ['https://www.op.gg/ranking/ladder/']
    
    def parse(self, response):
        for summon in response.xpath('//ul[@class="ranking-highest__list"]/li[contains(@id,"summoner-")]'):
            item = ItemLoader(Summoner(), summon)
            item.add_xpath('summ', './/a[@class="ranking-highest__name"]/text()')
            item.add_xpath('rank', './/*[@class="ranking-highest__rank"]/text()')
            yield item.load_item()