Веб-скрейпінг, процес отримання даних із веб-сайтів, став потужним методом збору інформації з величезного простору Інтернету. У цьому підручнику ми вивчимо різні бібліотеки та модулі Python, які зазвичай використовуються для веб-збирання, і розберемося, чому Python 3 є кращим вибором для цього завдання.
Основні пакети та інструменти для Python Web Scraping
Остання версія Python , пропонує багатий набір інструментів і бібліотек, спеціально розроблених для сканування веб-сторінок, що спрощує, ніж будь-коли, ефективне та результативне отримання даних з Інтернету.
Зміст
- Модуль запитів
- Бібліотека BeautifulSoup
- Селен
- Lxml
- Модуль Urllib
- PyautoGUI
- розклад
- Чому Python Web Scraping?
Модуль запитів
Бібліотека запитів використовується для надсилання HTTP-запитів до певної URL-адреси та повертає відповідь. Запити Python забезпечують вбудовані функції для керування як запитом, так і відповіддю.
pip install requests>
Приклад: Створення запиту
Модуль запитів Python має кілька вбудованих методів для виконання HTTP-запитів до вказаного URI за допомогою запитів GET, POST, PUT, PATCH або HEAD. Запит HTTP призначений або для отримання даних із зазначеного URI, або для надсилання даних на сервер. Він працює як протокол запит-відповідь між клієнтом і сервером. Тут ми будемо використовувати запит GET. The Метод GET використовується для отримання інформації з заданого сервера за допомогою заданого URI. Метод GET надсилає закодовану інформацію про користувача, додану до запиту сторінки.
Python
import requests # Making a GET request r = requests.get('https://www.techcodeview.com) # check status code for response received # success code - 200 print(r) # print content of request print(r.content)> Вихід

Для отримання додаткової інформації зверніться до нашого Підручник із запитів Python .
Бібліотека BeautifulSoup
Beautiful Soup надає кілька простих методів і фраз Pythonic для керування, пошуку та зміни дерева аналізу: набір інструментів для вивчення документа та видалення того, що вам потрібно. Для документування програми не потрібно багато коду.
Beautiful Soup автоматично перетворює вхідні записи в Unicode, а вихідні форми – в UTF-8. Вам не потрібно думати про кодування, якщо документ не визначає кодування, а Beautiful Soup не може його вловити. Тоді вам залишається лише вибрати оригінальне кодування. Beautiful Soup працює над відомими синтаксичними засобами Python, такими як LXML і HTML, що дає вам змогу спробувати різні стратегії синтаксичного аналізу або обміняти швидкість на гнучкість.
pip install beautifulsoup4>
приклад
- Імпорт бібліотек: Код імпортує бібліотеку запитів для створення HTTP-запитів і клас BeautifulSoup з бібліотеки bs4 для аналізу HTML.
- Створення запиту GET: Він надсилає запит GET на https://www.techcodeview.com
- Перевірка коду статусу: Він друкує код статусу відповіді, зазвичай 200 для успішного виконання.
- Розбір HTML : HTML-вміст відповіді аналізується за допомогою BeautifulSoup і зберігається в змінній soup.
- Друк попереднього HTML: Він друкує модифіковану версію проаналізованого вмісту HTML для зручності читання та аналізу.
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.techcodeview.com) # check status code for response received # success code - 200 print(r) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') print(soup.prettify())> Вихід
цифри для алфавіту

Пошук елементів за класами
Тепер ми хотіли б отримати деякі корисні дані з вмісту HTML. Об’єкт soup містить усі дані у вкладеній структурі, які можна отримати програмним шляхом. Веб-сайт, який ми хочемо скопіювати, містить багато тексту, тож тепер давайте скопіюємо весь цей вміст. По-перше, давайте перевіримо веб-сторінку, яку ми хочемо отримати.
На наведеному вище зображенні ми бачимо, що весь вміст сторінки знаходиться під div з вмістом запису класу. Ми будемо використовувати клас find. Цей клас знайде заданий тег із заданим атрибутом. У нашому випадку він знайде всі елементи div, які мають клас, як вхідний вміст.
Ми бачимо, що вміст сторінки знаходиться під
байтів до рядка python
тег. Тепер ми повинні знайти всі теги p, присутні в цьому класі. Ми можемо використовуватизнайти_все клас BeautifulSoup.
Python import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.techcodeview.com) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') s = soup.find('div', class_='entry-content') content = s.find_all('p') print(content)> Вихід:

