如何解决使用Scrapy-Splash尝试登录
由于我无法登录https://www.duif.nl/login,因此我尝试了许多类似硒的方法,虽然我成功登录了该方法,但没有设法开始爬网。
现在我用刮擦飞溅试试运气,但我无法登录:(
当我登录手册时,我被重定向到“ / login?returnUrl =”,在这里我只有这些form_data:
我的代码
# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest
from scrapy.spiders import CrawlSpider,Rule
from ..items import ScrapysplashItem
from scrapy.http import FormRequest,Request
import csv
class DuifSplash(CrawlSpider):
name = "duifsplash"
allowed_domains = ['duif.nl']
login_page = 'https://www.duif.nl/login'
with open('duifonlylinks.csv','r') as f:
reader = csv.DictReader(f)
start_urls = [items['Link'] for items in reader]
def start_requests(self):
yield SplashRequest(
url=self.login_page,callback=self.parse,dont_filter=True
)
def parse(self,response):
return FormRequest.from_response(
response,formdata={
'username' : 'not real','password' : 'login data',},callback=self.after_login)
def after_login(self,response):
accview = response.xpath('//div[@class="c-accountBox clearfix js-match-height"]/h3')
if accview:
print('success')
else:
print(':(')
for url in self.start_urls:
yield response.follow(url=url,callback=self.parse_page)
def parse_page(self,response):
productpage = response.xpath('//div[@class="product-details col-md-12"]')
if not productpage:
print('No productlink',response.url)
for a in productpage:
items = ScrapysplashItem()
items['SKU'] = response.xpath('//p[@class="desc"]/text()').get()
items['Title'] = response.xpath('//h1[@class="product-title"]/text()').get()
items['Link'] = response.url
items['Images'] = response.xpath('//div[@class="inner"]/img/@src').getall()
items['Stock'] = response.xpath('//div[@class="desc"]/ul/li/em/text()').getall()
items['Desc'] = response.xpath('//div[@class="item"]/p/text()').getall()
items['Title_small'] = response.xpath('//div[@class="left"]/p/text()').get()
items['Price'] = response.xpath('//div[@class="price"]/span/text()').get()
yield items
在“准备工作”中,我抓取了每个内部链接并将其保存到.csv文件中,在该文件中我分析了哪些链接是产品链接,哪些不是产品链接。 现在我想知道,如果我打开csv的链接,它是否打开了经过身份验证的会话? 我找不到饼干,这对我来说也很奇怪
更新
我设法成功登录:-)现在,我只需要知道cookie的存储位置
Lua脚本
LUA_SCRIPT = """
function main(splash,args)
splash:init_cookies(splash.args.cookies),splash:go("https://www.duif.nl/login"),splash:wait(0.5),local title = splash.evaljs("document.title"),return {
title=title,cookies = splash:get_cookies(),end
"""
解决方法
- 我不认为在这里使用Splash是可行的方法,因为即使有普通的Request表单,也是如此:
response.xpath('//form[@id="login-form"]')
- 该页面上有多种表单,因此您必须指定创建FormRequest.from_response所基于的表单。最好同时指定点击数据(因此转到“登录”,而不是“忘记密码”)。总之,它看起来像这样:
req = FormRequest.from_response(
response,formid='login-form',formdata={
'username' : 'not real','password' : 'login data'},clickdata={'type': 'submit'}
)
- 如果您不使用Splash,则不必担心传递cookie-Scrapy会解决此问题。只需确保您未在settings.py 中输入COOKIES_ENABLED = False即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。