首页 > 解决方案 > 使用 Scrapy 在 StockX 上的登录身份验证问题

问题描述

有人可以帮助我使用 scrapy 登录 StockX.com 吗?我正在尝试构建一个网络抓取工具来从 stockx 中抓取价格信息,但我不熟悉 Stockx 登录所需的身份验证类型。我已经看过关于使用 csrf 令牌的教程,但是当我登录时没有看到表单数据中提交的任何令牌,所以我不知道如何在 StockX 上使用 scrapy 验证登录。任何帮助将非常感激。

当前代码:

class StockXSpider(scrapy.Spider):
    name = 'sx'
    # page_number = 2
    start_urls = [
        'https://www.stockx.com/login? 
 iss=https%3A%2F%2Faccounts.stockx.com%2F'
    ]

def parse(self, response):
    return scrapy.FormRequest.from_response(response,
                                            formdata={"username": "Gabiospi321@gmail.com", "password": "LitMari757"},
                                            callback=self.scrape)

def scrape(self, response):
     items = SxscrapyItem()

    all_div_blanks = response.css('div.product-header-media')

    for blanks in all_div_blanks:
        product_name = response.css('div.col-md-12').xpath('//h1/text()').extract()
        lowest_ask = response.css('div.en-us.stat-value.stat-small::text')[0].extract()
        highest_bid = response.css('div.en-us.stat-value.stat-small::text')[1].extract()

        items['product_name'] = product_name
        items['lowest_ask'] = lowest_ask
        items['highest_bid'] = highest_bid

        yield items

标签: pythonscrapy

解决方案


您可以改用selenium并执行以下操作来登录stockx

代码:

使用selenium,您将通过查找电子邮件输入和密码输入然后发送keys您的登录详细信息来登录。我不确定stockx是否有 api,但如果他们有,使用它可能会更容易,而不是手动登录和抓取。

from selenium import webdriver
import time

driver = webdriver.Firefox() # you could use chrome instead

driver.get("http://accounts.stockx.com/login")
time.sleep(4)  # small delay before inputting login for page to load

driver.find_element_by_id("email-login").send_keys(
    "myemail@email.com"
)  # inputs your email

driver.find_element_by_id("password-login").send_keys(
    "mypassword"
)  # inputs your password

driver.find_element_by_id("btn-login").click() # clicks the login button

视频演示:

视频


推荐阅读