Lannister666 2017-06-20 01:22 采纳率: 0%
浏览 4913
已结题

Scrapy yield Request 失效问题

想爬一下 游戏信息和评论 评论,信息是分开的 所以用了两个方法
parse中 用yield 进入第二个方法 和回调自己 都没问题
parse two 中 用yield 回调就不行 但是也不报错 就是没有进行

def parse(self, response):
        #print response.body
        selector = scrapy.Selector(response)
        games = selector.xpath('//div[@class="app-item-caption"]/a[@class="item-caption-title flex-text-overflow"]/@href').extract()
        for game in games:
            game = game + '/review'
            yield scrapy.http.Request(game, callback=self.parse_two)
            # print game

        #游戏列表下一页
        nextPage = selector.xpath('//ul[@class="pagination"]/li[last()]/a/@href').extract()
        if nextPage:
            next = nextPage[0]
            # print next
            yield scrapy.http.Request(next, callback=self.parse)

def parse_two(self,response):
        Gid = response.url[27:32]
        Gid = int(Gid)
        selector = scrapy.Selector(response)
        game_review_times = selector.xpath('//a[@class="text-header-time"]/span/@data-dynamic-time').extract()
        game_reviews = selector.xpath('//div[@class="review-item-text"]/div[@class="item-text-body"]').extract()
        game_reivew_author = selector.xpath('//span[@class="taptap-user"]/a/text()').extract()
        reviewNo = 1
        review_dict = {}
        # 处理评论
        for review in game_reviews:

            # 计算每天评论量
            # time_day = time.strftime('%Y-%m-%d',time.localtime(int(game_review_times[reviewNo - 1])))
            # if review_dict.get(time_day):
            #     review_dict[time_day] += 1
            # else:
            #     review_dict[time_day] = 1

            review_lines = re.findall('<p>(.*?)</p>',review,re.S)
            review = ''
            for line in review_lines:
                review += line

            item = TaptapItem()
            item['Review_GID'] = Gid
            item['Review_content'] = review
            item['Review_Author'] = game_reivew_author[reviewNo-1]
            item['Reivew_Time'] = game_review_times[reviewNo-1]

            yield item

            print '评论%d:'%reviewNo
            print game_review_times[reviewNo-1]
            print review

            reviewNo += 1

        #评论下一页
        nextPage = selector.xpath('//ul[@class="pagination"]/li[last()]/a/@href').extract()
        if nextPage:
            next = nextPage[0]
            # print next
            yield scrapy.http.Request(next, callback=self.parse_two)


展开全部

  • 写回答

6条回答 默认 最新

  • 痞子泰 2017-09-20 18:58
    关注

    请用下面的代码,不谢

     yield scrapy.http.Request(next, callback=self.parse_two, dont_filter=True)
    
    评论
  • 梦阿迪 2018-06-05 04:04
    关注

    还有一种方法,就是在yield scrapy.Request()里添加dont_filter=True

    评论
  • Fly_TheWind 2017-07-06 01:27
    关注

    解决了吗?我也是类似的问题。在网页多层的情况下,只执行了1层。第二层的yield Requset不执行

    评论
  • Six__God 2017-09-27 17:14
    关注

    楼上方法不能用啊,楼主解决了没有

    评论
  • zhangyaohahaha 2017-10-16 21:31
    关注

    看看setting.py中的请求头,就设置一个User-Agent看看

    评论
  • 梦阿迪 2018-06-05 04:03
    关注

    刚才也遇到这个问题,已经解决,各位检查一下你们不执行的Request的url是不是不在allowed_domains里.我刚才就是这个问题,忘了添加进去了

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 okhttp分片上传文件,到最后一个分片提示:Invalid Content-Length
  • ¥15 有关汽车的MC9S12XS128单片机实验
  • ¥15 求c语言动态链表相关课程有偿,或能将这块知识点讲明白
  • ¥15 FLKT界面刷新异常
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥50 单细胞测序拟时序分析
  • ¥50 运行springboot项目报错
  • ¥15 FTP 站点对站点传输失败
  • ¥15 宝塔面板一键迁移使用不了
  • ¥15 求一个按键录像存储到内存卡的ESP32CAM代码
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部