Rbute 2020-03-17 17:12 采纳率: 100%
浏览 491
已采纳

爬虫数据存入CSV时报错:字符串对象没有关键字属性,可是类型查询结果又是字典对象啊,是什么原因?

从网页提取出来的信息就是字典类型:content={'aid': 96393562, 'title': '【幼月的镜头工坊】女王:我想要的,就会是我的【7Rings】', 'tname': 'MMD·3D'} 但是在第三步保存数据到CSV的的时候就要报错,说'str' object has no attribute 'keys',怎么处理呢?


    class BiliBili:

    # 第一步:爬取目链接
    def get_json(self, av_num):
        fake = Factory().create()
        headers = {'User-Agent': fake.user_agent()}
        url = ('https://api.bilibili.com/x/web-interface/view?aid={}'.format(av_num))
        response = requests.get(url, headers=headers)

        self.parse_json(response)

    # 第二步:解析页面提取关键信息
    def parse_json(self, response):
        html = json.loads(response.text)
        content = {"aid": html["data"]["aid"], "title": html["data"]["title"], "tname": html["data"]["tname"]}
        self.save_content(content)

       # 第三步:保存数据
    def save_content(self, content):
    with open('B站视频信息.csv', 'w', newline="", encoding='utf-8') as f:
    writer = csv.DictWriter(f, content.keys())
    writer.writeheader()
    writer.writerows(content)

    # 第四步:遍历url
    def main(self, start_av_num, end_av_num):
        for av_num in range(start_av_num, end_av_num+1):
            self.get_json(av_num)

    #    执行函数
    def main():
            p = BiliBili()
            p.main(96393562, 96393562)

    if __name__ == '__main__':
            main()

  • 写回答

4条回答 默认 最新

  • 陈年椰子 2020-03-17 17:29
    关注

    改成这样试试

    writer = csv.DictWriter(f, [k for k in content])
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。