2017-04-16 5 views
0

私は、現在、私がパーツウェブサイトから必要な情報をスクラップできないという問題に直面しています。PythonクローリングJSON - すべてのアイテムを取得する

具体的には、私はJSONにある見どころのすべてのアイテムと価格を取得したいと思います。

これまでのところ、私はすべての価格を元に戻すことができましたが、すべての商品を戻すことができませんでした。私はちょうど1つの特定のアイテムを戻しています。

問題の内容が不明です。

これまでのところ、私のロジックです:出力ザッツ

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つの特定のアイテムを戻しています。

あなたは私を助けてもらえますか?どんなフィードバックもありがとうございます。

答えて

1

forループが正しくありません。 prices in priceごとに1(最後の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

ご協力いただきありがとうございます。感謝します。しかし、今私はprices.get( "price")["original"] のprice_final = prices.getの次のエラーを受け取りました。AttributeError: 'list'オブジェクトに属性 'get'がありません。申し訳ありません、私はPythonには初めてです –

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

このコードが実行され、それの終わりに、title_finalは、単一の値を持ち、コードは次のことに移ります。 Pythonは、変数に割り当てられたすべての値を魔法のように追跡しておらず、異なるループをリンクしています。 1つのループですべてを実行するか、リストにデータを格納し、zipなどと組み合わせる必要があります。

for item in js_dict: 

あなたはitemを使用していません。

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

そして、あなたはその3回繰り返し、そうheader == url == priceている:あなたは、ループ内の辞書からまっすぐに物事を取得しています。

コードを停止してください。 printステートメントをここに、何が起こっているのか、そして変数の値が何であるかを見てください。

関連する問題