python - 使用 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
解决方案
您可以改用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
视频演示:
推荐阅读
- r - 在两个变量列表上循环迭代,以实现 R 中的多元回归
- batch-file - 如何在文件名中制作批处理文件句柄空格
- python-3.x - 如何向 Matplotlib 图添加额外的信息点?
- c - AVR UART 读取单个字节两次
- android - 嵌套 RecyclerView + ItemDecorator + DiffUtil 的问题
- python - 用 Python 对 PowerPoint 图表数据进行排序?
- reactjs - 如何在 React.js 中增加文件池放置区域的尺寸?
- php - 如果菜单有子菜单,如何将项目添加到 wp_nav_menu
- node.js - NodeJS:获取 RangeError:超出最大调用堆栈大小
- java - 如何从属性文件加载 ClientCredentialsResourceDetails 所需的参数