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

标签 python forms web-scraping scrapy

我这里有工作代码。我正在向表单发送 1 个请求,并且正在取回我需要的所有数据。代码:

 def start_requests(self):
    nubmers="12345"
    submitForm = FormRequest("https://example.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://example.com/url",
                                formdata={'address':line,
    'submit':'Search'},callback=self.after_submit,dont_filter=True)
    return [submitForm]

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

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

最佳答案

首先,您肯定需要 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 包含在列表中,而只需生成请求即可。

关于python - scrapy,如何向表单发送多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049375/

相关文章:

python - Python 中的固定宽度整数类型(例如 uint32)

python - 预分配一个无列表

django - 在一个页面上使用多个不同的表单(Django 1.7 中的 Crispyforms)

web-scraping - 网页抓取软件是 "wrapper"吗?

python - Django 表单验证 : making "required" conditional?

jquery - jqgrid不传递记录id进行编辑删除

javascript - 如何在php中使用AJAX实现reCAPTCHA发送邮件?

python - 为什么在使用 beautifulsoup 登录并请求后我无法抓取下一页?

javascript - 无法从 GET 请求获取 HTML

python:友好数字检查