2017-01-04 19 views
2

私はすべての結果をhttps://www.ncl.com/から取得しようとしています。私は、リクエストがGETであることが判明し、このリンクに送った:https://www.ncl.com/search_vacations これまでのところ、私は最初の12の結果を得て、それを解析しても問題はありません。問題は、結果のページを「変更する」方法を見つけることができないことです。私は499の12を取得し、私はそれらをすべて取得する必要があります。私はこれを行うように試みたhttps://www.ncl.com/search_vacations?current_page=1と毎回それを増やしますが、毎回同じ(最初の)結果が得られます。再度成功しないでjson = {"current_page": '1'}要求にjsonボディを追加しようとしました。 これは、これまでの私のコードです:requestsとプロキシを使用してHTTP要求ですべての結果を得る方法python

import math 
import requests 

session = requests.session() 
proxies = {'https': 'https://97.77.104.22:3128'} 
headers = { 
    "authority": "www.ncl.com", 
    "method": "GET", 
    "path": "/search_vacations", 
    "scheme": "https", 
    "accept": "application/json, text/plain, */*", 
    "connection": "keep-alive", 
    "referer": "https://www.ncl.com", 
    "cookie": "AkaUTrackingID=5D33489F106C004C18DFF0A6C79B44FD; AkaSTrackingID=F942E1903C8B5868628CF829225B6C0F; UrCapture=1d20f804-718a-e8ee-b1d8-d4f01150843f; BIGipServerpreprod2_www2.ncl.com_http=61515968.20480.0000; _gat_tealium_0=1; BIGipServerpreprod2_www.ncl.com_r4=1957341376.10275.0000; MP_COUNTRY=us; MP_LANG=en; mp__utma=35125182.281213660.1481488771.1481488771.1481488771.1; mp__utmc=35125182; mp__utmz=35125182.1481488771.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); utag_main=_st:1481490575797$ses_id:1481489633989%3Bexp-session; s_pers=%20s_fid%3D37513E254394AD66-1292924EC7FC34CB%7C1544560775848%3B%20s_nr%3D1481488775855-New%7C1484080775855%3B; s_sess=%20s_cc%3Dtrue%3B%20c%3DundefinedDirect%2520LoadDirect%2520Load%3B%20s_sq%3D%3B; _ga=GA1.2.969979116.1481488770; mp__utmb=35125182; NCL_LOCALE=en-US; SESS93afff5e686ba2a15ce72484c3a65b42=5ecffd6d110c231744267ee50e4eeb79; ak_location=US,NY,NEWYORK,501; Ncl_region=NY; optimizelyEndUserId=oeu1481488768465r0.23231006365903206", 
    "Proxy-Authorization": "Basic QFRLLTVmZjIwN2YzLTlmOGUtNDk0MS05MjY2LTkxMjdiMTZlZTI5ZDpAVEstNWZmMjA3ZjMtOWY4ZS00OTQxLTkyNjYtOTEyN2IxNmVlMjlk" 
} 


def get_count(): 
    response = requests.get(
     "https://www.ncl.com/search_vacations?cruise=1&cruiseTour=0&cruiseHotel=0&cruiseHotelAir=0&flyCruise=0&numberOfGuests=4294953449&state=undefined&pageSize=10&currentPage=", 
     proxies=proxies) 
    tmpcruise_results = response.json() 
    tmpline = tmpcruise_results['meta'] 
    total_record_count = tmpline['aggregate_record_count'] 
    return total_record_count 


total_cruise_count = get_count() 
total_page_count = math.ceil(int(total_cruise_count)/10) 
session.headers.update(headers) 
cruises = [] 
page_counter = 1 
while page_counter <= total_page_count: 
    url = "https://www.ncl.com/search_vacations?current_page=" + str(page_counter) + "" 
    page = requests.get(url, headers=headers, proxies=proxies) 
    cruise_results = page.json() 
    for line in cruise_results['results']: 
     cruises.append(line) 
     print(line) 
    page_counter += 1 
    print(cruise_results['pagination']["current_page"]) 
    print("----------") 
print(len(cruises)) 

。任意のアイデアをどのように行うには?

+0

ブラウザでの動作を確認するには、まずウェブブラウザを使用します。クッキーで簡単に作業するために 'requests.Session()'が必要な場合があります。 – furas

+2

提案したようにSession()を作成してください。後であなたのリクエストにヘッダーを送ることを忘れないでください。(ヘッダーの中には通常Cookieがあります) –

+0

firefox-developerとsessionを使用しています。コード 'session.headers.update(headers)'に見られるように。問題は、私がレスポンスを返すと、レスポンスに 'current_page:1'と表示されることです。つまり、私はそれらを変更する必要があります。これまでのところ、私はブラウザでもそれを行う方法を見つけることができません。 – nephilimrising

答えて

2

ウェブサイトは12

検索のURLをあなたの結果ページの元となるオフセット検索結果を定義しているようだパラメータNaoを取るのページで構成、(ブランクサーチ用)12264の検索結果を持っていると主張します開始。だから、https://www.ncl.com/uk/en/search_vacations?Nao=45

結果46

と案の定で始まる、12の検索結果の "ページ" を取得する必要フェッチ

"pagination": { 

    "starting_record": "46", 
    "ending_record": "57", 
    "current_page": "4", 
    "start_page": "1", 
    ... 

ので、ページにすべての結果を通じて、スタートNao = 0に設定し、フェッチごとに12を追加します。

+0

omgありがとう!!!あなたはどのようなパラメータを取るのですか? – nephilimrising

+0

[ウェブサイト](https://www.ncl.com/uk/ja/)に行き、ページの上部にある検索ボックスに空白の検索を入力しました。結果の[検索ページ](https://www.ncl.com/uk/en/search?Ntt=)には、検索結果のページネーションリンクが表示されます。ページネーションリンクを調べると、リンクごとに「Nao」が増加することがわかりました。また、APIが同じクエリパラメータに応答したかどうかをテストすることは合理的でした。 – snakecharmerb

+0

あなたを祝福してください! – nephilimrising

関連する問題