我正在使用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寫入文件,所以我知道它的工作原理。
這就是我一開始以爲的,但它沒有選中(當頁面加載時)的值。另外,所有其他複選框輸入都有不同的值。每一個都是唯一的嗎?所有這些輸入複選框的名稱也與此相同。我會盡力而爲,謝謝! –
它沒有工作,請查看我對編輯問題的詳細信息 –