Мы просматриваем web-страницы в web-браузере, например, Google Chrome. Исходный текст страниц написан на языке гипертекстовой разметки HTML, Hypertext Markup Language. Его можно просмотреть, нажав в браузере сочетание клавиш Ctrl+U.
html-страницу можно загрузить, не открывая браузер. Будем использовать python и библиотеку urllib. Для загрузки страницы необходим ее адрес в интернете – URL (Uniform Resource Locator), единый указатель ресурса. Его мы сохраним в переменной URL.
Если объявленная переменная не изменяется на протяжении всей программы, она называется константой и ее название пишется заглавными буквами. Если бы адрес страницы менялся, переменную стоило написать строчными буквами.
import urllib.request
URL = "https://gvard.github.io/py/"
html_bytes = urllib.request.urlopen(URL)
Страница загрузится в виде последовательности байт. Мы можем разделить ее на отдельные строки, найти нужную последовательность байтов, перевести ее в строку:
html_byte_list = html_bytes.readlines()
title = html_byte_list[7].decode()
print(title)
# ' <title>Программирование на Python<title>\r\n'
Искать нужные данные в последовательности байт довольно утомительно. Для этого лучше использовать специальные библиотеки, например, Beautiful Soup. Установка библиотеки: в командной строке выполнить команду
pip install bs4
Программа с использованием Beautiful Soup ищет на странице параграфы с текстом и печатает первые три на экран:
import urllib.request
from bs4 import BeautifulSoup
# Адрес страницы в Википедии - константа:
URL = "https://en.wikipedia.org/wiki/Dinosaur"
# Открыть и прочитать исходный код страницы по адресу URL
html = urllib.request.urlopen(URL).read()
# Перевести скачанную страницу в виде байтовой строки (bytes) в объект BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
# Найти все параграфы - содержимое тегов p. ps - список.
ps = soup.findAll("p")
# Соединить текст первых трех (первые два часто пустые) параграфов статьи
text = ps[0].text + ps[1].text + ps[2].text
print(text)
Убираем из текста все ссылки:
while "[" in text:
br1 = s.find("[")
br2 = s.find("]") + 1
text = text[:br1] + text[br2:]
print(text)
Мы только что написали подпрограмму: законченный фрагмент кода, который может применяться для любого текста, содержащегося в переменной text.
Следующий шаг – составить реферат из текста нескольких статей Википедии. Тогда для каждой статьи можно будет повторить уже написанный код.
Возьмем адреса статей про внутренние планеты Солнечной системы и сохраним их список в переменной URLS:
URLS = [
"https://en.wikipedia.org/wiki/Mercury_(planet)",
"https://en.wikipedia.org/wiki/Venus",
"https://en.wikipedia.org/wiki/Earth",
"https://en.wikipedia.org/wiki/Mars"
]
С русским языком сложнее. Для обработки русских символов в URL будем использовать модуль urllib.parse
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
WIKI_URL = "https://ru.wikipedia.org/wiki/"
ASTEROIDS = ["Церера", "(2)_Паллада", "(3)_Юнона", "(4)_Веста"]
URLS = [WIKI_URL + urllib.parse.quote(name) for name in ASTEROIDS]
for url in URLS:
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, 'html.parser')
ps = soup.findAll("p")
text = ps[0].text
while "[" in text:
br1 = text.find("[")
br2 = text.find("]")
text = text[:br1] + text[br2+1:]
accent_ind = text.find("́")
text = text[:accent_ind] + text[accent_ind+1:]
print(text)
Посмотрите видео о том, как "написать" реферат при помощи Python: