Поиск по сайту:

Как проанализировать локальный HTML-файл в Python?


Разбор локальных HTML-файлов в Python — распространенная задача при очистке веб-страниц, анализе данных и автоматизации.

В этой статье мы узнаем, как анализировать локальные HTML-файлы в Python. Мы рассмотрим различные методы извлечения данных из файла HTML с помощью Python. Мы рассмотрим изменение и удаление элементов из файла, печать данных, использование рекурсивных дочерних генераторов для перемещения по структуре файла, поиск дочерних тегов и даже парсинг веб-страниц путем извлечения информации из заданной ссылки. С помощью примеров кода и синтаксиса мы продемонстрируем, как использовать библиотеки Python, такие как BeautifulSoup и lxml, для эффективного выполнения этих задач.

Настройка среды

Прежде чем мы углубимся в анализ HTML-файлов, давайте убедимся, что в нашей среде Python установлены необходимые библиотеки. В первую очередь мы будем опираться на две популярные библиотеки: BeautifulSoup и lxml. Чтобы установить их, используйте следующие команды pip:

pip install beautifulsoup4
pip install lxml

После установки мы можем начать анализировать локальные HTML-файлы и извлекать данные. Мы можем использовать несколько методов, таких как изменение файлов, перемещение структуры HTML, очистка веб-страниц и т. д. Давайте рассмотрим некоторые из них подробно с синтаксисом и полными примерами:

Загрузка и изменение HTML-файлов

Чтобы проанализировать HTML-файл, нам нужно загрузить его в наш скрипт Python. Мы можем добиться этого, открыв файл с помощью встроенной функции open и затем прочитав его содержимое. Вот пример:

Синтаксис

with open('example.html', 'r') as file:
    html_content = file.read()

После загрузки HTML-файла мы можем изменить его содержимое, используя методы манипулирования строками или более сложные методы, предоставляемые такими библиотеками, как BeautifulSoup. Например, чтобы удалить определенный элемент из HTML-файла, мы можем использовать метод извлечения BeautifulSoup:

Входной HTML-файл

#myhtml.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="my-class">
      Hello World
  </div>
</body>
</html>

Пример

В этом примере мы загрузили файл HTML («myhtml.html»), создали объект BeautifulSoup, нашли элемент для удаления, используя его тег и атрибуты, и, наконец, удалили его из структуры HTML. Измененный HTML-код можно распечатать с помощью метода prettify для визуализации изменений.

from bs4 import BeautifulSoup

# Load the HTML file
with open('myhtml.html', 'r') as file:
    html_content = file.read()

# Create a BeautifulSoup object
soup = BeautifulSoup(html_content, 'lxml')

# Find the element to remove by its tag and remove it
element_to_remove = soup.find('div', {'class': 'my-class'})
element_to_remove.extract()

# Print the modified HTML
print(soup.prettify())

Выход

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
  <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  <title>
   Document
  </title>
 </head>
 <body>
 </body>
</html>

Извлечение данных из HTML-файлов

Печать или извлечение определенных данных из файла HTML предполагает навигацию по его структуре. BeautifulSoup предоставляет ряд методов для достижения этой цели. Чтобы извлечь данные, нам часто нужно найти нужный элемент или элементы, используя их теги, классы или атрибуты.

Например, давайте рассмотрим HTML-файл, содержащий список статей следующей структуры:

Пример

В этом примере мы загрузили HTML-файл, создали объект BeautifulSoup, нашли элемент ul, а затем извлекли из него все элементы li. Наконец, мы напечатали текстовое содержимое каждого элемента li, которое представляет заголовки статей.

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="">
      <ul>
        <li>Article 1</li>
        <li>Article 2</li>
        <li>Article 3</li>
      </ul>
  </div>
</body>
</html>

Питон

from bs4 import BeautifulSoup

# Load the HTML file
with open('myhtml.html', 'r') as file:
    html_content = file.read()

# Create a BeautifulSoup object
soup = BeautifulSoup(html_content, 'lxml')

# Find all li elements within the ul tag
articles = soup.find('ul').find_all('li')

# Print the article titles
for article in articles:
    print(article.text)

Выход

Article 1
Article 2
Article 3

