当使用Scrapy抓取数据时,如何处理身份验证和验证码

2024-03-29 08:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Scrapywebsite抓取一堆文本消息,而我目前处于身份验证阶段,无法执行任何抓取操作

更具体地说,我无法通过目标网站的登录屏幕,其中有一个如下图所示的reCAPTCHA复选框。问题是,它不断重定向回原始登录链接,同时出现robot复选框的验证错误

enter image description here

我已经搜索了社区中所有类似的问题,并尝试采用从浏览器(在我手动登录后)复制带有经过身份验证的会话的cookies的解决方案,以便我可以将它们与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

此外,根据本文,我还尝试了另一种解决方案,其中我使用了scraperapi的帮助,因为我认为它可以以某种方式“处理”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

任何帮助都将不胜感激


Tags: namehttpsselfcomurlparseresponsedef
1条回答
网友
1楼 · 发布于 2024-03-29 08:22:56

在scrapy中没有“简单”的方法来处理recaptcha

但您可以使用诸如2captcha之类的验证码解决服务,使用它们的API来解决它。 这是有偿服务,但相当便宜

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

相关问题 更多 >