#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 .