首页 > 解决方案 > SCAPY:无法使用 FormRequest.from_response() __scrape__ 页面

问题描述

import scrapy

class TestSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://www.icsi.in/student/Members/MemberSearch.aspx']

    def parse(self, response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'dnn_ctr410_MemberSearch_txtMembershipNumber': '61915'},
            callback=self.after_login
        )
    
    def after_login(self, response):
        print(response)
        return response

由于表单有多个字段正在填充与会话相关的数据,因此我使用 from_response 并使用输入的 id 仅针对会员编号添加值。

但是这不起作用,我收到一条错误消息Spider must return request, item, or None, got 'HtmlResponse'

标签: pythonweb-scrapingscrapy

解决方案


after_login您必须从方法返回正确的类型。异常消息中提到的类型列表。所以你的 after_login 方法应该是这样的:

def after_login(self, response):
    print(response)
    # response.css('') find something using CSS selector
    # response.xpath('') or using xpath
    yield {'some_field_name': 'field value'}

在您的示例中,您返回response了具有HtmlResponse类型,但scrapy期望其他类型,例如request, item, or None


推荐阅读