dataabc / weibo-crawler

新浪微博爬虫,用python爬取新浪微博数据,并下载微博图片和微博视频
3.22k stars 737 forks source link

string indices must be integers, not 'str' #411

Open nanamicat opened 7 months ago

nanamicat commented 7 months ago

解析这条微博时发生错误 https://weibo.com/5668037476/Nnw2dvfDy

string indices must be integers, not 'str'
Traceback (most recent call last):
  File "/app/weibo.py", line 874, in get_one_weibo
    retweet = self.parse_weibo(retweeted_status)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/weibo.py", line 783, in parse_weibo
    weibo["pics"] = self.get_pics(weibo_info)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/weibo.py", line 448, in get_pics
    pic_list = [pic["large"]["url"] for pic in pic_info]
                ~~~^^^^^^^^^
TypeError: string indices must be integers, not 'str'

代码略微调整过 行号可能不对,在 get_pics 这个函数里面、

pic_info:

{'0': {'pid': '006bAvtily1hisix06qyij32c0340x6x', 'url': 'https://wx3.sinaimg.cn/orj360/006bAvtily1hisix06qyij32c0340x6x.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx3.sinaimg.cn/large/006bAvtily1hisix06qyij32c0340x6x.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '1': {'pid': '006bAvtily1hisix7ww11j32c0340x6w', 'url': 'https://wx2.sinaimg.cn/orj360/006bAvtily1hisix7ww11j32c0340x6w.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx2.sinaimg.cn/large/006bAvtily1hisix7ww11j32c0340x6w.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '2': {'pid': '006bAvtily1hisiwc98gsj32802yox6q', 'url': 'https://wx4.sinaimg.cn/orj360/006bAvtily1hisiwc98gsj32802yox6q.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx4.sinaimg.cn/large/006bAvtily1hisiwc98gsj32802yox6q.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '3': {'pid': '006bAvtily1hisixc7rb2j31uk2grx6r', 'url': 'https://wx3.sinaimg.cn/orj360/006bAvtily1hisixc7rb2j31uk2grx6r.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx3.sinaimg.cn/large/006bAvtily1hisixc7rb2j31uk2grx6r.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '4': {'pid': '006bAvtily1hisiwiql9dj31qr2bokjm', 'url': 'https://wx4.sinaimg.cn/orj360/006bAvtily1hisiwiql9dj31qr2bokjm.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx4.sinaimg.cn/large/006bAvtily1hisiwiql9dj31qr2bokjm.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '5': {'pid': '006bAvtily1hisiwmwmpij32c03407wk', 'url': 'https://wx2.sinaimg.cn/orj360/006bAvtily1hisiwmwmpij32c03407wk.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx2.sinaimg.cn/large/006bAvtily1hisiwmwmpij32c03407wk.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '6': {'pid': '006bAvtily1hisiwfjxj5j32802yoe83', 'url': 'https://wx1.sinaimg.cn/orj360/006bAvtily1hisiwfjxj5j32802yoe83.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx1.sinaimg.cn/large/006bAvtily1hisiwfjxj5j32802yoe83.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '7': {'pid': '006bAvtily1hisiwsv830j325a2v11l0', 'url': 'https://wx4.sinaimg.cn/orj360/006bAvtily1hisiwsv830j325a2v11l0.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx4.sinaimg.cn/large/006bAvtily1hisiwsv830j325a2v11l0.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '8': {'pid': '006bAvtily1hisiwol3v0j328j2zde82', 'url': 'https://wx4.sinaimg.cn/orj360/006bAvtily1hisiwol3v0j328j2zde82.jpg', 'size': 'orj360', 'geo': {'width': 360, 'height': 479, 'croped': False}, 'large': {'size': 'large', 'url': 'https://wx4.sinaimg.cn/large/006bAvtily1hisiwol3v0j328j2zde82.jpg', 'geo': {'width': 2048, 'height': 2730, 'croped': False}}}, '': {'videoSrc': 'https://video.weibo.com/media/play?livephoto=https%3A%2F%2Flivephoto.us.sinaimg.cn%2F.mov', 'type': 'livephotos'}}
dataabc commented 7 months ago

每个微博都出错吗?看提示说pic是string,你方便的话把它转成dict运行看看。

nanamicat commented 7 months ago

只有那一条出错,贴上来的 pic_info 就是出错的那条的 就是其他的微博,pic_info 是个数组,这条 pic_info 是个dict,所以 for 遍历的时候不对了,应该怎么改呢

dataabc commented 7 months ago

先判断info类型,数组就使用上面的代码,否则单独处理。这是我目前想到的,不一定是最佳。