python 爬虫 请求这样的json怎么拿到里面的options 试了
productWeb = requests.get ( jsonurl,cookies=cookies,headers=headers )
ProductData = productWeb.json ()
print(ProductData[1])
print(ProductData["productDataWithOptions"])都拿不到里面的东西
```python
{
'isValidated': False,
'productDataWithOptions': {
'nonSellableMinPurchasePrice': None,
'nonSellablePercentSaved': 0,
'options': [
{
'displayOrder': 1,
'name': 'CushionColor',
'optionDisplayType': 'Thumbnail',
'optionID': 602,
'optionImageDriverFlag': True,
'optionLayoutType': 'GRID',
'values': [
{
'availableFlag': True,
'maxDisplayPrice': 1734.99,
'maxFromSalePrice': 0,
'maxListPrice': 3259.99,
'maxOurPrice': 1734.99,
'maxOversizeItemFee': 0,
'minDisplayPrice': 1734.99,
'minFromSalePrice': 0,
'minListPrice': 3259.99,
'minOurPrice': 1734.99,
'minOversizeItemFee': 0,
'optionImg': '//content.haycdn.com/mgen/options: TKCL290_602_Beige.jpg',
'optionValueID': 161254043,
'percentSaved': 0,
'personalizationNotRequired': False,
'priceFlag': 'NORMAL',
'selectedFlag': False,
'swatchImg': None,
'temporaryPriceEndDate': None,
'text': 'Beige',
'valueOrder': 3
}
],
'isSelected': False,
'selectedValueIndex': -1,
'swatchImages': [
],
'valuesSamePrice': False,
'numAvailableValues': 11,
'isRequired': True,
'declineOptionText': None,
'layoutType': 'GRID',
'shouldDisableGridView': False
}
],
'optionSkus': [
],
'pageName': 'tkclassicsflorencewicker7piecepatioconversationsetwithendtableand2setsofcushioncovers',
'parentFirstReviewEligibleFlag': False,
'parentFreeShippingFlag': True,
'parentIsFastShipping': False,
'parentShippingDisplayFlag': True,
'partnerOnlyFlag': False,
'percentSaved': 3,
'personalization': 'no',
'personalizationCharLimit': '0',
'prefix': '',
'prefixHayneedle': None,
'priceFlag': 'NORMAL',
'primarySite': 669,
'productID': 'TKCL290',
'productBanners': None,
'promotions': [
],
'rebateAmount': 0,
'rebateFlag': False,
'rebateID': 0,
'relatedPreconfigSku': '',
'returnPolicy': 'Youmayreturnmostnew,
unused,
'sellableFlag': True,
'spinImageFlag': False,
'status': 'IN_STOCK',
'suffixHayneedle': None,
'supplierAddendum': None,
'temporaryPriceEndDate': None,
'variationsInStock': 11,
'warranty': None,
'isNewProduct': False
},
'oneOptionSelected': False,
'optionImageDriver': '',
'requiredPersonalizationIDs': [
],
'hasPersonalization': False,
'selectedVariation': None,
'selectedVariationName': '',
'loyaltyPoints': None,
'displayPrice': None
}
```
根据你提供的 json,ProductData
实际上是一个字典对象,因此可以使用字典的键来访问其值。而 productDataWithOptions
键对应的值也是一个字典,其中包含了包含 options
的键值对。因此,你可以像下面这样访问 options
列表:
productWeb = requests.get(jsonurl, cookies=cookies, headers=headers)
productData = productWeb.json()
options = productData['productDataWithOptions']['options']
print(options)
这将会输出 options
列表中包含的所有元素。如果你只想访问列表中的第一个元素,你可以使用索引 0(Python 中的列表索引从 0 开始):
firstOption = productData['productDataWithOptions']['options'][0]
print(firstOption)
这将输出第一个选项中包含的所有信息。
ProductData = {
'isValidated': False,
'productDataWithOptions': {
'nonSellableMinPurchasePrice': None,
'nonSellablePercentSaved': 0,
'options': [
{
'displayOrder': 1,
'name': 'CushionColor',
'optionDisplayType': 'Thumbnail',
'optionID': 602,
'optionImageDriverFlag': True,
'optionLayoutType': 'GRID',
'values': [
{
'availableFlag': True,
'maxDisplayPrice': 1734.99,
'maxFromSalePrice': 0,
'maxListPrice': 3259.99,
'maxOurPrice': 1734.99,
'maxOversizeItemFee': 0,
'minDisplayPrice': 1734.99,
'minFromSalePrice': 0,
'minListPrice': 3259.99,
'minOurPrice': 1734.99,
'minOversizeItemFee': 0,
'optionImg': '//content.haycdn.com/mgen/options: TKCL290_602_Beige.jpg',
'optionValueID': 161254043,
'percentSaved': 0,
'personalizationNotRequired': False,
'priceFlag': 'NORMAL',
'selectedFlag': False,
'swatchImg': None,
'temporaryPriceEndDate': None,
'text': 'Beige',
'valueOrder': 3
}
],
'isSelected': False,
'selectedValueIndex': -1,
'swatchImages': [
],
'valuesSamePrice': False,
'numAvailableValues': 11,
'isRequired': True,
'declineOptionText': None,
'layoutType': 'GRID',
'shouldDisableGridView': False
}
],
'optionSkus': [
],
'pageName': 'tkclassicsflorencewicker7piecepatioconversationsetwithendtableand2setsofcushioncovers',
'parentFirstReviewEligibleFlag': False,
'parentFreeShippingFlag': True,
'parentIsFastShipping': False,
'parentShippingDisplayFlag': True,
'partnerOnlyFlag': False,
'percentSaved': 3,
'personalization': 'no',
'personalizationCharLimit': '0',
'prefix': '',
'prefixHayneedle': None,
'priceFlag': 'NORMAL',
'primarySite': 669,
'productID': 'TKCL290',
'productBanners': None,
'promotions': [
],
'rebateAmount': 0,
'rebateFlag': False,
'rebateID': 0,
'relatedPreconfigSku': '',
'returnPolicy': 'Youmayreturnmostnew,unused',
'sellableFlag': True,
'spinImageFlag': False,
'status': 'IN_STOCK',
'suffixHayneedle': None,
'supplierAddendum': None,
'temporaryPriceEndDate': None,
'variationsInStock': 11,
'warranty': None,
'isNewProduct': False
},
'oneOptionSelected': False,
'optionImageDriver': '',
'requiredPersonalizationIDs': [],
'hasPersonalization': False,
'selectedVariation': None,
'selectedVariationName': '',
'loyaltyPoints': None,
'displayPrice': None
}
# 设你的json转为dict后的数据为ProductData
# 获取options内容
print(ProductData['productDataWithOptions']['options'])
# 获取options里name的内容
print(ProductData['productDataWithOptions']['options'][0]['name'])
有2种方法可以处理request返回的数据:
1.对request发起请求返回的响应对象进行.json()操作,.json操作返回的是一个字典类型(如果返回的结果为空时则会报错),如下:
2.对request请求得到的响应对象中的text数据进行json.loads(text)操作,操作后返回的是字典类型(建议使用这种方法,使用前判断text是否为空,为空也会报错),如下: