Я пытаюсь сканировать кучу текстовых сообщений с веб-сайта , используя Scrapy , и в настоящее время я застрял в фазе аутентификации, прежде чем смог выполнить какое-либо сканирование.
В частности, я не могу пройти через экран входа на целевой веб-сайт, на котором есть флажок reCAPTCHA, как на картинке ниже. Проблема в том, что он продолжает перенаправлять обратно на исходную ссылку входа в систему вместе с ошибкой проверки флажка робота.
Я просмотрел все аналогичные вопросы в сообществе и попытались 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
Любая помощь будет принята с благодарностью!