Ръководство за уеб скрапинг, без да бъдете блокирани през 2019 г.

Уеб скрапирането или обхождането е фактът на извличане на данни от уебсайт на трета страна чрез изтегляне и анализиране на HTML кода, за да извлечете данните, които искате.

Но трябва да използвате API за това!

Не всеки уебсайт предлага API и API не винаги разкриват всяка част от информацията, от която се нуждаете. Така че често това е единственото решение за извличане на данни от уебсайтове.

Има много случаи на използване на уеб скрапинг:

  • Мониторинг на цените в електронната търговия
  • Агрегиране на новини
  • Генериране на потенциални клиенти
  • SEO (мониторинг на страницата с резултати от търсачката)
  • Обединяване на банкови сметки (Монетен двор в САЩ, Bankin’ в Европа)

Но също така и много индивиди и изследователи, които трябва да изградят набор от данни, който иначе не е наличен.

И така, какъв е проблемът?

Основният проблем е, че повечето уебсайтове не искат да бъдат скрапирани. Те искат да предоставят съдържание само на реални потребители, използвайки истински уеб браузър (с изключение на Google, те всички искат да бъдат изчерпани от Google).

Така че, когато стържете, трябва да внимавате да не бъдете разпознати като робот, като основно правите две неща: използвате човешки инструменти и имате човешко поведение. Тази публикация ще ви преведе през всички неща, които можете да използвате, за да се прикриете, и през всички инструменти, които уебсайтовете използват, за да ви блокират.

Емулирайте човешки инструмент, например: Headless Chrome

Защо да използвате сърфиране без глава?

Когато отворите браузъра си и отидете на уеб страница, това почти винаги означава, че вие ​​питате HTTP сървър за някакво съдържание. И един от най-лесните начини за изтегляне на съдържание от HTTP сървър е да използвате класически инструмент от командния ред като cURL.

Работата е там, че ако просто направите: curl www.google.com, Google има много начини да разбере, че не сте човек, просто като погледнете заглавията за примери. Заглавките са малки части от информация, които вървят с всяка HTTP заявка, която удря сървърите, и една от тези части от информацията описва точно клиента, който прави заявката, говоря за заглавката „User-Agent“. И само като погледнете заглавката „User-Agent“, Google вече знае, че използвате cURL. Ако искате да научите повече за заглавките, страницата на Wikipedia е страхотна и за да направите някакъв експеримент, просто отидете тук, това е уеб страница, която просто показва информацията за заглавките на вашата заявка.

Заглавките са наистина лесни за промяна с cURL и копирането на заглавката на User-Agent на легитимен браузър може да свърши работа. В реалния свят ще трябва да зададете повече от един хедър, но по-общо не е много трудно изкуствено да създадете HTTP заявка с cURL или друга библиотека, която ще направи тази заявка да изглежда точно като заявка, направена с браузър. Всеки знае това и затова, за да знае дали използвате истински браузър, уебсайтът ще провери едно нещо, което cURL и библиотеката не могат да направят: JS изпълнение.

Говорите ли JS?

Концепцията е много проста, уебсайтът вгражда малък фрагмент от JS в своята уеб страница, който след като бъде изпълнен, ще „отключи“ уеб страницата. Ако използвате истински браузър, тогава няма да забележите разликата, но ако не сте, всичко, което ще получите, е HTML страница с някакъв неясен JS в нея.

(действителен пример за такъв фрагмент)

Но още веднъж, това решение не е напълно бронирано, главно защото след nodeJS вече е много лесно да се изпълнява JS извън браузър. Но отново мрежата се разви и има други трикове, за да определите дали използвате истински браузър или не.

Сърфиране без глава

Опитът да се изпълни фрагмент JS от страната на възела е наистина труден и изобщо не е стабилен. И което е по-важно, веднага щом уебсайтът има по-сложна система за проверка или е голямо приложение от една страница, cURL и псевдо-JS изпълнение с възел стават безполезни. Така че най-добрият начин да изглеждате като истински браузър е наистина да използвате такъв.

Headless браузърите ще се държат „точно“ като истински браузър, с изключение на това, че лесно ще можете да ги използвате програмно. Най-използваният е Chrome Headless, опция за Chrome, която има поведението на Chrome, без целият потребителски интерфейс да го обвива.

Най-лесният начин да използвате Headless Chrome е чрез извикване на драйвер, който обгръща цялата си функционалност в лесен API, „Selenium“ и „Puppeteer“ са двете най-известни решения.

Това обаче няма да е достатъчно, тъй като уебсайтовете вече разполагат с инструменти, които им позволяват да откриват браузър без глава. Тази надпревара във въоръжаването, която продължава от дълго време.

Пръстов отпечатък
Всеки, и най-вече предните програмисти, знае как всеки браузър се държи по различен начин. Понякога може да става въпрос за изобразяване на CSS, понякога JS, понякога само вътрешни свойства. Повечето от тези разлики са добре известни и вече е възможно да се установи дали даден браузър наистина е това, за което се представя. Което означава, че уебсайтът се пита „съвпадат ли всички свойства и поведение на браузъра с това, което знам за потребителския агент, изпратен от този браузър?“.

Ето защо има вечна надпревара във въоръжаването между скрейпъри, които искат да се представят за истински браузър, и уебсайтове, които искат да разграничат безглавия от останалите.

Въпреки това, в тази надпревара във въоръжаването уеб скреперите обикновено имат голямо предимство и ето защо.

През повечето време, когато Javascript код се опитва да открие дали се изпълнява в режим без глава, е злонамерен софтуер, който се опитва да избегне поведенческия пръстов отпечатък. Това означава, че JS ще се държи добре в среда за сканиране и зле в реални браузъри. Ето защо „екипът зад безглавия режим на Chrome“ се опитва да го направи неразличим от уеб браузъра на истинския потребител, за да спре злонамерения софтуер да прави това. Ето защо уеб скреперите в тази надпревара във въоръжаването могат да спечелят от тези усилия.

Друго нещо, което трябва да знаете е, че докато паралелното изпълнение на 20 cURL е тривиално, Chrome Headless, макар и относително лесен за използване за малки случаи на употреба, може да бъде трудно да се постави в мащаб. Главно защото използва много RAM, така че управлението на повече от 20 копия от него е предизвикателство.

(Този проблем с управлението на много екземпляри без глава на Chrome е едно от многото неща, които решаваме с ScrapingNinja API )

Ако искате да научите повече за пръстовите отпечатъци на браузъра, предлагам ви да разгледате Blog Antoine Vastel, блог, изцяло посветен на тази тема.

Това е всичко, което трябва да знаете, за да разберете как да се преструвате, че използвате истински браузър. Нека сега да разгледаме как се държиш като истински човек.

Емулирайте човешко поведение, т.е.: прокси, решаване на Captchas и модел на заявка

Прокси себе си

Човек, използващ истински браузър, рядко ще поиска 20 страници в секунда от един и същи уебсайт, така че ако искате да поискате много страници от същия уебсайт, трябва да подмамите този уебсайт да мисли, че всички тези заявки идват от различно място в света, т.е.: различни IP адреси. С други думи, трябва да използвате проксита.

Сега прокситата не са много скъпи: ~1$ на IP. Въпреки това, ако трябва да направите повече от ~10k заявки на ден на един и същ уебсайт, разходите могат да се повишат бързо, като са необходими стотици адреси. Едно нещо, което трябва да имате предвид е, че IP адресите на проксита трябва да бъдат постоянно наблюдавани, за да се изхвърли този, който вече не работи, и да се замени.

На пазара има няколко прокси решения, ето най-използваните: Luminati Network, Blazing SEO и SmartProxy.

Има и много безплатни прокси списъци и аз не препоръчвам да ги използвате, защото често са бавни, ненадеждни и уебсайтовете, предлагащи тези списъци, не винаги са прозрачни за това къде

проксита са разположени. Тези списъци с безплатни прокси през повечето време са публични и следователно техните IP адреси ще бъдат автоматично забранени от повечето уебсайтове. Качеството на проксито е много важно, известно е, че услугите против обхождане поддържат вътрешен списък с прокси IP адреси, така че всеки трафик, идващ от тези IP адреси, също ще бъде блокиран. Внимавайте да изберете прокси с добра репутация. Ето защо препоръчвам да използвате платена прокси мрежа или да създадете своя собствена

