我正在尝试使用Scrapy从website抓取一堆文本消息,而我目前处于身份验证阶段,无法执行任何抓取操作
更具体地说,我无法通过目标网站的登录屏幕,其中有一个如下图所示的reCAPTCHA复选框。问题是,它不断重定向回原始登录链接,同时出现robot复选框的验证错误
我已经搜索了社区中所有类似的问题,并尝试采用从浏览器(在我手动登录后)复制带有经过身份验证的会话的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
任何帮助都将不胜感激
在scrapy中没有“简单”的方法来处理recaptcha
但您可以使用诸如2captcha之类的验证码解决服务,使用它们的API来解决它。 这是有偿服务,但相当便宜
当recaptcha将由服务解决时,您将获得答案代码,为了登录,您必须创建登录请求(通常是带有登录名和密码的POST请求),并将已解决的验证码cookie添加到请求中
相关问题 更多 >
编程相关推荐