Как утащить что угодно с любого сайта

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Например, заголовки или содержимое статьи.

Сегодняшний проект послужит основой многих наших дальнейших программ. Мы научимся собирать с сайтов любые данные, которые нам нужны.

У нас есть рабочий проект на цепях Маркова. Цепи Маркова — это несложный алгоритм, который анализирует сочетаемость слов в заданном тексте и выдаёт новый текст на основе старого. Похоже на работу нейронок, но на самом деле это просто перебор слов и бессмысленное их сочетание.

Для работы наших первых проектов на цепях Маркова мы скачали книгу с рассказами Чехова. Программа анализирует сочетаемость чеховских слов и выдаёт текст в чеховском духе (хотя и бессмысленный).

Но что, если мы хотим сделать текст не в духе Чехова, а в духе журнала «Код»? Или в духе какого-нибудь издания-иноагента? Или сделать генератор статей в духе какого-нибудь блогера?

Решение — написать программу, которая посмотрит на сайте наши статьи и вытащит оттуда весь значимый текст. Единственное, что для этого понадобится, — список ссылок на статьи, но мы их уже собрали, когда делали проект с гаданием на статьях Кода.

Логика работы

Программа будет работать на Python на локальной машине. Алгоритм:

  1. Подключаем нужные библиотеки.
  2. Готовим переменную со списком сайтов для обхода.
  3. Заходим на первый сайт и получаем оттуда исходный код.
  4. Указываем, откуда брать текст.
  5. Сохраняем найденный текст в отдельном файле.
  6. Повторяем цикл до тех пор, пока не пройдём все страницы из списка.

? Главное в таких проектах — знать структуру содержимого страницы и понимать, где именно и в каких тегах находятся нужные для вас данные.

Чтобы было проще, на старте сделаем программу, которая собирает названия страниц. Как освоимся — сделаем что посложнее.

Изучаем исходный код страницы

Прежде чем заниматься парсингом (сбором) со страницы чего угодно, нужно выяснить, где это лежит и в какой кодировке. Мы знаем, что все статьи Кода созданы по одному и тому же шаблону, поэтому нам достаточно посмотреть, как устроена одна, чтобы понять их все.

Смотрим исходный код любой нашей статьи. Нас интересуют два момента — кодировка страницы и тег <title>. Нам нужно убедиться, что в этом теге прописано название.

Сначала кодировка:

Эта строчка означает, что страница работает с кодировкой UTF-8. Запомним это.

Теперь пролистываем исходный код ниже и находим тег <title> — именно он отвечает за заголовок страницы. Убеждаемся, что он есть и с ним всё в порядке:

Библиотеки для работы

В проекте нам понадобятся две библиотеки: urllib и BeautifulSoup.

Первая отвечает за доступ к страницам по их адресу, причём оттуда нам будет нужна только одна команда urlopen().read — она отправляется по указанному адресу и получает весь исходный код страницы.

Вторая библиотека входит в состав большой библиотеки bs4 — в ней уже собраны все команды для парсинга исходного HTML-кода и разбора тегов. Чтобы установить bs4, запускаем терминал и пишем:

pip3 install bs4

Пишем код

Сначала подключим все нужные библиотеки:

# подключаем urlopen из модуля urllib
from urllib.request import urlopen
# подключаем библиотеку BeautifulSoup
from bs4 import BeautifulSoup

Теперь объявим список страниц, которые нужно посетить и забрать оттуда заголовки. Мы уже составили такой список для проекта с гаданием на статьях Кода, поэтому просто возьмём его оттуда и адаптируем под Python:

url = [
"https://thecode.media/is-not-defined-jquery/",
"https://thecode.media/arduino-projects-2/",
"https://thecode.media/10-raspberry/",
"https://thecode.media/easy-css/",
"https://thecode.media/to-be-front/",
"https://thecode.media/cryptex/",
"https://thecode.media/ali-coders/",
"https://thecode.media/po-glandy/",
"https://thecode.media/rgb/",
"https://thecode.media/10-go/",
"https://thecode.media/coffee/",
]

Теперь перебираем все элементы этого массива в цикле, используя всю мощь библиотек. Обратите внимание на строчку, где мы получаем исходный код страницы — мы сразу конвертируем его в нужную кодировку, которую выяснили на предыдущем этапе:

# открываем текстовый файл, куда будем добавлять заголовки file = open("zag.txt", "a")  # перебираем все адреса из списка for x in url:     # получаем исходный код очередной страницы из списка     html_code = str(urlopen(x).read(),'utf-8')     # отправляем исходный код страницы на обработку в библиотеку     soup = BeautifulSoup(html_code, "html.parser")      # находим название страницы с помощью метода find()     s = soup.find('title').text      # выводим его на экран     print(s)      # сохраняем заголовок в файле и переносим курсор на новую строку     file.write(s + '
')  # закрываем файл file.close()
Python

Запускаем и смотрим на результат:

Итоговый код

# подключаем urlopen из модуля urllib from urllib.request import urlopen  # подключаем библиотеку BeautifulSout from bs4 import BeautifulSoup  url = [ "https://thecode.media/is-not-defined-jquery/", "https://thecode.media/arduino-projects-2/", "https://thecode.media/10-raspberry/", "https://thecode.media/easy-css/", "https://thecode.media/to-be-front/", "https://thecode.media/cryptex/", "https://thecode.media/ali-coders/", "https://thecode.media/po-glandy/", "https://thecode.media/megaexcel/", "https://thecode.media/coffee/", ]  # открываем текстовый файл, куда будем добавлять заголовки file = open("zag.txt", "a")  # перебираем все адреса из списка for x in url:     # получаем исходный код очередной страницы из списка     html_code = str(urlopen(x).read(),'utf-8')     # отправляем исходный код страницы на обработку в библиотеку     soup = BeautifulSoup(html_code, "html.parser")      # находим название страницы с помощью метода find()     s = soup.find('title').text      # выводим его на экран     print(s)      # сохраняем заголовок в файле и переносим курсор на новую строку     file.write(s + '. ')  # закрываем файл file.close()
Python

Что дальше

А дальше логичное продолжение — программа на цепях Маркова, которая будет генерировать заголовки для статей Кода на основе наших старых заголовков.

Подписывайтесь на нашу группу, чтобы не пропустить новые проекты.


Источник: m.vk.com

Комментарии: