Одним із найефективніших методів захисту від «запозичення» контенту є відображення інформації лише зареєстрованим користувачам. Тим не менш, розробникам парсерів вдалося обійти і це обмеження, представивши низку скриптів, що імітують поведінку реального користувача на сайті. Одним з них і є Scrapy – частка коду, здатна «обдурити» збудований щит і отримувати необхідну інформацію без додаткових «рухів». Проте цей спосіб вважається не зовсім етичним, т.к. Парс «закриті» сайти – ознака поганого тону. Сьогодні ми обговоримо – як дивитися закритий контент на сайтах.

Вхід на сайт
Щоб увійти на сайт, вам доведеться ввести власний ідентифікатор користувача (частіше адресу електронної пошти) та встановлений пароль. І якщо раніше для обходу використовували POST-запити або заздалегідь збережені cookie, то Scrapy вирішує цю проблему без участі людини. Для цього розроблено FormRequest, що дозволяє відповісти на запитання “Як дивитись закритий контент на сайтах?” FormRequest імітує вхід користувача за обліковими даними, зазначеними у скрипті:
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formdata={‘username’: ‘randomuser’, ‘password’: ‘topsecret’},
callback=self.after_login
)
Якщо всі параметри правильні, парсер отримає доступ до інформації, що міститься на сайті. Щоб переконатися у відсутності помилки, запустіть звичайний пошук за фразами та спробуйте пошукати щось на кшталт «error» або «failed»:
def after_login(self, response):
if “Error while logging in” in response.body:
self.logger.error(“Login failed!”)
else:
self.logger.error(“Login succeeded!”)
item = SampleItem()
item[“quote”] = response.css(“.text”).extract()
item[“author”] = response.css(“.author”).extract()
return item
А щоб перейти на сторінку з потрібною інформацією, достатньо ввести запит:
scrapy.Request(url=”http://scrape.this.com”, callback=self.parse_something)
Що робити після входу?
Підвищити ефективність пошуку можна за допомогою пагінації на сайтах, де є кнопка «Наступна сторінка»:
next_page_url = response.css(“li.next > a::attr(href)”).extract_first()
if next_page_url is not None:
yield scrapy.Request(response.urljoin(next_page_url))
При цьому варто відзначити, що Scrapy зберігає cookies сайту автоматично, що дозволяє уникнути блокування при підозрілій активності, а також унеможливлює аутентифікацію користувача при переході на наступну сторінку.