string indices must be integers 错误可能的原因(下标,json)

这个错误意思是字符串的下标一定要是整数
出这种错误有多种可能,最形象直接的就是:

a = '[abc]'
print(a['0'])

有点pyhton基础的都知道下标怎么能是字符串’0’,必须是整数0,1,2,3…

a = '[abc]'
print(a[0]) 

才是正确的

第二种是json格式导致的错误:

	#部分代码
    skuid = re.findall('https://item.jd.com/(\d+).html',response.url)[0]
    price_url = 'https://p.3.cn/prices/mgets?skuIds=J_{}'.format(skuid)
    print(price_url,'7777777777777')
    res = requests.get(price_url)
    print(res.text,'**********')
    print(item,'&&&&&&&&&&&&&')

报错如下:

https://p.3.cn/prices/mgets?skuIds=J_100000822981 7777777777777
[{"op":"4499.00","m":"9999.00","id":"J_100000822981","p":"4499.00"}]
**********
Traceback (most recent call last):
  File "/home/python/PycharmProjects/untitled/jd/selenium1.py", line 80, in <module>
    jsp.run()
  File "/home/python/PycharmProjects/untitled/jd/selenium1.py", line 72, in run
    self.get_response_from_page()
  File "/home/python/PycharmProjects/untitled/jd/selenium1.py", line 26, in get_response_from_page
    data = self.get_data_from_response(response)
  File "/home/python/PycharmProjects/untitled/jd/selenium1.py", line 55, in get_data_from_response
    item['价格'] = res.text[0]['p']
TypeError: string indices must be integers

因为获取价格url的response(res)是个json数据,所以要json.loads(),才能把json格式转为python识别的格式。
正解:

        skuid = re.findall('https://item.jd.com/(\d+).html',response.url)[0]
    	price_url = 'https://p.3.cn/prices/mgets?skuIds=J_{}'.format(skuid)
        print(price_url,'7777777777777')
        res = requests.get(price_url)
        print(res.text,'**********')
        item['价格'] = json.loads(res.text)[0]['p']
        print(item,'&&&&&&&&&&&&&')

解决了你的问题就给我点个赞哦,谢谢啦。

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值