За да изградите своя, можете да разгледате scrapoxy, страхотен API с отворен код, който ви позволява да изградите прокси API върху различни облачни доставчици. Scrapoxy ще създаде прокси пул чрез създаване на екземпляри на различни облачни доставчици (AWS, OVH, Digital Ocean). След това ще можете да конфигурирате клиента си така, че да използва URL адреса на Scrapoxy като основен прокси, а Scrapoxy автоматично ще присвои прокси в пула на прокси сървърите. Scrapoxy може лесно да се персонализира, за да отговаря на вашите нужди (лимит на скоростта, черен списък ...), но може да бъде малко досаден за поставяне.

Можете също така да използвате мрежата TOR, известна още като „The Onion Router“. Това е световна компютърна мрежа, предназначена да насочва трафика през много различни сървъри, за да скрие неговия произход. Използването на TOR прави мрежовото наблюдение/анализа на трафика много трудно. Има много случаи на употреба за използване на TOR, като поверителност, свобода на словото, журналисти в режима на диктатура и, разбира се, незаконни дейности. В контекста на уеб скрапинг, TOR може да скрие вашия IP адрес и да промени IP адреса на вашия бот на всеки 10 минути. IP адресите на изходните възли на TOR са публични. Някои уебсайтове блокират трафика на TOR, като използват просто правило: ако сървърът получи заявка от един от публичните изходни възли на TOR, той ще го блокира. Ето защо в много

случаи, TOR няма да ви помогне в сравнение с класическите проксита. Струва си да се отбележи, че трафикът през TOR също е много по-бавен поради многократното маршрутизиране.

Captchas

Но понякога проксита няма да са достатъчни, някои уебсайтове систематично ви молят да потвърдите, че сте човек с така наречените CAPTCHA. През повечето време CAPTCHA се показват само на подозрителен IP, така че превключването на прокси ще работи в тези случаи. За останалите случаи ще трябва да използвате услуга за решаване на CAPTCHA („2Captchas“ и „DeathByCaptchas“ идват на ум).

Трябва да знаете, че докато някои Captcha могат да бъдат разрешени автоматично с оптично разпознаване на символи (OCR), най-новият трябва да бъде разрешен на ръка.

Стара captcha, разбиваема програмно

Google ReCaptcha V2

Това означава, че ако използвате тези гореспоменати услуги, от другата страна на повикването на API ще имате стотици хора, разрешаващи CAPTCHA само за 20ct на час.

Но от друга страна, дори ако решите CAPCHA или превключите прокси веднага щом видите такъв, уебсайтовете все още могат да открият вашата малка задача за изчистване.

Модел на заявка

Последният усъвършенстван инструмент, използван от уебсайта за откриване на изстъргване, е разпознаването на шаблони. Така че, ако планирате да премахнете всички идентификатори от 1 до 10 000 за URL адреса www.example.com/product/‹id›, опитайте се да не го правите последователно и с постоянен процент на заявки. Бихте могли например да поддържате набор от цели числа от 1 до 10 000 и произволно да изберете едно цяло число в този набор и след това да изтриете вашия продукт.

Този един прост пример, някои уебсайтове също правят статистика за пръстови отпечатъци на браузъра за крайна точка. Което означава, че ако не промените някои параметри в браузъра си без глава и не се насочите към една крайна точка, те така или иначе може да ви блокират.

Уебсайтовете също са склонни да наблюдават произхода на трафика, така че ако искате да изтриете уебсайт в Бразилия, опитайте да не го правите с проксита във Виетнам например.

Но от опит това, което мога да кажа, е, че скоростта е най-важният фактор при „Разпознаване на образец на заявка“, така че колкото по-бавно изстъргвате, толкова по-малък е шансът да бъдете открити.

Надявам се, че този преглед ще ви помогне да разберете по-добре уеб скрапинга и че сте научили неща, четейки тази публикация.

Всичко, за което говорих в тази публикация, са неща, които използваме в ScrapingNinja, API за уеб скрапиране, за обработка на хиляди заявки в секунда, без никога да бъде блокиран. Не се колебайте да тествате нашето решение, ако не искате да губите твърде много време, за да настроите всичко, първите 1k извиквания на API са за наша сметка :).