2017-04-16 98 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陈述放在这里和那里,看看发生了什么以及变量的值是什么。