1. 程式人生 > >Scrapy模擬表單和Ajax傳送POST請求

Scrapy模擬表單和Ajax傳送POST請求

scrapy.FormRequest

普通請求使用scrapy.Request類就可以實現,但是遇到模擬表單或Ajax提交post請求的時候,Request類就不如 子類 FormRequest類方便了,因為他自帶 formdata ,專門用來設定表單欄位資料,預設method也是POST。

def start_requests(self):
    form_data = {'f1':'1', 'f2':'100'}  # 表單資料,字典格式,注意數字也要用引號引起來,否則報錯。
    yield scrapy.FormRequest(url, formdata=form_data) # 還可以通過callback修改回撥函式等

scrapy.http.FormRequest

還有其他方法,如scrapy.http.FormRequest,但是感覺不如以上方法方便:

return [scrapy.http.FormRequest(
    self.myurl, 
    formdata={'f1':'123','f2':'456'},
    callback=self.parse)]
from scrapy.item import Item, Field
from scrapy.http import FormRequest
from scrapy.spider import BaseSpider


class
DeltaItem(Item):
title = Field() link = Field() desc = Field() class DmozSpider(BaseSpider): name = "delta" allowed_domains = ["delta.com"] start_urls = ["http://www.delta.com"] def parse(self, response): yield FormRequest.from_response(response, formname='flightSearchForm'
, formdata={'departureCity[0]': 'JFK', 'destinationCity[0]': 'SFO', 'departureDate[0]': '07.20.2013', 'departureDate[1]': '07.28.2013'}, callback=self.parse1) def parse1(self, response): print response.status