2017-04-16 150 views
0

我目前面臨的問題是,我無法抓取我想要從部落網站獲取的信息。Python抓取JSON - 獲取所有項目

詳細地說,我想獲得所有的項目和價格觀看返回的JSON。

到目前爲止,我能夠獲得所有的價格,但缺乏所有的項目,以及回來。我只是回來一個特定的項目。

不知道是什麼問題。

這是我的邏輯至今:

session = requests.Session() 
session.cookies.get_dict() 
url = 'http://www.citydis.com' 
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} 
response = session.get(url, headers=headers) 

soup = BeautifulSoup(response.content, "html.parser") 
metaConfig = soup.find("meta", property="configuration") 


jsonUrl = "https://www.citydis.com/s/results.json?&q=London& customerSearch=1&page=0" 
js_dict = (json.loads(response.content.decode('utf-8'))) 


for item in js_dict: 
    header = (js_dict['searchResults']["tours"]) 
    for titles in header: 
     title_final = (titles.get("title")) 



    url = (js_dict['searchResults']["tours"]) 
    for urls in url: 
     url_final = (urls.get("url")) 


    price = (js_dict['searchResults']["tours"]) 
    for prices in price: 
     price_final = (prices.get("price")["original"]) 

     print("Header: " + title_final + " | " + "Price: " + price_final) 

那輸出:

Header: Ticket für Madame Tussauds London & Star-Wars-Erlebnis | Price: 83,66 € 
Header: Ticket für Madame Tussauds London & Star-Wars-Erlebnis | Price: 37,71 € 
Header: Ticket für Madame Tussauds London & Star-Wars-Erlebnis | Price: 152,01 € 

正如你們所看到的,價格都顯示正常,但項目(頭)沒有什麼不同。我只是回來一個特定的項目。

你們能幫我嗎?任何反饋意見。

回答

1

您的for循環不正確。你的每個prices in price只有1個(最後一個)title_final,因此這個問題。

你可能想做的事 -

for item in js_dict: 
    headers = js_dict['searchResults']["tours"] 
    prices = js_dict['searchResults']["tours"] 

    for title, price in zip(headers, prices): 
     title_final = titles.get("title") 
     price_final = prices.get("price")["original"] 
     print("Header: " + title_final + " | " + "Price: " + price_final) 
+0

感謝您的幫助。欣賞它。但現在我得到了price.get的以下錯誤:price_final = prices.get(「price」)[「original」] AttributeError:'list'object has no attribute'get'你有任何意見嗎?對不起,我對python很陌生 –

1
for titles in header: 
    title_final = (titles.get("title")) 

此代碼運行,並在它的結束,title_final有一個單一的值,並將代碼轉移到接下來的事情。 Python不會奇蹟般地記錄分配給變量的所有值,然後將不同的循環鏈接在一起。您需要在單個循環中完成所有操作或將數據存儲在列表中,並將它們與zip或其他內容結合使用。

for item in js_dict: 

您未使用item。你只是把事情直接從內循環詞典:

(js_dict['searchResults']["tours"]) 

而你重複三遍,所以header == url == price

停下來想想你的代碼。將print陳述放在這裏和那裏,看看發生了什麼以及變量的值是什麼。