narcissus1e7b97 2021-12-07 21:42 采纳率: 100%
浏览 56
已结题

scrapy下 爬虫爬取 子页面详细信息部分 代码出错

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

用python写爬虫,目标是获取排行总页面的作品名和排名,再获取该作品详情页部分信息。在生成详情页请求的代码处提示出错:

img

img


运行时的报错:

img

恳请指教 谢谢!急

from scrapy import Request
from scrapy.spiders import Spider


class AniRank(Spider):
    name = 'AniRank'
    this_page = 1

    def __init__(self, name=None, ):
        super().__init__(name)
        self.inner_parse = None

    def start_requests(self):
        url = 'https://bangumi.tv/anime/browser?sort=rank'
        yield Request(url)  # 生成请求对象

    def parse(self, response, **kwargs, ):

        list_selector = response.xpath("//li/div[@class='inner']")

        for one_selector in list_selector:

            anime_rank = one_selector.xpath("span/text()").extract()[0]
            anime_name = one_selector.xpath("h3/a/text()").extract()[0]
            anime_year = one_selector.xpath("p/text()").extract()[0]

            anime_year = anime_year.split('/')
            for n in anime_year:
                n = n.strip()
                if ((n.find("年") == 4) and (n.find("月") >= 0)) or (n.find("-") == 4):
                    anime_year = n

            rank_dict = {"bangumi排名": anime_rank,
                         "名称": anime_name,
                         "放送日期": anime_year, }

            url = 'https://bangumi.tv' + one_selector.xpath("h3/a/@href").extract()[0]    #生成详情页url

            yield Request(url,
                          rank_dict,
                          callback=self.inner_parse,)    #此处提示错误

    def inner_parse(self, response):
        anime_co = response.xpath("//ul[@id='infobox']//*[string()='动画制作']/../a/text()").extract()
        rank_dict["制作公司"] = anime_co
        yield rank_dict

        self.this_page += 1
        if self.this_page <= 6:
            next_url = "https://bangumi.tv/anime/browser?sort=rank&page=%d" % self.this_page
            yield Request(next_url, self.parse)


  • 写回答

1条回答 默认 最新

  • 菜猫小六 2021-12-08 10:03
    关注

    流程通了细节没改

    import copy
    
    from scrapy import Request
    from scrapy.spiders import Spider
    
    
    class AniRank(Spider):
        name = 'AniRank'
        this_page = 1
    
        def __init__(self):
            super(AniRank).__init__()
    
        def start_requests(self):
            url = 'https://bangumi.tv/anime/browser?sort=rank'
            yield Request(url)  # 生成请求对象
    
        def parse(self, response, **kwargs, ):
            list_selector = response.xpath("//li/div[@class='inner']")
            for one_selector in list_selector:
                anime_rank = one_selector.xpath("span/text()").extract()[0]
                anime_name = one_selector.xpath("h3/a/text()").extract()[0]
                anime_year = one_selector.xpath("p/text()").extract()[0]
                anime_year = anime_year.split('/')
                for n in anime_year:
                    n = n.strip()
                    if ((n.find("年") == 4) and (n.find("月") >= 0)) or (n.find("-") == 4):
                        anime_year = n
                rank_dict = {"bangumi排名": anime_rank,
                             "名称": anime_name,
                             "放送日期": anime_year, }
                url = 'https://bangumi.tv' + one_selector.xpath("h3/a/@href").extract()[0]  # 生成详情页url
                yield Request(url, meta={"rank_dict": copy.deepcopy(rank_dict)},
                              callback=self.inner_parse, )  # 此处提示错误
    
        def inner_parse(self, response):
            rank_dict = response.meta['rank_dict']
            anime_co = response.xpath("//ul[@id='infobox']//*[string()='动画制作']/../a/text()").extract()
            rank_dict["制作公司"] = anime_co
            yield rank_dict
            self.this_page += 1
            if self.this_page <= 6:
                next_url = "https://bangumi.tv/anime/browser?sort=rank&page=%d" % self.this_page
                yield Request(next_url, self.parse)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 12月7日

悬赏问题

  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。