Що таке Screen Scraping і як це зробити?

У цій статті я проведу вас через те, що таке screen scraping, його різні типи та як робити це на реальних прикладах. Якщо ви готові навчитися витягувати дані з місць, які не надають легкого доступу, читайте далі!

Що таке скрейпінг екрана?

Скрінскрапінг Це процес вилучення інформації з інтерфейсу або екрана програмного забезпечення чи вебсайту. Хоча API (Application Programming Interfaces) є кращим способом отримання даних, багато програм і вебсайтів їх не надають. У такому разі screen scraping є життєздатним рішенням.

Ця техніка може збирати дані з кількох типів інтерфейсів, зокрема:

  • Вебсторінки
  • GUI (графічні інтерфейси користувача)
  • Виведення термінала (консоль або командний рядок)

На відміну від використання API, де дані зазвичай структуровані й їх легше обробляти, скрінскрапінг потребує методів, які витягують дані безпосередньо з відображеного виводу, часто з додатковими інструментами та скриптами.

Типи екранного скрапінгу

Існують різні типи скрейпінгу екрана, кожен із яких адаптований до конкретних середовищ і джерел даних. Три найпоширеніші типи такі:

Web Scraping

Вебскрапінг є найпопулярнішою та найвідомішою формою скрінскрапінгу. Вона полягає у вилученні даних із вебсайтів шляхом аналізу HTML-вмісту вебсторінок. Вебскрапінг часто виконують за допомогою бібліотек або інструментів, які отримують HTML-дані та витягують потрібну інформацію.

Наприклад, використовуючи Python requests і BeautifulSoup, ми можемо витягувати дані з вебсайту ось так:

import requests
from bs4 import BeautifulSoup
url = 'https://example.com'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
links = soup.find_all('a')
for link in links:
print(f"Link: {link.get_text()} | URL: {link.get('href')}")
else:
print(f"Не вдалося отримати сторінку. Код стану: {response.status_code}")

Цей простий код отримує всі посилання з вебсторінки. Проте деякі вебсайти завантажують контент динамічно за допомогою JavaScript, через що скрапінг за допомогою інструментів на кшталт BeautifulSoup стає неефективним. Для таких випадків ми використовуємо headless browser, наприклад Selenium, який може відтворювати JavaScript.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument(" - headless")
driver = webdriver.Chrome(options=options)
driver.get("https://quotes.toscrape.com/js/")
quotes = driver.find_elements_by_class_name("quote")
for quote in quotes:
print(quote.text)
driver.quit()

GUI Scraping

GUI-скрейпінг використовують для вилучення даних із графічних інтерфейсів користувача. Цей тип скрейпінгу імітує взаємодію людини з інтерфейсом, наприклад натискання кнопок або читання тексту, що відображається на екрані. Інструменти для GUI-скрейпінгу, як-от pyautogui, допомагають автоматизувати цей процес, імітуючи введення з миші та клавіатури.

Прикладом GUI-скрапінгу є:

import pyautogui
# Take a screenshot and save it
screenshot = pyautogui.screenshot()
screenshot.save("screenshot.png")

Хоча GUI scraping може бути корисним, він часто є повільним і ненадійним через відмінності в роздільній здатності екрана та непередбачуваність графічного інтерфейсу.

Terminal Scraping

Термінальний скрейпінг, або скрейпінг командного рядка, полягає у вилученні даних із виведення термінала або командного рядка. Багато інструментів командного рядка надають дані у структурованому форматі, наприклад JSON або CSV, який легко обробляти.

Наприклад, ми можемо зібрати дані про використання диска за допомогою команди df -h у системі Linux і обробити вивід за допомогою shell-скриптингу:

df -h | sed '$d' | awk 'NR>1 { print $5 " використовується на " $9 }'

Цей скрипт витягує відсоток використання диска та точки монтування з виводу df -h.

Screen Scraping Websites

Коли йдеться про вебскрапінг, можна використовувати різні інструменти й методи для вилучення даних із вебсайтів. Найпростіший варіант — використати HTTP-клієнт, щоб отримати HTML-вміст, а потім розпарсити його для отримання даних.

Розгляньте такий приклад вилучення заголовка сторінки з вебсайту:

from requests_html import HTMLSession
session = HTMLSession()
response = session.get('https://example.com')
if response.status_code == 200:
page_title = response.html.find('h1', first=True).text
print(f"Page Title: {page_title}")
else:
print("Не вдалося отримати сторінку")

Цей код використовує requests-html, бібліотеку, що підтримує рендеринг JavaScript на випадок, якщо вміст завантажується динамічно.

Get Data Journal’s stories in your inbox

Якщо вам потрібно витягти всі посилання зі сторінки, ви можете використати BeautifulSoup:

import requests
from bs4 import BeautifulSoup
url = 'https://example.com'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
links = soup.find_all('a')
for link in links:
print(f"Link: {link.get_text()} | URL: {link.get('href')}")
else:
print("Не вдалося отримати сторінку")

Використання OpenAI для вебскрапінгу

Вебскрапінг екрана також може використовувати інструменти ШІ, як-от OpenAI, для збирання даних на основі зображень. Наприклад, OCR (Optical Character Recognition) можна використати для вилучення тексту із зображень або скриншотів.

Ось приклад використання Vision API від OpenAI для вилучення тексту зі скриншота:

import base64
import pyautogui
from openai import OpenAI
from io import BytesIO
client = OpenAI(api_key="your-api-key")
screenshot = pyautogui.screenshot()
buffer = BytesIO()
screenshot.save(buffer, format="PNG")
img_base64 = base64.b64encode(buffer.getvalue()).decode("utf-8")
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Будь ласка, витягніть увесь видимий текст із цього знімка екрана."},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img_base64}"}}
]
}
],
max_tokens=1000
)
print("Результат:", response.choices[0].message.content.strip())

Цей приклад демонструє, як API OpenAI можна використовувати для читання та вилучення даних із зображень. Це може бути особливо корисно для GUI-скрапінгу, коли дані вбудовано в зображення.

Раджу вам докладніше дізнатися, як використовувати ChatGPT для вебскрапінгу.

Проблеми екранного скрапінгу

Хоча зняття даних з екрана є потужним підходом, воно має кілька викликів:

  1. Anti-Scraping Measures: Вебсайти часто впроваджують такі техніки, як CAPTCHA, обмеження швидкості та блокування IP, щоб запобігти збиранню даних. Ці заходи можна обійти за допомогою таких технік, як Сервіси для розв’язання CAPTCHA and ротаційні IP-проксі.
  2. Dynamic Content: Сучасні вебсайти використовують JavaScript для динамічного завантаження вмісту. У таких випадках традиційні методи збирання даних, як-от BeautifulSoup, можуть не спрацювати. Браузери без інтерфейсу, як-от Selenium потрібні, щоб повністю відрендерити сторінку перед вилученням даних.
  3. Якість і структура даних: Вилучені дані не завжди можуть бути структуровані так, щоб ними було легко користуватися. Непослідовний HTML, часті зміни сторінок або невдало спроєктовані інтерфейси можуть ускладнювати надійний розбір даних.

Етика екранного скрапінгу

Screen scraping, like any web scraping activity, should be approached ethically. Websites often have a robots.txt file that specifies whether scraping is allowed. It is important to respect these rules to avoid legal issues. For instance, LinkedIn sued hiQ Labs for scraping its data, and the courts sided with LinkedIn.

Before scraping a website, always check the robots.txt file and ensure you’re not violating any terms of service. Here’s an example of a robots.txt file:

User-agent: *
Disallow: /private/
Sitemap: https://example.com/sitemap.xml

Conclusion

Зняття даних з екрана — це універсальний інструмент для вилучення даних, коли API недоступний. Незалежно від того, чи ви знімаєте дані з вебсайту, GUI або виводу термінала, можна застосовувати різні інструменти й техніки залежно від типу даних і джерела. Водночас такі виклики, як антискрапінгові заходи та динамічний контент, потребують додаткових інструментів, як-от Selenium або безголові браузери.

Розуміючи етичні принципи й відповідально застосовуючи вебскрапінг, ви зможете ефективно витягувати цінні дані для своїх проєктів. Тож уперед, використовуйте техніки, описані в цьому посібнику, і починайте вебскрапінг!

Схожі записи