Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy:登录网页_Python_Scrapy - Fatal编程技术网

Python Scrapy:登录网页

Python Scrapy:登录网页,python,scrapy,Python,Scrapy,我正在尝试登录一个网页(我们称之为example.com/a1J5AEAQ)。首先,我将获得example.com的常规页面,当我手动输入用户名和密码时,我将被重定向到正确的页面。然而,当我尝试使用scrapy登录时,我会被重定向到'somethingelse.com' 这是表单html的第一部分:(之后只给出用户名和密码字段) 我的代码打印“做得好”,因为我不再在登录页面上,而是在somethingelse.com上(打印response.body时可以看到)。那不是我想去的地方 如果有人能帮

我正在尝试登录一个网页(我们称之为example.com/a1J5AEAQ)。首先,我将获得example.com的常规页面,当我手动输入用户名和密码时,我将被重定向到正确的页面。然而,当我尝试使用scrapy登录时,我会被重定向到'somethingelse.com'

这是表单html的第一部分:(之后只给出用户名和密码字段)

我的代码打印“做得好”,因为我不再在登录页面上,而是在somethingelse.com上(打印response.body时可以看到)。那不是我想去的地方


如果有人能帮忙,那就太好了

您会注意到,在浏览器中提交此表单将调用一些JavaScript代码(
return handleLogin();
),Scrapy既不解释也不理解这些代码。我建议您检查常规浏览器作为HTTP头和表单数据发送的内容,并尝试使用Scrapy复制这些内容。@paultrmbrth我对JavaScript不太了解。我也不知道如何检查常规浏览器发送的HTTP头和表单数据。关于从哪里开始探索这个问题,有什么建议吗?人们通常会查看现代浏览器的“开发工具”面板中的“网络”选项卡。例如您应该能够看到登录帖子发送到哪个URL,以及发送的HTTP头。这些是您应该尝试用Scrapy
FormRequest
复制的内容。
    <form action="https://somethingelse.com/" id="login_form" method="post" name="login" onsubmit="return handleLogin();" target="_top">
                                <input name="un" type="hidden">
                                <input name="width" type="hidden">
                                <input name="height" type="hidden">
                                <input name="hasRememberUn" type="hidden" value="true">
                                <input name="local" type="hidden">
                                <input name="startURL" type="hidden" value="/a1J5AEAQ">
                                <input name="loginURL" type="hidden" value="http://www.example.com">
                                <input name="loginType" type="hidden">
                                <input name="useSecure" type="hidden" value="true">
                                <input name="lt" type="hidden" value="standard">
                                <input name="qs" type="hidden">
                                <input name="locale" type="hidden" value="uk">
                                <input name="oauth_token" type="hidden">
                                <input name="oauth_callback" type="hidden"><span id="j_id0:j_id1:j_id57:j_id60"> 
from scrapy.item import Item, Field
import scrapy

class LoginSpider(scrapy.Spider):
    name = "webpages"
    start_urls = ["https://www.example.com/a1J5AEAQ"]
    def parse(self, response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'username': 'xxxxxx@xxxxxxxx.nl', 'pw': 'xxxxxxxxx'},
            formnumber=1,
            callback=self.after_login
        )

     def after_login(self, response):
        # print response.body
        # print response.status
        items = []
        # check login succeed before going on
        if 'Fout:' in response.body:
            print "\n\n Login failed \n\n"
            self.logger.error("Login failed")
        elif 'Please provide your username and password:' in response.body:
            print "\n\nstill on login page\n\n"
        else:
            print "\n\nWELL DONE\n\n"
            print response.body
            # scrape someting
        return items