2016-09-26 9 views
0

this siteからのレビューをすべて取得します。最初のリクエスト - APIベースのWebサイトからデータを取得

、私はこのコードを使用します

import requests 
from bs4 import BeautifulSoup 

r = requests.get(
    "https://www.traveloka.com/hotel/singapore/mandarin-orchard-singapore-10602") 

data = r.content 
soup = BeautifulSoup(data, "html.parser") 
reviews = soup.find_all("div", {"class": "reviewText"}) 

for i in range(len(reviews)): 
    print(reviews[i].get_text()) 

しかし、この方法を、私は最初のページのみからのレビューを取得することができます。

私はこれと同じrequestsモジュールを使用してapiを使用できると言った人もいます。私はhttps://api.traveloka.com/v1/hotel/hotelReviewAggregateであるapiを見つけましたが、私はrequest payloadの方法でAPIを使用する方法を知らないので、パラメータを読み取ることができません。

私は、すべてのまたは特定のページの特定のホテルのレビューを得るためにpythonまたはapiのパラメータを使用してすべてのレビューを取得するコードを期待しています。

+1

ブラウザデベロッパーツールの[ネットワーク]タブで、ウェブサイトがAPIをどのように呼び出しているか確認しましたか?それから、リクエストでそれを複製するだけです。 –

答えて

-1

[ネットワーク]タブで要求のペイロードを確認します。 skip:8top:8の部分があり、次のページを見るために右矢印をクリックすると、数字が8ずつ増えます。

あなたはその要求を複製し、その結果を同じようにこすりすることができます

編集:

は、クロムを使用してページを開き、f12を打ちます。 Networkタブに移動し、ページの一番下にスクロールして、次のレビューのバッチに進むことができます。右矢印を押すと、すぐにネットワークタブが表示されます。 2番目のhotelReviewAggregateを見つけてクリックします。ヘッダータブの下にはRequest Payloadがあります。 data dictを開き、skiptopを見つけます。次回のレビューを進め、その数字がどう変わるかを見てください。この動作をシミュレートして、他のページにアクセスすることができます。

次に、値をインクリメントしてGETリクエストを作成し、response objectsを使用してBeautifulSoupでデータをスクラップするペイロードを準備する必要があります。

要望チュートリアルからhere

クイック例:

payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get('http://httpbin.org/get', params=payload)

の人が説明もなく私の答えに負の値を与えることにした理由を私は知りません。しかし、まあ、これが便利で、あなたの質問に答えるなら、それを受け入れてください。

+0

例を示していますか? –

+0

@EternityNeet、私は 'edit'部分を追加しました。あなたの質問に答えることを願っています – Leustad

+0

申し訳ありませんが、私はまだそれを手に入れません。私は、 'dev = {devツール}(http://i.imgur.com/LsCDQRE.png)からコピーされた' payload = {"data":... desktop "}'を 'r = requests.get( 'https://api.traveloka.com/v1/hotel/hotelReview集計'、params = payload) '次の行で、まだエラーが発生しています –

関連する問題