scrapy трассировка 302 и 404

#python #request #scrapy #response

#python #запрос #scrapy #ответ

Вопрос:

существует проблема, когда я использую Scrapy для имитации входа пользователя на веб-сайт douban. исходная информация, подобная этой:

 name = "douban_movie"
allowed_domains = ["douban.com"]
start_urls = (
     'https://movie.douban.com/top250',
 )
douban_url = "https://movie.douban.com/top250"
login_url = "https://accounts.douban.com/login?source=movie"
login_url2 = "https://accounts.douban.com/register"
 

и после загрузки изображения CAPTCHA я ввожу его:

 def start_requests(self):
    yield scrapy.Request(
        url=self.login_url,
        headers=self.headers_dict,
        meta={
            "proxy": proxy,
            "cookiejar": 1
        },
        callback=self.request_captcha
    )

def request_captcha(self, response):
    print("request_captcha")
    sel = Selector(response)
    self.captcha_url = sel.xpath('//img[@id="captcha_image"]/@src').extract()

    if self.captcha_url!=[]:
        print self.captcha_url

        yield scrapy.Request(
                             url = self.captcha_url[0],
                             headers= self.headers_dict,
                             meta = {
                                 "proxy": proxy,
                                 "cookiejar": response.meta["cookiejar"],
                                 "dont_redirect": True,
                                 "handle_httpstatus_list": [302]
                             },
                             callback=self.download_captcha
        )


    yield scrapy.FormRequest(
                             url = self.login_url,
                             headers= self.headers_dict,
                             formdata={
                                 "form_email": email,
                                 "form_password": password,
                             },
                             meta = {
                                 "proxy": proxy,
                                 "cookiejar": response.meta["cookiejar"],
                                 "dont_redirect": True,
                                 "handle_httpstatus_list": [302]
                             },
                             callback=self.request_douban
                            )

def download_captcha(self, response):
    print("download_captcha")
    url = self.captcha_url[0]
    data = urllib.urlopen(url).read() 
    f = file("captcha.jpeg","wb")
    f.write(data)
    f.close() 
    os.popen('captcha.jpeg')
    print "please input:n"
    captcha = raw_input()
    id1=self.captcha_url[0].split('?')[1]
    print id1
    yield scrapy.FormRequest(
                             url= self.login_url,
                             headers= self.headers_dict,
                             formdata={
                                 "form_email": email,
                                 "form_password": password,
                                 "captcha-solution": captcha,
                                 "captcha-id":id1.split('=')[1]
                             },
                             meta = {
                                 "proxy": proxy,
                                 "cookiejar": response.meta["cookiejar"],
                             },
                             callback=self.request_douban
                            )
def request_douban(self, response):
    print("request_douban")
    yield scrapy.Request(url = self.douban_url,
                        headers = self.headers_dict,
                        meta = {
                                "proxy": proxy,
                                "cookiejar": response.meta["cookiejar"],
                                "from": {"sign": "else", "data": {}},
                            },
                        callback = self.end_login,
                        dont_filter = True)




def end_login(self, response):
    print("end_login")
    print (response.body)
    with open("base.html", "wb") as fp:
        fp.write(response.body)
 

и все в порядке после загрузки изображения, и id1 можно распечатать, но трассировка 404 при запросе url= self.login_url, мой адрес электронной почты и пароль верны, есть ли какие-либо проблемы в meta? или URL-адрес запроса (https://accounts .douban.com/login?source=movie ), которые отправляют форму на https://accounts .douban.com/login .