我需要使用scrapy登录到网站,并且需要使用电子邮件作为用户名,但是当它使用用户名而不是在电子邮件中使用@
符号时,它会使用%40
。有办法防止这种情况吗?因为显然由于这个问题,我现在无法登录。
LoginSpider.py
import scrapy
from ..items import NameItem
class LoginSpider(scrapy.Spider):
name = "LoginSpider"
start_urls = ["https://www.starcitygames.com/login"]
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formdata={'ex_usr_email': 'example@123.com', 'ex_usr_pass': 'password'},
callback=self.after_login
)
def after_login(self, response):
item = NameItem()
item["Name"] = response.css("div.column_data::text").get()
return item
部分输出
2019-06-20 16:23:07 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6027
2019-06-20 16:23:07 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.starcitygames.com/login> (referer: None)
2019-06-20 16:23:19 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.starcitygames.com/results?name=&go=GO&ex_usr_email=example%40123.com&ex_usr_pass=password> (referer: https://www.starcitygames.com/login)
2019-06-20 16:23:19 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.starcitygames.com/results?name=&go=GO&ex_usr_email=example%40123.com&ex_usr_pass=password>
答案 0 :(得分:1)
在您的日志中,您似乎在页面上调用了错误的表单,而不是登录表单。
尝试使用以下代码在代码中进行指定:
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formcss='#existing_users form', # <- set this selector for form
formdata={'ex_usr_email': 'example@123.com', 'ex_usr_pass': 'password'},
callback=self.after_login
)
现在我得到了html响应:
您的电子邮件地址和/或密码与该帐户记录的电子邮件地址和/或密码不匹配。请重试。
但是我敢肯定,如果您输入正确的凭据,一切都会好起来的。