2012-07-02 2 views
2

Я использую Python 2.7, и я пытаюсь это сделать:
У меня есть следующая строка JSON.Декодирование JSON, чтобы дать мне определенную переменную в Python?

http://www.ows.newegg.com/Products.egg/N82E16822148992

В этой строке, есть несколько значений называется FinalPrice. Я пытаюсь получить MAIN FinalPrice за данный товар (здесь #N82E16822148992). main FinalPrice будет тем, который ссылается на основной элемент на странице. Соответствующая страница для этой страницы JSON: http://www.newegg.com/Product/Product.aspx?Item=N82E16822148992.

Итак, будет ли какой-нибудь способ, чтобы захватить FinalPrice мне нужно из обычно около 10 FinalPrices (я обычно говорю, потому что я только проверил количество FinalPrices 3 звеньев, и они все десять)? Я подумал, что, может быть, я смогу найти способ, используя имя продукта, чтобы найти местонахождение окончательной цены, но всегда есть персональные данные, относящиеся к странице, между именем продукта и FinalPrice.

Что я могу сделать по этому поводу?

PS Вот что я пробовал: (? Или, может быть, я просто смотрел на нее неправильно)
Я посмотрел на документацию JSON Python.org, но это не помогло мне много с поиском конкретной FinalPrice
Я попытался сделать всю страницу JSON строкой и использовать некоторые строковые манипуляции (s.find, s [a: b]), чтобы получить FinalPrice мне нужно, но я не мог найти способ получить FinalPrice кроме того первый.
Я искал в Google и Stack Overflow для правильного ответа на этот вопрос.

Это все, что я сделал до сих пор.

+0

[Что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) – inspectorG4dget

+0

@ inspectorG4dget: Может мы обойдем эту ссылку? OP будет лучше обслуживаться с просьбой добавить дополнительную информацию *, возможно * с дружественным указателем на этот сайт. URL-адрес этого сайта можно удалить, и OP не станет более мудрее. –

+0

@MartijnPieters: Обычно я пишу, объясняя, почему важно публиковать то, что вы пробовали.Однако сегодня я уже видел слишком много таких вопросов. Кроме того, эта веб-страница справляется с довольно хорошей работой, объясняя это, читая, что будет снимать давление со мной, чтобы дать такое объяснение. Я действительно не собирался быть грубым в своем комментарии и извиняться, если так оно и произошло. – inspectorG4dget

ответ

3

Основная структура данных верхнего уровня данных JSON вы связаны имеет только одинFinalPrice ключ, поэтому она должна быть тривиальной, чтобы получить эту информацию:

>>> import urllib2, json 
>>> data = json.load(urllib2.urlopen('http://www.ows.newegg.com/Products.egg/N82E16822148992')) 
>>> print data[u'FinalPrice'] 
$79.99 

Вы можете использовать pprint.pprint function, чтобы получить быстрое ощущение структуры данных:

>>> from pprint import pprint 
>>> pprint(data) 
{u'AddToCartButtonText': u'Add to Cart', 
u'AddToCartButtonType': u'AD', 
u'AverageRating': 0, 
u'BrandInfo': None, 
u'CanAddToCart': False, 
u'ComboCount': 5, 
u'CoremetricsInfo': {u'Brand': u'Seagate', 
         u'CategoryID': u'IPS380', 
         u'PageID': u'PRODUCT: NBHD 320G|ST ST320LT014 7K SATA3G %_22-148-992 (22-148-992)', 
         u'ProductName': u'NBHD 320G|ST ST320LT014 7K SATA3G %_22-148-992'}, 
u'Discount': u'You Save: $10.00', 
u'ETA': u'/Date(-62135568000000)/', 
u'EmailFriendImageInfo': {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S35$', 
          u'ItemNumber': None, 
          u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S100$', 
          u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S125$', 
          u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S180$', 
          u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S300$', 
          u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S35$', 
          u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S60$', 
          u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S640$', 
          u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S125$', 
          u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S60$', 
          u'Title': None}, 
u'EnergyStarText': None, 
u'FinalPrice': u'$79.99', 
u'FreeShippingFlag': True, 
u'HasMappingPrice': False, 
u'Image': {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S180$', 
      u'ItemNumber': None, 
      u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S100$', 
      u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S125$', 
      u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S180$', 
      u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S300$', 
      u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S35$', 
      u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S60$', 
      u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S640$', 
      u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S100$', 
      u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S60$', 
      u'Title': None}, 
u'InstantSaving': 0, 
u'Instock': True, 
u'InstockForCombo': False, 
u'IronEggDescription': None, 
u'IsActivated': True, 
u'IsCellPhoneItem': False, 
u'IsComboBundle': False, 
u'IsFeaturedItem': False, 
u'IsHot': False, 
u'IsInPMCC': False, 
u'IsPreLaunch': False, 
u'IsShellShockerItem': False, 
u'IsShipByNewegg': True, 
u'IsShowEnergyStarSection': False, 
u'IsShowSoldOutText': False, 
u'ItemGroupID': 0, 
u'ItemMapPriceMarkType': 0, 
u'ItemNumber': u'22-148-992', 
u'ItemOwnerType': 0, 
u'LimitQuantity': -1, 
u'MailInRebateInfo': None, 
u'MailInRebateText': None, 
u'MappingFinalPrice': None, 
u'Model': u'ST320LT014', 
u'NeweggItemNumber': None, 
u'NumberOfReviews': 0, 
u'OriginalPrice': u'$89.99', 
u'ParentItem': None, 
u'ProductProperties': None, 
u'ProductStockType': 0, 
u'PromotionInfo': None, 
u'PromotionText': u'', 
u'ReturnPolicyInfo': {u'HtmlContent': None, 
         u'ID': u'44', 
         u'Name': u'Standard Return Policy'}, 
u'ReviewSummary': {u'Rating': 0, u'TotalReviews': u'[]'}, 
u'SellerId': None, 
u'SellerItemPropertyList': None, 
u'SellerName': None, 
u'ShipByNewegg': 0, 
u'ShippingInfo': {u'NormalShippingText': u'Free Shipping*', 
        u'RestrictedShippingText': u' Additional fees may apply for shipments to APO/FPO, AK, HI and PR.', 
        u'RestrictedShippingTitle': u'Shipping Restrictions', 
        u'SpecialShippingText': u' Additional fees may apply for shipments to APO/FPO, AK, HI and PR.'}, 
u'ShippingPromotionInfo': None, 
u'ShoppingInsight': {u'Description': u'See what other informed Newegg customers purchased after viewing this product', 
         u'PromotionItems': [{u'AfterRebate': None, 
              u'FinalPrice': u'$149.99', 
              u'Instock': True, 
              u'IsCurrentItem': False, 
              u'IsFreeShipping': True, 
              u'IsShowOriginalPrice': False, 
              u'ItemBrand': {u'BrandId': 1305, 
                  u'BrandImage': u'http://images10.newegg.com/brandimage/Brand1305.gif', 
                  u'Code': 0, 
                  u'Description': u'Seagate', 
                  u'HasManfactoryLogo': True, 
                  u'ManufactoryWeb': u'http://www.seagate.com', 
                  u'WebSiteURL': None}, 
              u'ItemImage': {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S180W$', 
                  u'ItemNumber': None, 
                  u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S100$', 
                  u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S125W$', 
                  u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S180W$', 
                  u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S300W$', 
                  u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S35$', 
                  u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S60$', 
                  u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S640W$', 
                  u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S125W$', 
                  u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-591-TS?$S60$', 
                  u'Title': None}, 
              u'ItemMapPriceMarkType': 0, 
              u'ItemNumber': u'22-148-591', 
              u'MappingFinalPrice': None, 
              u'OriginalPrice': u'$149.99', 
              u'Percentage': u'22', 
              u'ReviewSummary': {u'Rating': 4, 
                   u'TotalReviews': u'[829]'}, 
              u'Title': u'Seagate Momentus XT ST95005620AS 500GB 7200 RPM 32MB Cache 2.5" SATA 3.0Gb/s with NCQ Solid State Hybrid Drive -Bare Drive'}, 
              {u'AfterRebate': None, 
              u'FinalPrice': u'$79.99', 
              u'Instock': True, 
              u'IsCurrentItem': True, 
              u'IsFreeShipping': True, 
              u'IsShowOriginalPrice': True, 
              u'ItemBrand': {u'BrandId': 1305, 
                  u'BrandImage': u'http://images10.newegg.com/brandimage/Brand1305.gif', 
                  u'Code': 0, 
                  u'Description': u'Seagate', 
                  u'HasManfactoryLogo': True, 
                  u'ManufactoryWeb': u'http://www.seagate.com', 
                  u'WebSiteURL': None}, 
              u'ItemImage': {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S180$', 
                  u'ItemNumber': None, 
                  u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S100$', 
                  u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S125$', 
                  u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S180$', 
                  u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S300$', 
                  u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S35$', 
                  u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S60$', 
                  u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S640$', 
                  u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S125$', 
                  u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-TS?$S60$', 
                  u'Title': None}, 
              u'ItemMapPriceMarkType': 0, 
              u'ItemNumber': u'22-148-992', 
              u'MappingFinalPrice': None, 
              u'OriginalPrice': u'$89.99', 
              u'Percentage': u'16', 
              u'ReviewSummary': {u'Rating': 0, 
                   u'TotalReviews': u'[]'}, 
              u'Title': u'Seagate Momentus Thin ST320LT014 320GB 7200 RPM 16MB Cache 2.5" SATA 3.0Gb/s Internal Notebook Hard Drive -Bare Drive'}, 
              {u'AfterRebate': None, 
              u'FinalPrice': u'$69.99', 
              u'Instock': True, 
              u'IsCurrentItem': False, 
              u'IsFreeShipping': False, 
              u'IsShowOriginalPrice': True, 
              u'ItemBrand': {u'BrandId': 1306, 
                  u'BrandImage': u'http://images10.newegg.com/brandimage/Brand1306.gif', 
                  u'Code': 0, 
                  u'Description': u'Western Digital', 
                  u'HasManfactoryLogo': True, 
                  u'ManufactoryWeb': u'http://www.wdc.com/en/', 
                  u'WebSiteURL': None}, 
              u'ItemImage': {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S180W$', 
                  u'ItemNumber': None, 
                  u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S100$', 
                  u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S125W$', 
                  u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S180W$', 
                  u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S300W$', 
                  u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S35$', 
                  u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S60$', 
                  u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S640W$', 
                  u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S125W$', 
                  u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-136-280-TS?$S60$', 
                  u'Title': None}, 
              u'ItemMapPriceMarkType': 0, 
              u'ItemNumber': u'22-136-280', 
              u'MappingFinalPrice': None, 
              u'OriginalPrice': u'$89.99', 
              u'Percentage': u'16', 
              u'ReviewSummary': {u'Rating': 5, 
                   u'TotalReviews': u'[1,299]'}, 
              u'Title': u'Western Digital Scorpio Black WD3200BEKT 320GB 7200 RPM 16MB Cache 2.5" SATA 3.0Gb/s Internal Notebook Hard Drive -Bare Drive'}, 
              {u'AfterRebate': None, 
              u'FinalPrice': u'$59.99', 
              u'Instock': True, 
              u'IsCurrentItem': False, 
              u'IsFreeShipping': True, 
              u'IsShowOriginalPrice': True, 
              u'ItemBrand': {u'BrandId': 1305, 
                  u'BrandImage': u'http://images10.newegg.com/brandimage/Brand1305.gif', 
                  u'Code': 0, 
                  u'Description': u'Seagate', 
                  u'HasManfactoryLogo': True, 
                  u'ManufactoryWeb': u'http://www.seagate.com', 
                  u'WebSiteURL': None}, 
              u'ItemImage': {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S180$', 
                  u'ItemNumber': None, 
                  u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S100$', 
                  u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S125$', 
                  u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S180$', 
                  u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S300$', 
                  u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S35$', 
                  u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S60$', 
                  u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S640$', 
                  u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S125$', 
                  u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-906-TS?$S60$', 
                  u'Title': None}, 
              u'ItemMapPriceMarkType': 0, 
              u'ItemNumber': u'22-148-906', 
              u'MappingFinalPrice': None, 
              u'OriginalPrice': u'$69.99', 
              u'Percentage': u'11', 
              u'ReviewSummary': {u'Rating': 5, 
                   u'TotalReviews': u'[1]'}, 
              u'Title': u'Seagate Momentus Thin ST250LT003 250GB 5400 RPM 16MB Cache 2.5" SATA 3.0Gb/s Internal Notebook Hard Drive -Bare Drive'}]}, 
u'ShowOriginalPrice': True, 
u'StaticText': None, 
u'StrAddItem': None, 
u'StrAlt': None, 
u'StrCartImg': None, 
u'SubCategoryId': 380, 
u'SubCategoryName': u'Laptop Hard Drives', 
u'Title': u'Seagate Momentus Thin ST320LT014 320GB 7200 RPM 16MB Cache 2.5" SATA 3.0Gb/s Internal Notebook Hard Drive -Bare Drive', 
u'UnitPrice': 0, 
u'Warnings': None, 
u'WarrantyInfo': None, 
u'XmlSpec': None, 
u'imageGallery': [{u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S640$', 
        u'ItemNumber': None, 
        u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S100$', 
        u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S125$', 
        u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S180$', 
        u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S300$', 
        u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S35$', 
        u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S60$', 
        u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S640$', 
        u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S100$', 
        u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z01?$S60$', 
        u'Title': None}, 
        {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S640$', 
        u'ItemNumber': None, 
        u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S100$', 
        u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S125$', 
        u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S180$', 
        u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S300$', 
        u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S35$', 
        u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S60$', 
        u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S640$', 
        u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S100$', 
        u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z02?$S60$', 
        u'Title': None}, 
        {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S640$', 
        u'ItemNumber': None, 
        u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S100$', 
        u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S125$', 
        u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S180$', 
        u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S300$', 
        u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S35$', 
        u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S60$', 
        u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S640$', 
        u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S100$', 
        u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z03?$S60$', 
        u'Title': None}, 
        {u'FullPath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S640$', 
        u'ItemNumber': None, 
        u'PathSize100': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S100$', 
        u'PathSize125': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S125$', 
        u'PathSize180': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S180$', 
        u'PathSize300': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S300$', 
        u'PathSize35': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S35$', 
        u'PathSize60': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S60$', 
        u'PathSize640': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S640$', 
        u'SmallImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S100$', 
        u'ThumbnailImagePath': u'http://images17.newegg.com/is/image/newegg/22-148-992-Z04?$S60$', 
        u'Title': None}]} 

Вы можете видеть, что другие FinalPrice элементы являются частью ShoppingInsight ->PromotionItems структура, которая представляет собой список:

>>> print data[u'ShoppingInsight'][u'PromotionItems'][0][u'FinalPrice'] 
$149.99 
>>> print data[u'ShoppingInsight'][u'PromotionItems'][0][u'Title'] 
Seagate Momentus XT ST95005620AS 500GB 7200 RPM 32MB Cache 2.5" SATA 3.0Gb/s with NCQ Solid State Hybrid Drive -Bare Drive 
+0

Спасибо! Даже с моей расплывчатой ​​почтой и ужасным вопросом это помогло ЛОТ. – Arnav

1

Использовать парсер json. Например, если я сохранить веб-страницу данных, которые предоставляются в файле с именем json_data, то я могу это сделать ...

import json 
    json_data=open('json_data') 

    data = json.load(json_data) 
    print(data["FinalPrice"]) 
    json_data.close() 

Или, если у вас уже есть данные в переменной просто использовать json.load на эта переменная.

Смежные вопросы