Веб-парсинг Python - извлечение данных

Анализировать веб-страницу означает понимать ее структуру. Теперь возникает вопрос, почему это важно для парсинга веб-страниц? В этой главе давайте разберемся в этом подробнее.

Анализ веб-страницы

Анализ веб-страницы важен, потому что без анализа мы не можем знать, в какой форме мы собираемся получать данные (структурированные или неструктурированные) с этой веб-страницы после извлечения. Мы можем проводить анализ веб-страниц следующими способами:

Просмотр источника страницы

Это способ понять, как устроена веб-страница, изучив ее исходный код. Чтобы реализовать это, нам нужно щелкнуть страницу правой кнопкой мыши, а затем выбратьView page sourceвариант. Затем мы получим интересующие нас данные с этой веб-страницы в форме HTML. Но главное беспокойство вызывают пробелы и форматирование, которое нам сложно форматировать.

Проверка источника страницы с помощью параметра «Проверить элемент»

Это еще один способ анализа веб-страницы. Но разница в том, что это решит проблему форматирования и пробелов в исходном коде веб-страницы. Вы можете реализовать это, щелкнув правой кнопкой мыши и выбравInspect или же Inspect elementвариант из меню. Он предоставит информацию о конкретной области или элементе этой веб-страницы.

Различные способы извлечения данных с веб-страницы

Следующие методы в основном используются для извлечения данных с веб-страницы:

Регулярное выражение

Это узкоспециализированный язык программирования, встроенный в Python. Мы можем использовать это черезreмодуль Python. Его также называют RE или регулярными выражениями или шаблонами регулярных выражений. С помощью регулярных выражений мы можем указать некоторые правила для возможного набора строк, которым мы хотим сопоставить данные.

Если вы хотите узнать больше о регулярных выражениях в целом, перейдите по ссылке https://www.tutorialspoint.com/automata_theory/regular_expressions.htmа если вы хотите узнать больше о модуле re или регулярном выражении в Python, вы можете перейти по ссылке https://www.tutorialspoint.com/python/python_reg_expressions.htm .

пример

В следующем примере мы собираемся извлечь данные об Индии из http://example.webscraping.com после сопоставления содержимого <td> с помощью регулярного выражения.

import re
import urllib.request
response =
   urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)

Вывод

Соответствующий вывод будет таким, как показано здесь -

[
   '<img src="/places/static/images/flags/in.png" />',
   '3,287,590 square kilometres',
   '1,173,108,018',
   'IN',
   'India',
   'New Delhi',
   '<a href="/places/default/continent/AS">AS</a>',
   '.in',
   'INR',
   'Rupee',
   '91',
   '######',
   '^(\\d{6})$',
   'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',
   '<div>
      <a href="/places/default/iso/CN">CN </a>
      <a href="/places/default/iso/NP">NP </a>
      <a href="/places/default/iso/MM">MM </a>
      <a href="/places/default/iso/BT">BT </a>
      <a href="/places/default/iso/PK">PK </a>
      <a href="/places/default/iso/BD">BD </a>
   </div>'
]

Обратите внимание, что в приведенном выше выводе вы можете увидеть подробную информацию о стране Индия, используя регулярное выражение.

Красивый суп

Предположим, мы хотим собрать все гиперссылки с веб-страницы, тогда мы можем использовать парсер под названием BeautifulSoup, который можно узнать более подробно на https://www.crummy.com/software/BeautifulSoup/bs4/doc/.Проще говоря, BeautifulSoup - это библиотека Python для извлечения данных из файлов HTML и XML. Его можно использовать с запросами, потому что ему нужны входные данные (документ или URL-адрес) для создания объекта супа, поскольку он не может получить веб-страницу самостоятельно. Вы можете использовать следующий скрипт Python для сбора заголовка веб-страницы и гиперссылок.

Установка Beautiful Soup

Используя pip команда, мы можем установить beautifulsoup либо в нашей виртуальной среде, либо в глобальной установке.

(base) D:\ProgramData>pip install bs4
Collecting bs4
   Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages
(from bs4) (4.6.0)
Building wheels for collected packages: bs4
   Running setup.py bdist_wheel for bs4 ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

пример

Обратите внимание, что в этом примере мы расширяем приведенный выше пример, реализованный с помощью модуля python запросов. мы используемr.text для создания объекта супа, который в дальнейшем будет использоваться для получения таких деталей, как заголовок веб-страницы.

Во-первых, нам нужно импортировать необходимые модули Python -

import requests
from bs4 import BeautifulSoup

В этой следующей строке кода мы используем запросы для создания HTTP-запросов GET для URL-адреса: https://authoraditiagarwal.com/ сделав запрос GET.

r = requests.get('https://authoraditiagarwal.com/')

Теперь нам нужно создать объект Soup следующим образом:

soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)

Вывод

Соответствующий вывод будет таким, как показано здесь -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

Lxml

Еще одна библиотека Python, которую мы собираемся обсудить для веб-парсинга, - это lxml. Это высокопроизводительная библиотека синтаксического анализа HTML и XML. Это сравнительно быстро и просто. Вы можете прочитать об этом подробнее наhttps://lxml.de/.

Установка lxml

Используя команду pip, мы можем установить lxml либо в нашей виртуальной среде, либо в глобальной установке.

(base) D:\ProgramData>pip install lxml
Collecting lxml
   Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5

Пример: извлечение данных с использованием lxml и запросов

В следующем примере мы очищаем определенный элемент веб-страницы от authoraditiagarwal.com с помощью lxml и запросов -

Во-первых, нам нужно импортировать запросы и html из библиотеки lxml следующим образом:

import requests
from lxml import html

Теперь нам нужно указать URL-адрес веб-страницы, которую нужно удалить.

url = 'https://authoraditiagarwal.com/leadershipmanagement/'

Теперь нам нужно указать путь (Xpath) к конкретному элементу этой веб-страницы -

path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_code = html.fromstring(byte_string)
tree = source_code.xpath(path)
print(tree[0].text_content())

Вывод

Соответствующий вывод будет таким, как показано здесь -

The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical 
axis represents the hours remaining to complete the committed work.