2017-08-10 50 views
0

我正在使用https://www.fbo.gov/index?s=opportunity&tab=search&mode=list找到的表單。如何使用scrapy的FormRequest'檢查'複選框?

我需要通過檢查窗體上該組中的一個或多個複選框來刮取結果。根據我的理解,只需提供一個複選框元素,'checked'屬性就代表一個複選框。我如何在我的FormRequest中定義它?

這是我與

<div id="div_dnf_class_values_procurement_notice__naics_code___0001_check" ><input name="dnf_class_values[procurement_notice][naics_code][]" type="checkbox" value="0001" alt="NAICS Code: 111 -- Crop Production" title="NAICS Code: 111 -- Crop Production" id="dnf_class_values_procurement_notice__naics_code___0001_check" class="input-checkbox"><label for="dnf_class_values_procurement_notice__naics_code___0001_check">111 -- Crop Production</label></div> 

的形式使用POST方法測試所述輸入元件。這是我現在的代碼:

import scrapy 


class ContractsSpider(scrapy.Spider): 
    name = "contracts" 

    def start_requests(self): 
     url = 'https://www.fbo.gov/index?s=opportunity&tab=search&mode=list' 

     yield scrapy.Request(url=url, callback=self.parse) 


    def parse(self, response): 
      yield scrapy.FormRequest.from_response(
      response, 
      formdata={'dnf_class_values[procurement_notice][naics_code][]' : '0001', 
         'dnf_class_values[procurement_notice][searchtype]' : 'active', 
         'dnf_class_values[procurement_notice][all_agencies]' : 'all', 
         'dnf_class_values[procurement_notice][recovery_act]' : '0'}, 
      formname='vendor_procurement_notice_search', 
      callback=self.after_form, 
      method="POST", 
     ) 

    def after_form(self, response): 
     filename = 'response.html' 
     with open(filename, 'wb') as f: 
      f.write(response.body) 
     self.log('Saved file %s' % filename) 
     return response 

我是scrapy的新手,對我的formdata屬性應該包含什麼感到困惑?字典中的額外元素只是表單中所需的現場射頻盒。不知道他們是否有必要在這裏添加。 scrapy的FormRequest文檔非常簡單,我遇到了很多麻煩。

我遵循下面的答案之一的建議,並使用輸入元素的名稱,但有很多輸入元素與該名稱。另外,如何在一次提交中檢查多個複選框?

我希望after_form函數將結果html寫入文件,所以我知道它的工作原理。

回答

0

要發送帶有複選框的表單,表單數據應該包含這個鍵值對:'dnf_class_values[procurement_notice][naics_code][]': '0001',它是輸入元素的名稱值(複選框)。

+0

這就是我一開始以爲的,但它沒有選中(當頁面加載時)的值。另外,所有其他複選框輸入都有不同的值。每一個都是唯一的嗎?所有這些輸入複選框的名稱也與此相同。我會盡力而爲,謝謝! –

+0

它沒有工作,請查看我對編輯問題的詳細信息 –