scrapy,如何向表单发送多个请求

时间:2014-04-13 22:43:35

标签: python forms web-scraping scrapy

好的我在这里有一个wroking代码,我正在向表单发送1个请求,我正在收回所需的所有数据。代码:

 def start_requests(self):
    nubmers="12345"
    submitForm = FormRequest("https://domain.com/url",
                             formdata={'address':numbers,'submit':'Search'},
                             callback=self.after_submit)
    return [submitForm]

现在,我需要通过相同的表单发送多个请求,并为每个请求收集数据。我需要收集x号码的数据。我将所有数字存储到一个文件中:

   12345
   54644
   32145
   12345

代码:

def start_requests(self):
    with open('C:\spiders\usps\zips.csv') as fp:
        for line in fp:
            submitForm = FormRequest("https://domain.com/url",
                                formdata={'address':line,
    'submit':'Search'},callback=self.after_submit,dont_filter=True)
    return [submitForm]

此代码也有效,但它仅收集文件中最后一个条目的数据。我需要为文件中的每一行/数字收集数据。如果我尝试使用yield而不是返回scrapy stop并发出此错误:

if not request.dont_filter and self.df.request_seen(request):
exceptions.AttributeError: 'list' object has no attribute 'dont_filter'

1 个答案:

答案 0 :(得分:4)

首先,你肯定需要yield来"火"多个请求:

def start_requests(self):
    with open('C:\spiders\usps\zips.csv') as fp:
        for line in fp:
            yield FormRequest("https://domain.com/url",
                              formdata={'address':line, 'submit':'Search'},
                              callback=self.after_submit,
                              dont_filter=True)

此外,您不应将FormRequest括在列表中,只需提出请求即可。