2016-11-29 6 views
0

ページからすべてのクルーズを抽出する必要があります。私は2つの要求をする必要があることを知りました。合計結果を得るためのもの+個々のクルーズへの参照+クルーズ自体のためのもの これまでのところ、私は正常にリクエストを行い、JSONを得ました。問題は、要求が最初のページに含まれる参照のみを返すことです。 POSTリクエストURLとしてPOST要求にPythonで要求を含む本文を含める方法

https://www.pocruises.com.au/sc_ignore/b2c/cruiseresults/searchresults 

: は当初、私はこれを使用していました。私は、リクエストにいくつかのヘッダーを午前:私は戻っただけで6の結果を数えていない場合

Host: www.pocruises.com.au 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 
Accept: application/json, text/plain, */* 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate, br 
Referer: https://www.pocruises.com.au/cruises/search 
Content-Type: application/json;charset=utf-8 
Content-Length: 613 
Cookie: ASP.NET_SessionId=zm50ahxa4uoiwcuowgkeizcn; SC_ANALYTICS_GLOBAL_COOKIE=f459da6904ee4cea8a809455f37b09c5|False; optimizelyEndUserId=oeu1480435687102r0.9194470051495017; optimizelySegments=%7B%223906442756%22%3A%22none%22%2C%223911484226%22%3A%22ff%22%2C%223917223299%22%3A%22direct%22%2C%223920524266%22%3A%22false%22%2C%224924982297%22%3A%22true%22%7D; optimizelyBuckets=%7B%227883701652%22%3A%227867701359%22%7D; _ga=GA1.3.1128287966.1480435688; AdBlockDetected=false; _msuuid_29439mm27589=D0670AB5-C96A-4706-A563-9F29FCA3D9D2; gwcc=%7B%22fallback%22%3A%221300159454%22%2C%22clabel%22%3A%22ykseCIGywFkQhoDuxQM%22%2C%22backoff%22%3A86400%2C%22backoff_expires%22%3A1480522087%7D; gaFindACruise=; _gat=1; optimizelyPendingLogEvents=%5B%22n%3Dengagement%26u%3Doeu1480435687102r0.9194470051495017%26wxhr%3Dtrue%26time%3D1480437791.708%26f%3D7274530066%2C7883701652%26g%3D3909534788%22%5D 
Connection: keep-alive 

が今までそれが働きました。この投稿の時点で106でなければなりません。応答には、合計数(正しい)とページ番号、合計ページ数などのメタデータが含まれています。 それから、私はこれを見ました: Firefox Screenshot このRequest bodyには、すべてのページをナビゲートするために必要なものがすべて含まれています。 これは私の全体のこれまでのコードである:私は私が間違っbody一部をやっていると仮定し

Traceback (most recent call last): 
    File "/home/fixxxer/PycharmProjects/POCruses/main.py", line 31, in <module> 
    cruise_data = page.json() 
    File "/usr/lib/python3.5/site-packages/requests/models.py", line 841, in json 
    return complexjson.loads(self.text, **kwargs) 
    File "/usr/lib/python3.5/json/__init__.py", line 319, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python3.5/json/decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

import requests 

url = "https://www.pocruises.com.au/sc_ignore/b2c/cruiseresults/searchresults" 
session = requests.session() 
data = {"searchParameters": {"p": [], "c": [], "d": [], "s": [], "ms": [], "adv": [], "sort": "dpa", "page": 5}, 
     "renderingParameters": {"DefaultSortOption": "dpa", "LargeScreenFlag": "true", "NewModelIsLoading": "false", 
           "PagingAnchor": "", "ViewStyleSelectorVisible": "true", "FilterBarVisible": "true", 
           "NumberOfResultsAndSortByPanelVisible": "true", "DefaultResultsView": "Grid", 
           "MaxNumberOfResults": 0, "PaginationEnabled": "true", "KeepPageState": "true", 
           "PageSize": 9, "DefaultResultsGrouping": "Itinerary", "Duration": [], 
           "CruiseItinerary": [], "Voyage": [], "ExcludeVoyage": [], "PromoCode": [], 
           "AdditionalPromoCodes": []}} 
headers = {"Host": "www.pocruises.com.au", 
      "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0", 
      "Accept": "application/json, text/plain, */*", "Accept-Language": "en-US,en;q=0.5", 
      "Content-Type": "application/json;charset=utf-8", 
      "Cookie": "ASP.NET_SessionId=zm50ahxa4uoiwcuowgkeizcn; " 
        "SC_ANALYTICS_GLOBAL_COOKIE=f459da6904ee4cea8a809455f37b09c5|False; " 
        "optimizelyEndUserId=oeu1480435687102r0.9194470051495017; " 
        "optimizelySegments=%7B%223906442756%22%3A%22none%22%2C%223911484226%22%3A%22ff%22%2C" 
        "%223917223299%22%3A%22direct%22%2C%223920524266%22%3A%22false%22%2C%224924982297%22%3A%22true" 
        "%22%7D; optimizelyBuckets=%7B%227883701652%22%3A%227867701359%22%7D; " 
        "_ga=GA1.3.1128287966.1480435688; AdBlockDetected=false; " 
        "_msuuid_29439mm27589=D0670AB5-C96A-4706-A563-9F29FCA3D9D2; " 
        "gwcc=%7B%22fallback%22%3A%221300159454%22%2C%22clabel%22%3A%22ykseCIGywFkQhoDuxQM%22%2C" 
        "%22backoff%22%3A86400%2C%22backoff_expires%22%3A1480522087%7D; gaFindACruise=; _gat=1; " 
        "optimizelyPendingLogEvents=%5B%5D", 
      "Connection": "keep-alive"} 
