登录时FormRequest Scrapy出现问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了登录时FormRequest Scrapy出现问题相关的知识,希望对你有一定的参考价值。
我正在尝试从AliceWeb2检索信息。为此,我需要登录,但我不能。我把我的用户,通过并在Google Chrome中的检查工具中搜索了一个包含请求方法:POST的页面,如下所示:
.
所以,使用以下代码:
from scrapy.item import Item, Field
from scrapy.http import FormRequest
from scrapy.spider import Spider
from scrapy.utils.response import open_in_browser
from scrapy import Request
class AliceWeb2(Spider):
name = "login"
# Start on the welcome page
def start_requests(self):
return [Request(
"http://aliceweb.mdic.gov.br//usuario/login/",
callback=self.parse_welcome)]
# Post welcome page's first form with the given user/pass
def parse_welcome(self, response):
formdata = {'logUser': 'rtadewald',
'logPass': '123'}
return FormRequest.from_response(
response,
formdata=formdata)
我懂了:
答案
首先,使用yield
而不是return
每当你试图模仿一个请求时,只需打开开发工具,然后复制该URL的cURL,然后转到这个https://curl.trillworks.com/网站,获取你的Python代码,然后将该代码重新用于Scrapy。
class AliceWeb2(Spider):
name = "login"
# Start on the welcome page
def start_requests(self):
headers = {
'Origin': 'http://aliceweb.mdic.gov.br',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Cache-Control': 'max-age=0',
'Referer': 'http://aliceweb.mdic.gov.br/usuario/recuperar-senha',
'Connection': 'keep-alive',
'DNT': '1',
}
yield Request('http://aliceweb.mdic.gov.br//usuario/login?tx_usuario=ABC&tx_senha=ABC', callback=self.parse_welcome, headers=headers, data=data, method="POST")
def parse_welcome(self, response):
#do something here
编辑1:当我在Dev Tools中观察到请求时,我看到这些参数正在发送,请参见屏幕截图中的FORM DATA
。
(另一个提示):检查preserver log
,以便您可以看到在上一页中发送的请求,以防网站在登录后将您重定向到其他页面。
以上是关于登录时FormRequest Scrapy出现问题的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫之Scrapy框架系列(17)——实战某代码托管平台登录FormRequest类