2016-09-19 10 views
1

私はScrapyとPythonを初めて使います。私はScrapyの例でFormRequestを使用しようとしていますが、formdataパラメータが "Air"から '[]'を解析していないようです。これを回避する方法はありますか?FormRequest Scrapy

import scrapy 
import re 
import json 
from scrapy.http import FormRequest 

class AirfareSpider(scrapy.Spider): 
    name = 'airfare' 
    start_urls = [ 
    'http://www.viajanet.com.br/busca/voos-resultados#/POA/MEX/RT/01-03-2017/15-03-2017/-/-/-/1/0/0/-/-/-/-' 
    ] 

    def parse(self, response): 
    return [FormRequest(url='http://www.viajanet.com.br/busca/resources/api/AvailabilityStatusAsync', 
     formdata={"Partner":{ 
        "Token":"p0C6ezcSU8rS54+24+zypDumW+ZrLkekJQw76JKJVzWUSUeGHzltXDhUfEntPPLFLR3vJpP7u5CZZYauiwhshw==", 
        "Key":"OsHQtrHdMZPme4ynIP4lcsMEhv0=", 
        "Id":"52", 
        "ConsolidatorSystemAccountId":"80", 
        "TravelAgencySystemAccountId":"80", 
        "Name":"B2C" 
          }, 
       "Air":[{ 
        "Arrival":{ 
        "Iata":"MEX", 
        "Date":"2017-03-15T15:00:00.000Z" 
         }, 
       "Departure":{ 
        "Iata":"POA", 
        "Date":"2017-03-01T15:00:00.000Z" 
        }, 
       "InBoundTime":"0", 
       "OutBoundTime":"0", 
       "CiaCodeList":"[]", 
       "BookingClass":"-1", 
       "IsRoundTrip":"true", 
       "Stops":"-1", 
       "FareType":"-" 
       }], 
       "Pax":{ 
        "adt":"1", 
        "chd":"0", 
        "inf":"0" 
       }, 
       "DisplayTotalAmount":"false", 
       "GetDeepLink":"false", 
       "GetPriceMatrixOnly":"false", 
       "PageLength":"10", 
       "PageNumber":"2" 
       } 
      , callback=self.parse_airfare)] 

    def parse_airfare(self, response): 
     data = json.loads(response.body) 
+0

あなたはこのリンクながらそのポスト要求 –

答えて

4

てみ使用FormRequest.from_respone

https://doc.scrapy.org/en/latest/topics/request-response.html#using-formrequest-from-response-to-simulate-a-user-login

import scrapy 

class LoginSpider(scrapy.Spider): 
    name = 'example.com' 
    start_urls = ['http://www.example.com/users/login.php'] 

    def parse(self, response): 
    return scrapy.FormRequest.from_response(
     response, 
     formdata={'username': 'john', 'password': 'secret'}, 
     callback=self.after_login 
    ) 

    def after_login(self, response): 
    # check login succeed before going on 
    if "authentication failed" in response.body: 
     self.logger.error("Login failed") 
     return 
+0

に必要なのparamsを渡してもよろしいです:ここで コードです質問に答えるかもしれないが、答えの本質的な部分をここに含めて、参考のためのリンクを提供する方がよい。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 14322436) – Boud

+0

ありがとうございます。 –

+0

私の回答を編集しました –