session.headers.update(headers) 
page = session.post(url, headers=headers, data=data) 
cruise_data = page.json() 
print(cruise_data) 



session.headers.update(headers) 
page = session.post(url, headers=headers, data=data) 
cruise_data = page.json() 

しかし、今、私はこのエラーを取得しています。リクエストにこの本文を追加するにはどうすればよいですか? 編集:dataパラメータを削除した場合、要求は正常に動作しますが、情報は必要なものではありません。ブラウザでページを開き、ブラウザに送信された応答を確認します。 ScreenShot これはi bodyなしで取得します。これは私がこのbodyが重要な情報であることを知っている方法です。

+0

:あなたはjson=を使用している場合

することは、それは自動的にヘッダ"Content-Type": "application/json;charset=utf-8"

完全なコードは次のようになります追加します。 – furas

+0

@furas私は全てのコードで投稿を編集しました – FixXxeR

+0

@furas any thoughts? – FixXxeR

答えて

0

それはとてもあなたがところで

page = session.post(url, json=data) 

を必要とし、このページはJSONとしてデータを期待縫い目:

Serverは常に新しいクライアントに新しいクッキーを割り当て - 特にクッキーラインASP.NET_SessionIdからGETので、より良いをメインページを開き、他のリクエストを行う前に新しいCookieを取得します。

session.headers.update(headers)の後にheaders=headersget()/post()に使用する必要はありません。要求によっては余分なヘッダーが必要な場合にのみヘッダーを変更する必要があります。誰もがそれを実行し、それをテストすることができるように、簡単な作業例を作成

import requests 

# -- create session --- 

session = requests.session() 

headers = { 
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0", 
    "Accept": "application/json, text/plain, */*", 
    "Accept-Language": "en-US,en;q=0.5", 
    "Connection": "keep-alive" 
} 

# set headers for all requests 
session.headers.update(headers) 

# --- get cookies --- 

url = "https://www.pocruises.com.au/" 
page = session.get(url) 

# --- search --- 

data = { 
    "searchParameters": { 
     "p": [], 
     "c": [], 
     "d": [], 
     "s": [], 
     "ms": [], 
     "adv": [], 
     "sort": "dpa", 
     "page": 5 
    }, 
    "renderingParameters": { 
     "DefaultSortOption": "dpa", 
     "LargeScreenFlag": "true", 
     "NewModelIsLoading": "false", 
     "PagingAnchor": "", 
     "ViewStyleSelectorVisible": "true", 
     "FilterBarVisible": "true", 
     "NumberOfResultsAndSortByPanelVisible": "true", 
     "DefaultResultsView": "Grid", 
     "MaxNumberOfResults": 0, 
     "PaginationEnabled": "true", 
     "KeepPageState": "true", 
     "PageSize": 9, 
     "DefaultResultsGrouping": "Itinerary", 
     "Duration": [], 
     "CruiseItinerary": [], 
     "Voyage": [], 
     "ExcludeVoyage": [], 
     "PromoCode": [], 
     "AdditionalPromoCodes": [] 
    } 
} 

url = "https://www.pocruises.com.au/sc_ignore/b2c/cruiseresults/searchresults" 

# `json=` add `"Content-Type": "application/json;charset=utf-8"` 

page = session.post(url, json=data) 

print(page.text) 
cruise_data = page.json() 
print(cruise_data) 
関連する問題