Если ваша сегодняшняя работа заключается в сборе информации о ценах с страниц конкурентов на сайтах, как бы вы это осуществили? Копирование и вставка? Вручную ввод данных? На самом деле нет! Эти методы абсолютно тратят ваше большинство времени и могут привести к ошибкам.
Необходимо отметить, что Python стал одним из самых популярных языков программирования для сбора данных. В чем его привлекательность?
Давайте начнем наслаждаться миром веб-скрапинга с помощью Python!
Веб-скрапинг - это процесс извлечения данных с веб-сайтов. Это можно сделать вручную, но лучше использовать автоматизированные инструменты или скрипты для сбора больших объемов данных эффективно и точно. Копирование и вставка с веб-страниц также фактически является веб-скрапингом.
Python считается одним из лучших выборов для веб-скрапинга по нескольким причинам:
Java также является важным языком для веб-скрапинга. Вы можете узнать о трех замечательных методах в учебнике по веб-скрапингу на Java.
Вы готовы начать свое путешествие в веб-скрапинг с помощью Python? Прежде чем определить основные шаги, убедитесь, что вы знаете, чего ожидать и как действовать.
Веб-скрапинг включает в себя систематический процесс, включающий четыре основных задачи:
1. Изучение целевых страниц
Прежде чем извлекать данные, вам нужно понять макет веб-сайта и структуру данных:
2. Получение HTML-содержимого
Для скрапинга веб-сайта сначала необходимо получить доступ к его HTML-содержимому:
3. Извлечение данных из HTML
После того как у вас есть HTML, следующим шагом будет извлечение нужной информации:
4. Хранение извлеченных данных
После извлечения данных важно сохранить их в доступном формате:
Совет: Веб-сайты динамичны, поэтому регулярно пересматривайте и обновляйте свой процесс скрапинга, чтобы данные были актуальными.
Веб-скрапинг на Python может применяться в различных ситуациях, включая:
Веб-скрапинг имеет свой набор вызовов:
Кроме того, веб-сайты используют меры по защите от ботов, такие как блокировка IP-адресов, задачи JavaScript и CAPTCHA. Их можно обойти с помощью таких методов, как поворот прокси и безголовые браузеры.
Застряли в проблемах веб-краулинга?
Обойдите обнаружение анти-бота, чтобы упростить веб-скрапинг и автоматизацию
Попробуйте бесплатно Nstbrowser!
Есть ли у вас хорошие идеи или вопросы о веб-скрейпинге и Browserless?
Посмотрите чем делятся другие разработчики в Discord и Telegram!
Хотя веб-скрапинг универсален, существуют альтернативы:
Несмотря на эти альтернативы, веб-скрапинг остается популярным выбором благодаря его гибкости и обширным возможностям доступа к данным.
Начните свое путешествие в веб-скрапинге с помощью Python и разблокируйте огромный потенциал онлайн-данных!
В самом начале мы должны установить нашу оболочку:
pip install selenium requests json
После завершения установки, создайте новый файл scraping.py и подключите только что установленную библиотеку в файле:
import json
from urllib.parse import quote
from urllib.parse import urlencode
import requests
from requests.exceptions import HTTPError
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
Чтобы получить точную демонстрацию, мы будем использовать Nstbrowser, абсолютно бесплатный браузер с анти-детектом в качестве инструмента для завершения нашей задачи:
def create_and_connect_to_browser():
host = '127.0.0.1'
api_key = 'xxxxxxx' # ваш api-ключ
config = {
'once': True,
'headless': False, # без головы
'autoClose': True,
'remoteDebuggingPort': 9226,
'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'fingerprint': { # требуется
'name': 'custom browser',
'platform': 'windows', # поддержка: windows, mac, linux
'kernel': 'chromium', # поддержка: chromium
'kernelMilestone': '120',
'hardwareConcurrency': 4, # поддержка: 2, 4, 8, 10, 12, 14, 16
'deviceMemory': 4, # поддержка: 2, 4, 8
'proxy': '', # формат ввода: schema://user:password@host:port например: http://user:password@localhost:8080
}
}
query = urlencode({
'x-api-key': api_key, # требуется
'config': quote(json.dumps(config))
})
url = f'http://{host}:8848/devtool/launch?{query}'
print('devtool url: ' + url)
port = get_debugger_port(url)
debugger_address = f'{host}:{port}'
print("debugger_address: " + debugger_address)
После подключения к Nstbrowser, мы подключаемся к Selenium через адрес отладчика, который вернул нам Nstbrowser:
def exec_selenium(debugger_address: str):
options = webdriver.ChromeOptions()
options.add_experimental_option("debuggerAddress", debugger_address)
# Замените на соответствующий путь к WebDriver.
chrome_driver_path = r'./chromedriver' # ваш путь к драйверу Chrome
service = ChromeService(executable_path=chrome_driver_path)
driver = webdriver.Chrome(service=service, options=options)
С этого момента мы успешно запустили Nstbrowser через Selenium. Начнем сканирование!
driver.get("https://www.imdb.com/chart/top")
python scraping.py
Как вы можете видеть, мы успешно запустили Nstbrowser и посетили наш целевой сайт.
Мы можем использовать Selenium, чтобы получить эту структуру DOM и проанализировать их содержимое:
movies = driver.find_elements(By.CSS_SELECTOR, "li.cli-parent")
for row in movies:
title = row.find_element(By.CLASS_NAME, 'ipc-title-link-wrapper') # получить заголовок
year = row.find_element(By.CSS_SELECTOR, 'span.cli-title-metadata-item') # получить год создания
rate = row.find_element(By.CLASS_NAME, 'ipc-rating-star') # получить оценку
move_item = {
"title": title.text,
"year": year.text,
"rate": rate.text
}
print(move_item)
Конечно, вывод этой информации в терминале не является нашей целью. Далее нам нужно сохранить собранные данные.
Мы используем библиотеку JSON для сохранения извлеченных данных в JSON-файл:
movies = driver.find_elements(By.CSS_SELECTOR, "li.cli-parent")
movies_info = []
for row in movies:
title = row.find_element(By.CLASS_NAME, 'ipc-title-link-wrapper')
year = row.find_element(By.CSS_SELECTOR, 'span.cli-title-metadata-item')
rate = row.find_element(By.CLASS_NAME, 'ipc-rating-star')
move_item = {
"title": title.text,
"year": year.text,
"rate": rate.text
}
movies_info.append(move_item)
# создаем JSON-файл
json_file = open("movies.json", "w")
# конвертируем movies_info в JSON
json.dump(movies_info, json_file)
# освобождаем ресурсы файла
json_file.close()
Как делать веб-скрапинг с помощью Python и Selenium? Это подробное руководство охватывает все, что вас интересует. Чтобы иметь всестороннее понимание, мы говорили о концепции и преимуществах Python для веб-скрапинга. Затем мы переходим к конкретным шагам, взяв в качестве примера бесплатный браузер с анти-детектом - Nstbrowser. Я уверен, что вы многое узнали о веб-скрапинге на Python сейчас! Пора начинать работу над вашим проектом и собирать данные.