Обход структуры HTML с помощью рекурсивных дочерних генераторов

Рекурсивные дочерние генераторы — мощный метод перемещения по структуре HTML-файла. BeautifulSoup позволяет нам перебирать дочерние элементы тега, используя атрибут .children. Мы можем рекурсивно обойти всю структуру, чтобы извлечь нужную информацию.

Пример

В этом примере мы загрузили HTML-файл, создали объект BeautifulSoup, определили рекурсивную функцию traverse_tags и вызвали ее с помощью корневого элемента (в данном случае объекта супа). Функция печатает имя тега и его содержимое, а затем рекурсивно вызывает себя для каждого дочернего элемента.

HTML

мойhtml.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="container">
    <h1>Welcome to Tutorialspoint</h1>
    <p>Arrays </p>
    <p>Linkedin List</p>
 </div>
</body>
</html>

Питон

from bs4 import BeautifulSoup

# Load the HTML file
with open('myhtml.html', 'r') as file:
    html_content = file.read()
# Create a BeautifulSoup object
soup = BeautifulSoup(html_content, 'lxml')

# Define a recursive function to traverse the structure
def traverse_tags(element):
    print(element.name)
    print(element.text)
    for child in element.children:
        if child.name:
            traverse_tags(child)

# Traverse the HTML structure
traverse_tags(soup)

Выход

[document]


Document


Welcome to Tutorialspoint
Arrays 
Linkedin List


html



Document

Welcome to Tutorialspoint
Arrays 
Linkedin List

head

Document
meta
meta
meta
title
Document
body

Welcome to Tutorialspoint
Arrays 
Linkedin List

div
Welcome to Tutorialspoint
Arrays 
Linkedin List
h1
Welcome to Tutorialspoint
p
Arrays 
p
Linkedin List

Веб-скрапинг по ссылке

Помимо анализа локальных HTML-файлов, мы также можем извлекать полезную информацию, очищая веб-страницы. Используя библиотеки Python, такие как BeautifulSoup и запросы, мы можем получить HTML-содержимое веб-страницы и извлечь соответствующие данные.

Синтаксис

# Define the URL
url = 'https://www.tutorialspoint.com/index.htm'
# Send a GET request
response = requests.get(url)
# Create a BeautifulSoup object with the webpage content
soup = BeautifulSoup(response.content, 'lxml')

Пример

В этом примере мы использовали библиотеку запросов для отправки запроса GET на нужную веб-страницу. Затем мы создали объект BeautifulSoup с содержимым ответа и извлекли заголовки и описания статей, используя соответствующие теги. Наконец, мы распечатали извлеченную информацию.

import requests
from bs4 import BeautifulSoup

# Define the URL of the webpage to scrape
url = 'https://www.tutorialspoint.com/index.htm'

# Send a GET request to the webpage
response = requests.get(url)

# Check if the request was successful (status code 200)
if response.status_code == 200:
    print("Fetch was successful.")
    
    # Create a BeautifulSoup object with the webpage content
    soup = BeautifulSoup(response.content, 'lxml')
    
    # Find and print the title of the webpage
    mytitle = soup.find('title').text
    print(f"HTMl Webpage Title: {mytitle}")
    
    # Find and print the first paragraph of the content
    myparagraph = soup.find('p').text
    print(f"First Paragraph listed in the website: {myparagraph}")
    
else:
    print(f"Error code: {response.status_code}")

Выход

Fetch was successful.
HTMl Webpage Title: Online Courses and eBooks Library | Tutorialspoint
First Paragraph listed in the website: Premium Courses

Заключение

Анализ локальных HTML-файлов в Python предлагает широкий спектр возможностей для извлечения данных и манипулирования ими. Мы можем эффективно извлекать соответствующую информацию из файлов HTML, изменяя файл, удаляя элементы, печатая данные, используя рекурсивные дочерние генераторы и очищая веб-страницы от ссылок. Python использует мощные библиотеки, такие как BeautifulSoup и lxml, для навигации и управления структурами HTML. Теперь вы можете уверенно извлекать и использовать данные из файлов HTML в своих проектах Python, используя знания и примеры кода, приведенные в этой статье.

Статьи по данной тематике: