【问题标题】:What is wrong with my spider? It starts and ends within seconds, creating an empty file我的蜘蛛怎么了?它在几秒钟内开始和结束,创建一个空文件
【发布时间】:2021-07-15 19:44:01
【问题描述】:
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,spider 停止并留下一个 0 字节的 .xml 文件。

没有显示错误。

我已尝试多次从summoners 更改xpath,但均未成功。

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

我确定我的问题在于xpath,您能纠正我吗?

【问题讨论】:

  • 我在你的脚本中看不到入口(起始)点,parsemyspider 中定义,但从未使用过。
  • 由于您似乎正在尝试解析单个网页,因此不妨考虑改用 BeautifulSoup。

标签: python python-3.x web-scraping scrapy


【解决方案1】:

您的 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()

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 2010-12-25
    • 1970-01-01
    • 2021-09-08
    • 2012-04-06
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多