Очистка веб-сайта, который требует аутентификации с использованием скрапа - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь удалить этот сайт: https://www.albertacannabis.org/

Чтобы получить доступ к его продуктам, я должен аутентифицировать сеанс. Дело в том, что я не уверен в том, как аутентификация работает со Scrapy, поэтому я не знаю, каков наилучший подход для этого сайта.

URL-адрес для входа: https://www.albertacannabis.org/login

Я пробовал следующие коды:

import scrapy
from scrapy.http import FormRequest

class AlbertaspiderSpider(scrapy.Spider):
    name = 'albertaspider'
    with open("./alberta_parsed_input.txt", "r") as f:
        start_urls = f.readlines()

    def parse(self, response):
        token = response.xpath('//*[@id="_CRSFform"]/input/@value').extract_first()
        return FormRequest.from_response(response,
                                        formdata={'__RequestVerificationToken': token,
                                                   'Password': 'foobar',
                                                   'UserName': 'foobar'},
                                        callback=self.scrape_pages)

        product_code = response.xpath('//*[@id="product-title-0"]/a/@href').extract_first()
        print(product_code)

И:

import scrapy
from scrapy.http import FormRequest
from scrapy.spiders.init import InitSpider

class AlbertaspiderSpider(scrapy.Spider):
    name = 'albertaspider'
    login_url = "https://www.albertacannabis.org/login"
    with open("./alberta_parsed_input.txt", "r") as f:
        start_urls = f.readlines()
    def init_request(self):
        return scrapy.Request(
            url=self.login_url,
            callback=self.login,
        )
    def login(self, response):
        yield scrapy.FormRequest.from_response(
            response=response,
            formid='__RequestVerificationToken',
            formdata={
                'UserName': 'foo@gmail.com',
                'Password': 'bar',
            },
            callback=self.initialized,
        )
    def parse(self, response):
        product_code = response.xpath('//*[@id="product-title-0"]/a/@href').extract_first()
        print(product_code)

Оба безрезультатно. Я прочитал пару руководств в Интернете, но я не уверен, что делаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...