电子邮件作为字符串

时间:2019-06-20 20:16:37

标签: python scrapy

我需要使用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>

1 个答案:

答案 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响应:

  

您的电子邮件地址和/或密码与该帐户记录的电子邮件地址和/或密码不匹配。请重试。

但是我敢肯定,如果您输入正确的凭据,一切都会好起来的。