Scrapy FormRequest返回400错误代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy FormRequest返回400错误代码相关的知识,希望对你有一定的参考价值。

我正试图在以下网站上进行scrapy,其中分页是通过AJAX请求。 http://studiegids.uva.nl/xmlpages/page/2014-2015/zoek-vak

我发送FormRequest来访问不同的页面,但是我收到了以下错误。重试http://studiegids.uva.nl/xmlpages/plspub/uva_search.courses_pls>(失败1次):400错误请求

无法理解什么是错的?以下是代码。

class Spider(BaseSpider):
name = "zoek"
allowed_domains = ["studiegids.uva.nl"]
start_urls = ["http://studiegids.uva.nl/xmlpages/page/2014-2015/zoek-vak"]

def parse(self, response):
    base_url = "http://studiegids.uva.nl/xmlpages/page/2014-2015/zoek-vak"
    for i in range(1, 10):
        data = {'p_fetch_size': unicode(20),
                'p_page:': unicode(i),
                'p_searchpagetype': u'courses',
                'p_site_lang': u'nl',
                'p_strip': u'/2014-2015',
                'p_ctxparam': u'/xmlpages/page/2014-2015/',
                'p_rsrcpath':u'/xmlpages/resources/TXP/studiegidswebsite/'}

        yield FormRequest.from_response(response,
                                        formdata=data,
                                        callback=self.fetch_details,
                                        dont_click=True)

        # yield FormRequest(base_url,
        #                   formdata=data,
        #                   callback=self.fetch_details)

def fetch_details(self, response):
    # print response.body
    hxs = htmlXPathSelector(response)
    item = ZoekItem()
    Studiegidsnummer = hxs.select("//div[@class=item-info']//tr[1]/td[2]/p/text()")
    Studielast = hxs.select("//div[@class=item-info']//tr[2]/td[2]/p/text()")
    Voertaal = hxs.select("//div[@class=item-info']//tr[3]/td[2]/p/text()")
    Ingangseis = hxs.select("//div[@class=item-info']//tr[4]/td[2]/p/text()")
    Studiejaar = hxs.select("//div[@class=item-info']//tr[5]/td[2]/p/text()")
    Onderwijsinstituut = hxs.select("//div[@class=item-info']//tr[6]/td[2]/p/text()")


    for i in range(20):
        item['Studiegidsnummer'] = Studiegidsnummer
        item['Studielast'] = Studielast
        item['Voertaal'] = Voertaal
        yield item
答案

尝试使用firebug检查标头。

另一答案

400 Bad Request通常表示您的请求与预期的请求格式不完全匹配。常见原因包括缺少或无效的cookie,标题或参数。

在Web浏览器上,打开“开发人员工具”的“网络”选项卡,然后触发请求。当您在“网络”选项卡中看到请求时,请完全检查它(参数,标题等)。尝试在代码中匹配此类请求。

以上是关于Scrapy FormRequest返回400错误代码的主要内容,如果未能解决你的问题,请参考以下文章

Scrapy:FormRequest 不会自动填充 ASP.net 隐藏字段

Scrapy FormRequest 发送 JSON

Scrapy的FormRequest没有给出结果

登录时FormRequest Scrapy出现问题

在 scrapy shell 中呈现 JS 内容的 FormRequest

scrapy基础知识之 使用FormRequest.from_response()方法模拟用户登录: