Как обрабатывать аутентификацию вместе с капчей при сканировании данных с использованием Scrapy - PullRequest
0 голосов
/ 16 марта 2020

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

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

enter image description here

Я просмотрел все аналогичные вопросы в сообществе и попытались go с решением копирования файлов cookie, переносящих мой аутентифицированный сеанс, из моего браузера (после того, как я вошел в систему вручную), чтобы я мог использовать их с Scrapy, но он все еще не работает.

Вот мой код:

import ...

class CrawlerSpider(scrapy.Spider):

name = "test"
allowed_domains = ["chatwork.com"]
start_urls = [
    "https://www.chatwork.com/#!rid178468980"
    #this is the link contains the data i want but only available after valid authentication
]

def start_requests(self):
    my_cookies = {
        'IDE': 'AHWqTUndZmIFDWBVb1ykpytLr0WAZOuBRQ8q363qEvII08rf3386rKljf4OVYIFp',
        #...some other lines copied from browser after manually logged in
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 
         Gecko) Chrome/80.0.3987.132 Safari/537.36'
    }

    for i, url in enumerate(self.start_urls):
        yield scrapy.Request(url, cookies=my_cookies, headers=headers, callback=self.parse)

def parse(self, response):
    #... get data by scrapy Selector
    yield

Также я попробовал другое решение в соответствии с этой статьей здесь , в котором я использую помощь Scraper API, как я думал, что мог как-то «обрабатывает» reCAPTCHA, но все равно не работает.

Вот мой код для Scraper API:

import ...

class LoginSpider(scrapy.Spider):

  name = 'crawler_handle_captcha'
  url_link = "https://www.chatwork.com/login.php?args="
  API_KEY = '...'
  start_urls = ['http://api.scraperapi.com/?api_key=' + API_KEY + '&url=' + url_link + 
         '&render=true']

  def parse(self, response):

    return [FormRequest.from_response(
        response,
        formxpath='//form[@name="login"]',
        formdata={'email': 'sample@gmail.com', 'password': 'sample'},
        callback=self.after_login
    )]

  def after_login(self, response):
    return scrapy.Request(url="https://www.chatwork.com/#!rid178468980", 
           callback=self.parse_page)

  def parse_page(self, response):
        #... get data by scrapy Selector
        yield

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 16 марта 2020

Не существует «простого» способа справиться с репачтой в скрапе.

Но вы можете использовать сервисы для определения капчи, такие как 2captcha, чтобы решить ее с помощью их API. Это платный сервис, но довольно дешевый.

Когда речтча будет решена сервисом, вы получите код ответа, для входа в систему вам нужно будет создать запрос на вход (обычно это запрос POST с логином и паролем). ) и добавьте в запрос решенную капчу повар ie.

...