Рубрики
Без рубрики

Скрепирование сети – вдохновляющие цитаты

Чувствуя отсутствие вдохновения и мотивации или просто хочу узнать что -то новое или здесь для некоторого F … с меткой Python, Github, OpenSource, WebScraping.

Чувствуя отсутствие вдохновения и мотивации или просто хочу узнать что -то новое или здесь, чтобы получить удовольствие!

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

Что я здесь не буду обсуждать:

Что такое сеть?

Как использовать BeautifulSoup?

Как поцарапать? Что мы обсудим !!

TechStack

  • Питон
  • Beautifulsoup

Окончательный результат (перед погружением в шаги)

Мы будем сохранять все царапины в текстовом файле. Это выглядело бы примерно так

Давайте сделаем соскабливание

Проанализировать веб -сайт, чтобы очистить

Поскольку мы хотим соскрести вдохновляющие цитаты, мы собираемся получить это от Отличные компьютерные цитаты

Взгляд на веб -страницу

Теперь мы хотим, чтобы цитаты, такие как "Я не боюсь компьютеров. Я боюсь их отсутствия ". - Исаак Асимов , Таким образом, сначала мы должны взглянуть на его исходную страницу и найти, где представлена эта цитата, чтобы получить шаблон (мы будем использовать этот шаблон позже, чтобы очистить эти кавычки).

Как мы можем видеть на источнике страницы, кавычки начинаются с

    тег на линии 182 И есть несколько
      Теги, которые содержат кавычки внутри
    1. теги. Если мы посмотрим дальше на страницу или просто Ctrl+f или Cmd+f
        , мы находим, что комментарии также находятся внутри этих тегов.

        Мы можем игнорировать эти комментарии и принимать только цитаты, присутствующие в

          Теги без class = "Комментарийный список" атрибут.

          Следовательно, шаблон, который мы определили, 💡

          • Все кавычки внутри
              теги.
            1. Есть комментарии внутри
                тег тоже.
              1. Мы можем игнорировать комментарии, используя 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()
                      

                      Это самостоятельно, здесь мы извлекаем текст, присутствующий в

                    1. ярлык.

                      Мы будем использовать этот генератор в следующем разделе, внутри другой функции.

                      Сохранить кавычки

                      Вот функция!

                      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 использоваться во время записи в файл. Мы проверяем, существует ли каталог или нет (папка, где мы сохраним наш файл). Затем мы открываем файл в созданном каталоге (если не существует).

                      Теперь здесь приходит использование генератора, мы называем генератор по каждому

                        тег, который дает текст
                      1. теги. Что -то здесь подозрительное? Да, ты правильно понял, мы используем ol.find ('li') это должно вернуться первым
                      2. тег, но почему все
                      3. Теги возвращаются? Потому что это ошибка в файле HTML!

                      4. “Я не боюсь компьютеров. Я боюсь их отсутствия. “
                        <Эм > – Исаак Асимов
                      5. Здесь нет Теги, чтобы отметить его конец !! Следовательно, это берет начало

                      6. и отмечает конец всякий раз, когда он сталкивается с тег, который происходит до тег 😄

                        Главный

                        Теперь скрипт для выполнения кода

                        if __name__ == "__main__":
                            bs4Obj = get_bs4_obj(QUOTES_URL)
                            olTags = get_ol_tags(bs4Obj)
                            save_qoutes(olTags)
                        

                        Если вы проверяете сейчас, кавычки должны появляться в созданном файле Quotes.txt Внутри папки /цитаты .

                        Ну, это было так, если вы следовали за этим, то теперь вы знаете суть общего процесса для соскобки веб -сайта и как соскребить вдохновляющие цитаты!

                        Это была просто капля в океане, полном различных функциональных возможностей, которые вы можете достичь с помощью сети, но общая идея остается прежней:

                        1. Получите веб -сайт, который мы хотим очистить.
                        2. Проанализируйте необходимые компоненты, которые нам нужны, и найти шаблон.
                        3. Создайте объект BeautifulSoup, чтобы облегчить процесс и получить доступ к HTML без особых проблем.
                        4. Создайте небольшие функции, чтобы выполнить задачу.
                        5. Наконец -то интегрируйте все функции и увидите магию сценария!

                        Полный сценарий Python можно найти Здесь Анкет

                        GitHub действие где используется этот сценарий. Хотелось бы услышать ваши отзывы по этому поводу.

                        Только начинаете вам путешествие с открытым исходным кодом? Не забудьте проверить Привет, открыть Источник

                        Хотите сделать простую и потрясающую игру с нуля? Проверьте Понгпонг

                        До следующего раза !

                        Намасте 🙏

                        Оригинал: “https://dev.to/siddharth2016/scraping-web-inspiring-quotes-3che”