Чувствуя отсутствие вдохновения и мотивации или просто хочу узнать что -то новое или здесь, чтобы получить удовольствие!
Что ж, в этом блоге я буду делиться сценарием, который я сделал на выходных, просто для удовольствия (и для побочного проекта 😉).
Что я здесь не буду обсуждать:
Что такое сеть?
Как использовать BeautifulSoup?
Как поцарапать? Что мы обсудим !!
TechStack
- Питон
- Beautifulsoup
Окончательный результат (перед погружением в шаги)
Мы будем сохранять все царапины в текстовом файле. Это выглядело бы примерно так
Давайте сделаем соскабливание
Проанализировать веб -сайт, чтобы очистить
Поскольку мы хотим соскрести вдохновляющие цитаты, мы собираемся получить это от Отличные компьютерные цитаты
Взгляд на веб -страницу
Теперь мы хотим, чтобы цитаты, такие как "Я не боюсь компьютеров. Я боюсь их отсутствия ". - Исаак Асимов
, Таким образом, сначала мы должны взглянуть на его исходную страницу и найти, где представлена эта цитата, чтобы получить шаблон (мы будем использовать этот шаблон позже, чтобы очистить эти кавычки).
Как мы можем видеть на источнике страницы, кавычки начинаются с
тег на линии 182
И есть несколько
Теги, которые содержат кавычки внутри теги. Если мы посмотрим дальше на страницу или просто
Ctrl+f
или Cmd+f
, мы находим, что комментарии также находятся внутри этих тегов.
Мы можем игнорировать эти комментарии и принимать только цитаты, присутствующие в
Теги без class = "Комментарийный список"
атрибут.
Следовательно, шаблон, который мы определили, 💡
- Все кавычки внутри
теги. - Есть комментарии внутри
тег тоже. - Мы можем игнорировать комментарии, используя
class = "Комментарийный список"
Атрибут
ярлык.
Импорт требуемые библиотеки и определение констант
Прежде чем выполнять задачу соскоба, нам нужно импортировать библиотеки и определить некоторые константы.
# Standard Imports import os from typing import List from urllib.request import Request, urlopen from bs4 import BeautifulSoup from bs4.element import Tag
Импорт ОС
Будет импортировать стандартную библиотеку Python, используемая для изготовления каталога и других материалов ОС.- Тогда мы импортируем
Список
отнабор
, явно Тип подсказка Некоторые аргументы переданы в некоторые функции. Запрос
иУрлопен
Из стандартной библиотекиурллиб
. Они помогут нам получить данные HTML, которые мы хотим.BeautifulSoup
Из сторонней библиотекиBS4
, это создает простой в управлении объектом BeautifulSoup, который представляет HTML -контент.Тег
отBS4.Element
, опять же, будет использоваться для подсказки типа.
QUOTES_FILENAME = "/quotes.txt" QUOTES_TXT_PATH = os.getcwd() + "/quotes" QUOTES_FILE_PATH = QUOTES_TXT_PATH + QUOTES_FILENAME QUOTES_URL = "http://www.devtopics.com/101-more-great-computer-quotes/"
QUITES_FILENAME
представляет имя файла текста, где будут храниться кавычки.QUOTES_TXT_PATH
Представляет папку, гдеQuotes.txt
будет проживать.QUOTES_FILE_PATH
Путь файла, который будет использоваться дальше для хранения данных.QUITES_URL
URL на веб -страницу Мы хотим поцарапать.
Создайте BeautifulSoup Object
Теперь у нас есть некоторые константы, с которыми мы будем играть, мы будем использовать QUITES_URL
Чтобы получить контент HTML на странице и создать объект BeautifulSoup, чтобы фильтровать наши цитаты.
def get_bs4_obj(url: str) -> BeautifulSoup: ''' Get BeautifulSoup object for given QUOTES_URL. ''' req = Request(url, headers={'User-Agent': 'Mozilla/5.0'}) html = urlopen(req).read() bs4Obj = BeautifulSoup(html, 'html.parser') return bs4Obj
Мы создаем функцию get_bs4_obj
это занимает URL
объект типа строки и возвращает требуемый объект BS4OBJ
.
Запрос
Помогает нам обойти безопасность, которая блокирует использованиеurllib
на основе пользовательского агента. Следовательно, нам нужно датьМозилла
или любой другой агент пользователя браузера, чтобы позволить нам получить доступ к их исходной странице.- Тогда мы делаем
Урлопен
с определенным пользовательским агентом вЗапрос
и прочитайте его контент. - Наконец мы создаем
BeautifulSoup
объект с использованиемhtml.parser
Проанализировать содержимое HTML и вернуть требуемый объект.
Возможно, что на веб -сайте есть законная причина, чтобы мы не имели доступа к своей странице, используя пользовательский агент по умолчанию (Urllib’s Python), но когда мы пытаемся проверить, можно ли соскрести, код состояния результата составляет 200. Следовательно, мы можем очистить сайт.
Шаги, которые я использовал, чтобы проверить, разрешено ли нам очистить сайт или нет
import requests #pip install requests req = requests.get(QUOTES_URL) print(req.status_code) #should be 200, other than 200 means scraping not/partially allowed
Фильтруя теги
С наличием BS4OBJ
, теперь можно отфильтровать HTML на
Теги, мы можем достичь этого, используя функцию ниже
def get_ol_tags(bs4Obj: BeautifulSoup) -> List[Tag]: ''' Get all ol tags from the bs4 obj. Note: It is the requirement for given QUOTES_URL, it shall be different for different URL to scrap. ''' allOL = bs4Obj.find_all('ol') allReleventOL = list(filter(lambda ol: ol.attrs.get('class')!=['commentlist'], allOL)) return allReleventOL
Посмотрите, как мы использовали Список
и Тег
для подсказки типа и BeautifulSoup
также. Типовые подсказки не являются обязательными и не проверены Python, они только для разработчиков и знают, что Python всегда будет динамически напечатан!
Аллол
Список содержит все
Теги доступны в HTML. Мы фильтруют их, используя встроенный Python фильтр
Функция при условии, что, если атрибут любого
тег имеет класс
эквивалентно 'CommentList'
Затем отфильтруйте их из Аллол
список.
Храните все соответствующие теги в переменной AllReleventol
и вернуть это (для использования другой функцией!)
Получите цитаты
Теперь мы создадим генератор Чтобы получить цитаты, которые нам нужно сохранить в текстовом файле. Мы будем использовать AllReleventol
переменная передана новой функции.
def get_all_quotes(oltags: List[Tag]): ''' Yield all qoutes present in OL tags. ''' for ol in oltags: yield ol.find('li').get_text()
Это самостоятельно, здесь мы извлекаем текст, присутствующий в ярлык.
Мы будем использовать этот генератор в следующем разделе, внутри другой функции.
Сохранить кавычки
Вот функция!
def save_qoutes(oltags: List[Tag]): ''' Save extracted qoutes in a text file, create a new folder if not already present ''' global QUOTES_TXT_PATH, QUOTES_FILE_PATH if not os.path.exists(QUOTES_TXT_PATH): os.mkdir(QUOTES_TXT_PATH) with open(QUOTES_FILE_PATH, 'w') as file: for txt in get_all_quotes(oltags): file.write(txt) print(f'All Quotes written to file: {QUOTES_FILE_PATH}')
Мы принимаем глобальные константы QUOTES_TXT_PATH
и QUOTES_FILE_PATH
использоваться во время записи в файл. Мы проверяем, существует ли каталог или нет (папка, где мы сохраним наш файл). Затем мы открываем файл в созданном каталоге (если не существует).
Теперь здесь приходит использование генератора, мы называем генератор по каждому
тег, который дает текст теги. Что -то здесь подозрительное? Да, ты правильно понял, мы используем
ol.find ('li')
это должно вернуться первым тег, но почему все
Теги возвращаются? Потому что это ошибка в файле HTML!
<Эм > – Исаак Асимов
Здесь нет Теги, чтобы отметить его конец !! Следовательно, это берет начало
и отмечает конец всякий раз, когда он сталкивается с
тег, который происходит до
тег 😄
Главный
Теперь скрипт для выполнения кода
if __name__ == "__main__": bs4Obj = get_bs4_obj(QUOTES_URL) olTags = get_ol_tags(bs4Obj) save_qoutes(olTags)
Если вы проверяете сейчас, кавычки должны появляться в созданном файле Quotes.txt
Внутри папки /цитаты
.
Ну, это было так, если вы следовали за этим, то теперь вы знаете суть общего процесса для соскобки веб -сайта и как соскребить вдохновляющие цитаты!
Это была просто капля в океане, полном различных функциональных возможностей, которые вы можете достичь с помощью сети, но общая идея остается прежней:
- Получите веб -сайт, который мы хотим очистить.
- Проанализируйте необходимые компоненты, которые нам нужны, и найти шаблон.
- Создайте объект BeautifulSoup, чтобы облегчить процесс и получить доступ к HTML без особых проблем.
- Создайте небольшие функции, чтобы выполнить задачу.
- Наконец -то интегрируйте все функции и увидите магию сценария!
Полный сценарий Python можно найти Здесь Анкет
GitHub действие где используется этот сценарий. Хотелось бы услышать ваши отзывы по этому поводу.
Только начинаете вам путешествие с открытым исходным кодом? Не забудьте проверить Привет, открыть Источник
Хотите сделать простую и потрясающую игру с нуля? Проверьте Понгпонг
До следующего раза !
Намасте 🙏
Оригинал: “https://dev.to/siddharth2016/scraping-web-inspiring-quotes-3che”