Что такое извлечение данных с экрана и как это делать?
Что такое скрин-скрапинг?
Извлечение данных с экрана обозначает процесс извлечения информации из пользовательского интерфейса программы или сайта. Хотя API (интерфейсы программирования приложений) являются предпочтительным способом получения данных, многие программы и сайты их не предоставляют. В таких случаях извлечение данных с экрана становится рабочим решением.
Этот метод может извлекать данные из нескольких типов интерфейсов, включая:
- Веб-страницы
- GUI (графические пользовательские интерфейсы)
- Вывод терминала (консоль или командная строка)
В отличие от API, где данные обычно структурированы и ими проще управлять, при извлечении данных с экрана нужны методы, которые считывают данные напрямую с экрана, а также нередко требуются дополнительные инструменты и скрипты.
Виды извлечения данных с экрана
Существуют разные виды скрин-скрапинга, каждый из которых рассчитан на определённые среды и источники данных. Три самых распространённых типа:
Web Scraping
Веб-скрейпинг Веб-скрейпинг — самый популярный и известный вид извлечения данных с экрана. Он заключается в извлечении данных с веб-сайтов путем парсинга HTML-кода веб-страниц. Веб-скрейпинг часто выполняют с помощью библиотек или инструментов, которые получают HTML и извлекают нужную информацию.
Например, с помощью библиотек requests и BeautifulSoup для Python можно извлечь данные с сайта вот так:
импорт requests
с сайта bs4 импорт BeautifulSoup
url = 'https://example.com'
response = requests.get(url)
если response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
links = soup.find_all('a')
для link в links:
печать(f"Link: {link.get_text()} | URL: {link.get('href')}")
else:
печать(f"Failed to retrieve the page. Status code: {response.status_code}")
Этот простой код извлекает все ссылки со страницы. Однако некоторые сайты загружают контент динамически с помощью JavaScript, из-за чего скрапинг с помощью таких инструментов, как BeautifulSoup, становится неэффективным. Для таких случаев мы используем headless-браузер вроде Selenium, который умеет рендерить JavaScript.
с сайта селен импорт webdriver
с сайта selenium.webdriver.chrome.options импорт 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")
для quote в quotes:
печать(quote.text)
driver.quit()
GUI Scraping
GUI-скрапинг используется для извлечения данных из графических пользовательских интерфейсов. Этот тип скрапинга имитирует взаимодействие человека с интерфейсом, например нажатия кнопок или чтение текста, отображаемого на экране. Инструменты для GUI-скрапинга, такие как pyautogui, помогают автоматизировать этот процесс, имитируя действия мыши и клавиатуры.
Пример извлечения данных из графического интерфейса:
import pyautogui
# Take a screenshot and save it
screenshot = pyautogui.screenshot()
screenshot.save("screenshot.png")
Хотя сбор данных через GUI может быть полезным, это часто медленный и ненадёжный процесс из-за различий в разрешении экрана и непредсказуемости графического интерфейса.
Terminal Scraping
Терминальный скрапинг, или скрапинг через командную строку, подразумевает извлечение данных из вывода терминала или командной строки. Многие командные утилиты предоставляют данные в структурированном формате, например JSON или CSV, и такие данные легко парсить.
Например, можно собрать данные об использовании диска, выполнив команду df -h в Linux и обработав вывод с помощью shell-скриптов:
df -h | sed '$d' | awk 'NR>1 { print $5 " used on " $9 }'
Этот скрипт извлекает процент использования диска и точки монтирования из вывода df -h.
Screen Scraping Websites
Когда речь идёт о веб-скрапинге, существует множество инструментов и методов, которые можно использовать для извлечения данных с сайтов. Самый простой вариант — использовать HTTP-клиент, чтобы получить HTML-контент, а затем разобрать его и извлечь данные.
Рассмотрим следующий пример извлечения заголовка страницы с сайта:
с сайта requests_html импорт HTMLSession
session = HTMLSession()
response = session.get('https://example.com')
если response.status_code == 200:
page_title = response.html.find('h1', first=Правда).text
печать(f"Page Title: {page_title}")
else:
печать("Failed to retrieve the page")
Этот код использует requests-html, библиотеку, которая поддерживает рендеринг JavaScript на случай, если контент загружается динамически.
Получайте истории Data Journal на свою почту
Если нужно извлечь все ссылки со страницы, можно использовать BeautifulSoup:
импорт requests
с сайта bs4 импорт BeautifulSoup
url = 'https://example.com'
response = requests.get(url)
если response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
links = soup.find_all('a')
для link в links:
печать(f"Link: {link.get_text()} | URL: {link.get('href')}")
else:
печать("Failed to retrieve the page")
Использование OpenAI для скрапинга
Скрин-скрапинг также может использовать ИИ-инструменты, такие как OpenAI, для извлечения данных из изображений. Например, OCR (оптическое распознавание символов) можно использовать для извлечения текста из изображений или скриншотов.
Вот пример использования Vision API от OpenAI для извлечения текста из скриншота:
импорт base64
импорт pyautogui
с сайта openai импорт OpenAI
с сайта io импорт 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
)
печать("Result:", response.choices[0].message.content.strip())
Этот пример показывает, как API от OpenAI можно использовать для распознавания и извлечения данных из изображений. Это особенно полезно для извлечения данных из графического интерфейса, когда данные встроены в изображения.
Рекомендую подробнее узнать, как использовать ChatGPT для веб-скрапинга.
Сложности извлечения данных с экрана
Хотя извлечение данных с экрана — мощный инструмент, оно сопряжено с рядом трудностей:
- Anti-Scraping Measures: Сайты часто используют такие меры, как CAPTCHA, ограничение частоты запросов и блокировку IP-адресов, чтобы предотвратить скрапинг. Эти меры можно обходить с помощью таких методов, как Сервисы для решения CAPTCHA и ротационные IP-прокси.
- Dynamic Content: Современные сайты используют JavaScript для динамической загрузки контента. В таких случаях традиционные методы скрапинга, такие как BeautifulSoup, могут не работать. Headless-браузеры, такие как Селен нужны, чтобы полностью отрисовать страницу перед извлечением данных.
- Качество и структура данных: Извлечённые данные не всегда структурированы так, чтобы их было удобно использовать. Непоследовательная 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-агент: *
Disallow: /private/
Sitemap: https://example.com/sitemap.xml
Заключение
Извлечение данных с экрана — универсальный инструмент, когда API недоступен. Независимо от того, извлекаете ли вы данные с сайта, через GUI или из вывода терминала, в зависимости от типа данных и источника можно применять разные инструменты и методы. Однако такие проблемы, как антискрапинговые меры и динамический контент, требуют дополнительных инструментов, таких как Selenium или headless-браузеры.
Понимая этические принципы и ответственно подходя к скрапингу, вы сможете эффективно извлекать ценные данные для своих проектов. Так что смело используйте техники, описанные в этом руководстве, и приступайте к скрапингу!

