Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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,我使用两种方法登录网站。基于Scrapy的方法失败,而使用urlib2的方法成功。我只是对第一种方法失败的原因感到困惑,正如我在教程中所做的那样 基于刮片的方法。返回页面只是登录页面。我在setting.py中设置了cooike enable class AccountSpider(InitSpider): name = "counting" allowed_domains = ["domain.com"] login_page = 'https://www.domain

我使用两种方法登录网站。基于Scrapy的方法失败,而使用urlib2的方法成功。我只是对第一种方法失败的原因感到困惑,正如我在教程中所做的那样

基于刮片的方法。返回页面只是登录页面。我在setting.py中设置了cooike enable

class AccountSpider(InitSpider):
    name = "counting"
    allowed_domains = ["domain.com"]
    login_page = 'https://www.domain.com/login.aspx?code=1'
    start_urls = ["https://www.domain.com/Search/Search.aspx"]
    rules = ()

    def start_requests(self):
        return self.init_request()

    def init_request(self):
        print 'login init'
        return [Request(url=self.login_page, callback=self.login)]

    def login(self, response):
        print 'login ing'
        return FormRequest.from_response(response,
            formdata={'__VIEWSTATE':'/+a_fix_string',
                '__EVENTVALIDATION':'/+a_fix_string',
                    'username':'username',
                    'password':'password',
                    'EnableAutoLogin':'on',
                    'LoginButton.x':'24',
                    'LoginButton.y':'9'},
                callback=self.check_login_response)

    def check_login_response(self,response):
        # check if login successfully
        if 'Welcome' in response.body:
            print 'login in successfully'
        else:
            print 'login in failed'

    def parse_item(self, response):
        pass
方法基于urllib2。成功登录

def login():
    cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
    opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
    urllib2.install_opener(opener)

    postdata=urllib.urlencode({
        '__VIEWSTATE':'/+a_fix_string',
        '__EVENTVALIDATION':'/+a_fix_string',
        'username':'username',
        'password':'password',
        'EnableAutoLogin':'on',
        'LoginButton.x':'24',
        'LoginButton.y':'9'
    })

    agent = {
         'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like                  Gecko) Chrome/26.0.1410.43 Safari/537.31'
        }
    req = urllib2.Request(
        url='https://www.domian.com/login.aspx?code=1',
        data = postdata,
        headers = agent
    )

    result = urllib2.urlopen(req)
    return result


    if __name__ == '__main__':
        login()
根据,FormRequest对象应该放在列表理解中。文档中的示例:

return [FormRequest(url="http://www.example.com/post/action",
                formdata={'name': 'John Doe', 'age': '27'},
                callback=self.after_post)]

您是否已检查了FormRequest.from_response(…).url?页面中有不同的表单吗?您是否也尝试过通过
headers={“User Agent”:..}
设置用户代理?我在settings.py中设置了“User\u Agent”。返回FormRequest.from_response(…).url与登录页面url不同。您应该选中
formname
以选择正确的表单,和/或使用
.replace(url=self.login_页面)
强制发送所需的url。还要检查FormRequest.from_response(response,…)的response.url是否正确。return FormRequest.from_response(response,…)的url不同。我添加了“Don_click=True”,但它不起作用。我不明白“formname”参数的含义。