weixin_51660174 2023-05-01 04:05 采纳率: 37.5%
浏览 15
已结题

为什么输出下面的item时会出现这样的错误,该怎么解决?

下面是爬取携程景点数据的代码,为什么输出不了,有什么解决方法,急!

img

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-01 08:02
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7490832
    • 除此之外, 这篇博客: 关于字典键值的遍历你该了解这个特殊的方法中的 items()方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 当然我这篇文章主要的目的是记录我今天学习了字典的items()函数
      网上对items()给出的描述是:
      Python 字典 items() 方法以列表返回可遍历的(键, 值) 元组数组。
      使用方法:
      ①不需要给其任何参数
      ②返回值:以列表形式返回可遍历的(键, 值) 元组数组。
      dict.item()
      我们在python当中测试一下:

      dic = {'apple': '1','orange':'2','banana':'3'}
      print(dic.items())
      输出结果为
      dict_items([('apple', '1'), ('orange', '2'), ('banana', '3')])
      

      嗯哼,返回了一个列表果然,那么我们自然就可以用一个for循环得到其键值

      for i in dic.items():
      	print(i)
      # 输出结果为:
      ('apple', '1')
      ('orange', '2')
      ('banana', '3')
      

      但是,我们如果我们像单独得到其键与值呢?
      因此我们先看看上面这个代码每次输出的结果到底是什么类型
      type(i)
      最后得到结果<class 'tuple'>,果然和我们想的一样是个元组,那么我们便可以像这样得到其键值咯!

      dic = {'apple': '1', 'orange': '2', 'banana': '3'}
      print(dic.items())
      for i, j in dic.items():
          print(i, ':', j)
      
      

      完成!!!又学到新东西了,yeah!!!继续加油!!!

    • 以下回答由chatgpt基于相关博客总结生成:

      可能的解决方案: 1. 检查代码中是否正确使用了yield语句输出item,如果使用return则无法输出。需要将代码中的return改为yield。 2. 检查是否正确导入了相关的模块,如scrapy等。 3. 检查是否设置了正确的爬虫名字和允许的域名。 4. 检查是否正确定义了item,包括名称和属性。 5. 检查是否在代码中正确使用了item,并将数据存入其中。 6. 如果以上方案都不行,可以试着增加日志记录代码,查看程序运行时出现的报错信息,并进行调试。

      代码示例: 参考以下示例,假设要爬取的字段为name和location,存入的item为SceneryItem:

      from scrapy import Spider from scrapy.selector import Selector from project.items import SceneryItem

      class ScenerySpider(Spider): name = 'scenery' allowed_domains = ['ctrip.com']

      def start_requests(self):
          urls = [
              'https://you.ctrip.com/sight Beijing 1.html'
          ]
          for url in urls:
              yield scrapy.Request(url=url, callback=self.parse)
      
      def parse(self, response):
          sel = Selector(response)
          items = []
          scenerys = sel.xpath('//div[@class="list_mod2"]')
          for scenery in scenerys:
              item = SceneryItem()
              item['name'] = scenery.xpath('name/text()').extract_first().strip()
              item['location'] = scenery.xpath('location/text()').extract_first().strip()
              items.append(item)
              yield item
          self.logger.info('Parsed %s items' % len(items))
      

      在代码中,定义了爬虫名字为scenery,允许的域名为ctrip.com,通过yield语句将爬取到的数据存入item,并输出。同时使用日志记录代码,方便调试和查错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 5月1日

悬赏问题

  • ¥15 fastreport怎么判断当前页数
  • ¥15 Kylin-Desktop-V10-GFB-Release-JICAI_02- 2207-Build14-ARM64.iso有没有这个版本的系统啊
  • ¥15 能不能通过蓝牙将传感器数据传送到手机上
  • ¥20 100元python和数据科学实验项目
  • ¥15 根据时间在调用出列表
  • ¥15 R 包chipseeker 安装失败
  • ¥15 Veeam Backup & Replication 9.5 还原问题
  • ¥15 vue-print-nb
  • ¥15 winfrom的datagridview下拉框变成了黑色,渲染不成功
  • ¥20 利用ntfy实现短信推送