Для отримання додаткової інформації зверніться до нашого Python BeautifulSoup .
Селен
Selenium — це популярний модуль Python, який використовується для автоматизації веб-браузерів. Це дозволяє розробникам програмно керувати веб-браузерами, дозволяючи виконувати такі завдання, як веб-скрапінг, автоматичне тестування та взаємодія з веб-додатками. Selenium підтримує різні веб-браузери, включаючи Chrome, Firefox, Safari та Edge, що робить його універсальним інструментом для автоматизації браузера.
приклад 1: Для Firefox
У цьому конкретному прикладі ми спрямовуємо браузер на сторінку пошуку Google із параметром запиту geeksforgeeks. Браузер завантажить цю сторінку, і ми зможемо продовжити програмну взаємодію з нею за допомогою Selenium. Ця взаємодія може включати такі завдання, як отримання результатів пошуку, клацання посилань або копіювання певного вмісту зі сторінки.
Python # import webdriver from selenium import webdriver # create webdriver object driver = webdriver.Firefox() # get google.co.in driver.get('https://google.co.in / search?q = geeksforgeeks')> Вихід

Приклад 2: для Chrome
- Ми імпортуємо модуль webdriver з бібліотеки Selenium.
- Ми вказуємо шлях до виконуваного файлу веб-драйвера. Потрібно завантажити відповідний драйвер для вашого браузера та вказати шлях до нього. У цьому прикладі ми використовуємо драйвер Chrome.
- Ми створюємо новий екземпляр веб-браузера за допомогою webdriver.Chrome() і передаємо шлях до виконуваного файлу драйвера Chrome як аргумент.
- Ми переходимо до веб-сторінки, викликаючи метод get() об’єкта браузера та передаючи URL-адресу веб-сторінки.
- Ми витягуємо інформацію з веб-сторінки за допомогою різних методів, наданих Selenium. У цьому прикладі ми отримуємо назву сторінки за допомогою атрибута title об’єкта браузера.
- Нарешті, ми закриваємо браузер за допомогою методу quit().
# importing necessary packages from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager # for holding the resultant list element_list = [] for page in range(1, 3, 1): page_url = 'https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=' + str(page) driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(page_url) title = driver.find_elements(By.CLASS_NAME, 'title') price = driver.find_elements(By.CLASS_NAME, 'price') description = driver.find_elements(By.CLASS_NAME, 'description') rating = driver.find_elements(By.CLASS_NAME, 'ratings') for i in range(len(title)): element_list.append([title[i].text, price[i].text, description[i].text, rating[i].text]) print(element_list) #closing the driver driver.close()>
Вихід

Для отримання додаткової інформації зверніться до нашого Python Selenium .
Lxml
Модуль lxml у Python — це потужна бібліотека для обробки документів XML і HTML. Він забезпечує високопродуктивні можливості синтаксичного аналізу XML і HTML разом із простим API на Pythonic. lxml широко використовується в веб-скрейпінгу Python завдяки своїй швидкості, гнучкості та простоті використання.
pip install lxml>
приклад
Ось простий приклад, який демонструє, як використовувати модуль lxml для веб-перегляду Python:
мамта кулькарні
- Ми імпортуємо модуль html із lxml разом із модулем запитів для надсилання запитів HTTP.
- Ми визначаємо URL-адресу веб-сайту, який хочемо скопіювати.
- Ми надсилаємо запит HTTP GET на веб-сайт за допомогою функції requests.get() і отримуємо вміст HTML сторінки.
- Ми аналізуємо вміст HTML за допомогою функції html.fromstring() з lxml, яка повертає дерево елементів HTML.
- Ми використовуємо вирази XPath, щоб отримати певні елементи з дерева HTML. У цьому випадку ми витягуємо текстовий вміст усіх (якірні) елементи на сторінці.
- Ми переглядаємо витягнуті заголовки посилань і друкуємо їх.
from lxml import html import requests # Define the URL of the website to scrape url = 'https://example.com' # Send an HTTP request to the website and retrieve the HTML content response = requests.get(url) # Parse the HTML content using lxml tree = html.fromstring(response.content) # Extract specific elements from the HTML tree using XPath # For example, let's extract the titles of all the links on the page link_titles = tree.xpath('//a/text()') # Print the extracted link titles for title in link_titles: print(title)> Вихід
More information...>
Модуль Urllib
Модуль urllib у Python — це вбудована бібліотека, яка надає функції для роботи з URL-адресами. Це дозволяє вам взаємодіяти з веб-сторінками, вибираючи URL-адреси (уніфіковані покажчики ресурсів), відкриваючи та читаючи дані з них, а також виконуючи інші завдання, пов’язані з URL-адресами, як-от кодування та аналіз. Urllib — це пакет, який збирає кілька модулів для роботи з URL-адресами, наприклад:
- urllib.запит на відкриття та читання.
- urllib.parse для аналізу URL-адрес
- urllib.error для викликаних винятків
- urllib.robotparser для аналізу файлів robot.txt
Якщо urllib немає у вашому середовищі, виконайте наведений нижче код, щоб установити його.
pip install urllib3>
приклад
Ось простий приклад, який демонструє, як використовувати модуль urllib для отримання вмісту веб-сторінки:
- Ми визначаємо URL-адресу веб-сторінки, яку хочемо отримати.
- Ми використовуємо функцію urllib.request.urlopen(), щоб відкрити URL-адресу та отримати об’єкт відповіді.
- Ми читаємо вміст об’єкта відповіді за допомогою методу read().
- Оскільки вміст повертається у вигляді байтів, ми декодуємо його в рядок за допомогою методу decode() із кодуванням «utf-8».
- Нарешті, ми друкуємо HTML-вміст веб-сторінки.
import urllib.request # URL of the web page to fetch url = 'https://www.example.com' try: # Open the URL and read its content response = urllib.request.urlopen(url) # Read the content of the response data = response.read() # Decode the data (if it's in bytes) to a string html_content = data.decode('utf-8') # Print the HTML content of the web page print(html_content) except Exception as e: print('Error fetching URL:', e)> Вихід

PyautoGUI
Модуль pyautogui у Python — це міжплатформна бібліотека автоматизації GUI, яка дозволяє розробникам керувати мишею та клавіатурою для автоматизації завдань. Хоча він не розроблений спеціально для веб-скрапінгу, його можна використовувати в поєднанні з іншими бібліотеками веб-скрапінгу, наприклад Selenium, для взаємодії з веб-сторінками, які вимагають введення даних від користувача або імітації дій людини.
pip3 install pyautogui>
приклад
У цьому прикладі pyautogui використовується для прокручування та створення знімка екрана сторінки результатів пошуку, отриманої шляхом введення запиту в поле введення пошуку та натискання кнопки пошуку за допомогою Selenium.
Python import pyautogui # moves to (519,1060) in 1 sec pyautogui.moveTo(519, 1060, duration = 1) # simulates a click at the present # mouse position pyautogui.click() # moves to (1717,352) in 1 sec pyautogui.moveTo(1717, 352, duration = 1) # simulates a click at the present # mouse position pyautogui.click()>
Вихід

розклад
Модуль розкладу в Python — це проста бібліотека, яка дозволяє планувати виконання функцій Python через певні проміжки часу. Це особливо корисно під час веб-скрейпінгу в Python, коли вам потрібно регулярно очищати дані з веб-сайту через заздалегідь визначені проміжки часу, наприклад щогодини, щодня чи щотижня.
приклад
- Імпортуємо необхідні модулі: розклад, час, запити, BeautifulSoup з пакету bs4.
- Ми визначаємо функцію scrape_data(), яка виконує завдання веб-збирання. У цій функції ми надсилаємо запит GET на веб-сайт (замінюємо «https://example.com» на URL-адресу веб-сайту, який потрібно скопіювати), аналізуємо вміст HTML за допомогою BeautifulSoup, витягуємо потрібні дані та друкуємо їх .
- Ми плануємо виконання функції scrape_data() щогодини за допомогою schedule.every().hour.do(scrape_data).
- Ми входимо в основний цикл, який безперервно перевіряє наявність запланованих завдань, що очікують на виконання, за допомогою schedule.run_pending() і перебуває в режимі сну протягом 1 секунди між ітераціями, щоб запобігти споживанню ЦП циклом.
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)> Вихід

Чому Python3 для веб-збирання?
Популярність Python для веб-скрапінгу пов’язана з кількома факторами:
- Простота використання : чистий і читабельний синтаксис Python полегшує розуміння та написання коду навіть початківцям. Ця простота прискорює процес розробки та скорочує криву навчання для завдань веб-збирання.
- Багата екосистема : Python може похвалитися великою екосистемою бібліотек і фреймворків, призначених для веб-скрапінгу. Такі бібліотеки, як BeautifulSoup, Scrapy та Requests, спрощують процес синтаксичного аналізу HTML, роблячи вилучення даних легким.
- Універсальність : Python — це універсальна мова, яку можна використовувати для широкого кола завдань, окрім сканування веб-сторінок. Його гнучкість дозволяє розробникам легко інтегрувати веб-скрапінг у великі проекти, такі як аналіз даних, машинне навчання або веб-розробка.
- Підтримка спільноти : Python має велике та активне співтовариство розробників, які вносять свій внесок у його бібліотеки та надають підтримку через форуми, навчальні посібники та документацію. Ця велика кількість ресурсів гарантує, що розробники мають доступ до допомоги та вказівок під час вирішення проблем веб-скрапінгу.