我的蜘蛛怎么了?它在几秒钟内开始和结束,创建一个空文件
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()
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()