【发布时间】: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,您能纠正我吗?
【问题讨论】:
-
我在你的脚本中看不到入口(起始)点,
parse在myspider中定义,但从未使用过。 -
由于您似乎正在尝试解析单个网页,因此不妨考虑改用 BeautifulSoup。
标签: python python-3.x web-scraping scrapy