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

Scraping Web – потрясающие факты

Хотите несколько удивительных фактов, чтобы начать свой день или просто хотите узнать что-то новое или здесь для некоторых … Помечено Python, Github, Opensource, Django.

Хотите несколько потрясающих фактов, чтобы начать свой день или просто хотите узнать что-то новое или здесь для некоторого удовольствия!

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

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

Что такое веб-соскреб?

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

Как ломаться? Что мы обсудим !!

TechStack.

  • Питон
  • BeautifulSoup

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

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

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

Проанализируйте сайт для Scrape

Как мы хотим соскребать потрясающие факты, мы собираемся получить это от Компьютерные факты

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

Теперь мы хотим факты, как 1 Первый электронный компьютер Eniac весил более 27 тонн и занял 1800 квадратных футов. Поэтому мы должны сначала взглянуть на его исходную страницу и найти, где этот присутствует, чтобы получить шаблон (мы будем использовать этот шаблон позже, чтобы соскрести эти цитаты).

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

Тег на линии 475 И есть несколько

Теги, которые содержат эти факты. Если мы смотрим дальше, мы обнаружили, что есть много

Теги используются в HTML. Как бы мы дифференцируем наши факты с другими

Теги?

Если ты выглядишь усердно, тогда вы знаете! Существует уникальный дескриптор, в котором присутствуют факты, каждый факт предшествует с номером (0-9), а затем (.) И пространство. Следовательно, у нас есть наш шаблон 😀

Мы можем игнорировать все остальные

Теги и принимайте только, что соответствует определенному образцу, которое мы определили. Чтобы соответствовать шаблону, мы будем использовать модуль Regex of Python, Re Отказ

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

  • Все факты внутри

    Теги.
  • Есть и другое содержимое внутри

    Теги тоже.
  • Чтобы получить факты, мы будем использовать Regex для извлечения необходимого контента, оставляя другие

    Теги как это так!

Импортные необходимые библиотеки и определенные константы

Прежде чем выполнить задачу соскабливания, нам нужно импортировать библиотеки и определить некоторые константы.

# Standard Imports

import os
import re
from typing import List
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
from bs4.element import Tag
  • Импорт ОС Будет импортировать стандартную библиотеку Python, используемую для создания каталогов и других материалов ОС.
  • Re будет использоваться для извлечения узора с использованием некоторого регеляции.
  • Тогда мы импортируем Список от Набрав , явно Тип намека Некоторые аргументы передали некоторые функции.
  • Запрос и Urlopen Из стандартной библиотеки урлыб . Они помогут нам получить данные HTML, которые мы хотим.
  • Beautifulsoup от сторонней библиотеки BS4 Это создает легко управлять объектом BeautifulSoup, который представляет содержимое HTML.
  • Тег от BS4.Element , опять же, чтобы использоваться для подсказки к типу.
QUOTES_FILENAME = "/funfacts.txt"
QUOTES_TXT_PATH = os.getcwd() + "/funfacts"
QUOTES_FILE_PATH = QUOTES_TXT_PATH + QUOTES_FILENAME
QUOTES_URL = "https://gotechug.com/interesting-facts-about-computers-you-didnt-know/"
  • Quotes_filename Представляет имя файла текстового файла, где будут сохранены факты.
  • Quotes_txt_path представляет папку, где funfacts.txt будет проживать.
  • Quotes_file_Path Путь файла, который будет использоваться дополнительно для хранения данных.
  • Quotes_url URL к веб-странице мы хотим царапать.

Зачем назвать переменные как Цитаты ? У меня был еще один скрипт, чтобы соскрести несколько великолепных цитат и повторно использовали то же самое для соскабливания потрясающих фактов. Необходимо узнать больше о скорбящих цитатах? Посетить Это связь.

Создать объект BowowsSouous

Теперь у нас есть несколько постоянных для игры, мы будем использовать Quotes_url Чтобы получить HTML страницы и создать объект BoysureSoup для фильтрации наших фактов.

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. .

  • Запрос помогает нам обойти безопасность, которая блокирует использование Урлыб на основе пользовательского агента. Следовательно, нам нужно дать Mozilla Или любой другой пользовательский агент браузера для доступа к их исходной странице.
  • Тогда мы делаем Urlopen с определенным пользователем агентом в Запрос и прочитайте это содержание.
  • Наконец мы создаем Beautifulsoup Объект, использующий HTML.Parser Чтобы разбирать содержимое HTML и вернуть необходимый объект.

Шаги, которые я использовал, чтобы проверить, разрешено ли нам ускорить сайт или нет

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 filter_p_tags(ptag: Tag) -> bool:
    '''
    Get required p tags only.
    '''
    return re.match(r"[0-9]+.", ptag.get_text())


def get_p_tags(bs4Obj: BeautifulSoup) -> List[Tag]:
    '''
    Get all p tags from the BeautifulSoup obj.
    Note: It is the requirement for given QUOTES_URL, it shall be different for different URL to scrap.
    '''
    allP = bs4Obj.find_all('p')
    allReleventP = list(filter(filter_p_tags, allP))
    return allReleventP

Посмотрите, как мы использовали Список и Тег для типа подсказки и Beautifulsoup также. Тип подсказки не являются обязательными и не проверяются Python, это только для разработчиков и знают, что Python всегда будет динамически набран!

ALLP Список содержит все

Теги доступны в HTML. Мы фильтруем их с помощью встроенного Python Фильтр Функция на том состоянии, если, если текст любого

Теги не имеют сопоставления образец Regex [0-9]+. Затем отфильтруйте их из ALLP список.

Образец сопоставления Regex, мы определяем это в функции filter_p_tags , где мы используем Re.match Чтобы соответствовать нашему рисунку в данном тексте. Вы можете сделать это в get_p_tags Сама, но я думаю, что лучше иметь такую задачу в чистых функциях вместо того, чтобы сделать их в одной функции.

Храните все релевантные теги в переменной AllReleventp и верните это (для использования другой функцией!)

Получить факты

Теперь мы создадим Генератор Чтобы дать факты, которые нам нужно сохранить в текстовом файле. Мы будем использовать AllReleventp Переменная передана на новую функцию.

def get_all_facts(ptags: List[Tag]):
    '''
    Yield all facts present in p tags.
    '''
    for p in ptags:
        fact = re.sub(r"[0-9]+\. ", "", p.get_text())
        yield fact + "\n"

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

ярлык. Но ждать !! Нам не нужно предыдущий номер, верно? Вот почему мы используем Re.sub заменить его пустой строкой. Regex Мы использовали "[0-9] + \." , это займет любой номер, а затем Отказ и пространство.

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

Сохранить факты

Вот функция

def save_fun_facts(ptags: List[Tag]):
    '''
    Save extracted facts 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_facts(ptags):
            file.write(txt)

    print(f'All Fun Facts written to file: {QUOTES_FILE_PATH}')

Мы принимаем глобальные константы Quotes_txt_path и Quotes_file_Path использоваться для записи в файл. Мы проверяем, существует ли каталог или нет (папка, в которой мы сохраним наш файл). Затем мы открываем файл в созданном каталоге (если он не существует).

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

Тег, который дает текст, представленный в нем.

Основной

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

if __name__ == "__main__":
    bs4Obj = get_bs4_obj(QUOTES_URL)
    allP = get_p_tags(bs4Obj)
    save_fun_facts(allP)

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

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

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

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

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

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

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

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

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

Намасте 🙏.

Оригинал: “https://dev.to/siddharth2016/scraping-web-awesome-facts-53ii”