Не могу войти используя Scrapy
<div class="col small-w100 tiny-w100 col1">
<div class="box_already_member">
<h2 class="fs22 fwn foro black">Already member ?</h2>
<p>Please enter your account details : </p>
<div class="box_form">
<label>Your email* </label>
<br>
<input id="txtUsernamelogin" type="text" data-parsley-group="glogin"
data-parsley-required="true" data-parsley-errors-container="#lblMessage"
data-parsley-type-message="Please check that your Professional Email is
in correct format" data-parsley-required-message="Please type your
Professional Email" data-parsley-type="email"><br>
<label>Password* </label>
<br>
<input id="txtPasswordlogin" type="password" data-parsley-group="glogin"
data-parsley-required="true" data-parsley-errors-container="#lblMessage"
data-parsley-required-message="Please type your password"><br>
<div class="row pt20 pb20">
<div class="col "><a class="c19" href="/forgot-password"
rel="nofollow">Forgot password ?</a></div>
<div class="col txtright">
<div class="inbl">
<a href="#" id="loginbtnclick" class=" row wauto fs14
c0 bgc18 rounded5 txtcenter h36p vam tdn mb20">
<span class="col vam fs16 pr40 pl40">
<strong>LOGIN</strong></span>
</a>
</div>
</div>
</div>
</div>
<span>*mandatory fields</span><br>
<span id="lblMessage" class="red"></span>
</div>
попытался использовать scrapy.FormRequest.from_response(), но, похоже, не работает.
Мне нужно войти, чтобы получить полный доступ к деталям продукта. Страница входа: https://cosmetics.specialchem.com/login
1 ответ
Это пример того, как войти на целевой сайт. Для этого вам нужно открыть браузер и изучить все данные, отправляемые на сервер. Когда вы понимаете, как это работает, вы можете написать свой собственный код.
import scrapy
from scrapy.exceptions import CloseSpider
from scrapy.spiders import CrawlSpider
class SpecialchemSpider(CrawlSpider):
name = 'specialchem'
allowed_domains = ['<DOMAIN>']
start_urls = ['https://cosmetics.<DOMAIN>/login']
custom_settings = {'ROBOTSTXT_OBEY': False}
def parse(self, response):
inputs = response.css('form input')
formdata = {'Iid': '',
'Password': 'SECRET',
'User': 'EMAIL',
'Popin': '1'}
return scrapy.FormRequest(
'https://cosmetics.<DOMAIN>/services/LoginService.ashx',
formdata=formdata,
callback=self.after_login
)
def after_login(self, response):
if 'OK' not in response.text:
raise CloseSpider('Wrong login or password. Or you was blocked.')
url = 'https://cosmetics.<DOMAIN>/product/i-eastman-chemical-company-eastman-aq-38s-polymer'
return scrapy.Request(url, callback=self.product)
def product(self, response):
pass
Это будет работать, когда вы замените DOMAIN, SECRET и EMAIL, чтобы исправить один.