[使用Scrapy抓取数据时如何与验证码一起处理身份验证

问题描述 投票:0回答:1

我正在尝试使用websiteScrapy抓取一堆文本消息,目前在进行任何抓取之前,我一直处于身份验证阶段。

[更具体地说,我无法通过目标网站的登录屏幕进入该页面,该网站中的reCAPTCHA复选框如下图所示。问题在于,它会一直重定向到原始登录链接,以及机械手复选框的验证错误。

enter image description here

我已经搜索了社区中所有类似的问题,并尝试使用从浏览器中复制带有经过身份验证的会话的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

[我还根据本文here尝试了另一种解决方案,其中我使用了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': '[email protected]', '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

任何帮助将不胜感激!

python authentication scrapy web-crawler recaptcha
1个回答
0
投票

没有一种“简便”的方式来处理草率的Recaptcha。

但是您可以使用2captcha之类的验证码解决服务来通过其API解决该问题。它是有偿服务,但很便宜。

[recaptcha将由服务解决时,您将获得答案代码,要登录,您必须创建登录请求(通常是带有登录名和密码的POST请求),然后将已解决的验证码cookie添加到请求中。

© www.soinside.com 2019 - 2024. All rights reserved.