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

Web Scraping Python Tutorial – Как царапать данные с сайта

Руководство по веб-консультару с использованием классов Codedamn. Теги с Python, начинающими, производительностью.

Python – это красивый язык для кодирования. Он имеет отличную упаковку экосистемы, есть гораздо меньше шума, чем на других языках, и он очень прост в использовании.

Python используется для ряда вещей, от анализа данных на серверное программирование. И один захватывающий использование питона является веб-соскоб.

В этой статье мы рассмотрим, как использовать Python для Scraping. Мы также будем работать через полную практику в классе, поскольку мы продолжаем.

ПРИМЕЧАНИЕ. Мы будем соскабливать веб-страницу, которую я размещаю, поэтому мы можем смело выучить соскоб на нем. Многие компании не позволяют соскабливать свои сайты, так что это хороший способ учиться. Просто обязательно проверьте, прежде чем царапать.

Если вы хотите сдать код, вы можете использовать этот Бесплатный класс CodedAmn Это состоит из нескольких лабораторий, чтобы помочь вам изучить веб-соскабливание. Это станет практичным практическим упражнением обучения на CodeDamn, похоже на то, как вы узнаете на FreeCodeCamp.

В этом классе вы будете использовать эту страницу, чтобы проверить Scraping Web: https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/

Этот класс состоит из 7 лабораторий, и вы решите лабораторию в каждой части этого блога. Мы будем использовать Python 3.8 + BeautifulSoup 4 для веб-соскабливания.

Это Ссылка на эту лабораторию Отказ

Модуль запросов позволяет отправлять HTTP-запросы с помощью Python.

HTTP-запрос возвращает объект ответа со всеми данными ответа (контент, кодирование, статус и т. Д.). Один пример получения HTML страницы:

import requests

res = requests.get('https://codedamn.com')

print(res.text)
print(res.status_code)

Прохождение требований:

  • Получите содержимое следующего URL-адреса, используя модуль запросов: https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/
  • Храните текстовый ответ (как показано выше) в переменной под названием TXT
  • Храните код состояния (как показано выше) в переменной с именем состояния
  • Печать TXT и статус с использованием функции печати
  • Как только вы понимаете, что происходит в коде выше, это довольно просто пройти эту лабораторию. Вот решение этой лаборатории:
import requests

# Make a request to https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/
# Store the result in 'res' variable
res = requests.get(
    'https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/')
txt = res.text
status = res.status_code

print(txt, status)
# print the result

Давайте перейдем к части 2 теперь, когда вы построите больше на вершине своего существующего кода.

Часть 2: Извлечение названия с BawySoup

Это Ссылка на эту лабораторию Отказ

В этом классе вы будете использовать библиотеку под названием BeautifulSoup в Python, чтобы сделать веб-соскабливание. Некоторые функции, которые делают Beautifulsoup мощным решением:

Он обеспечивает много простых методов и идиомы Pythonic для навигации, поиска и изменение дерева DOM. Не требует большого количества кода для записи приложений Красивый суп на вершине популярных парсеров Python, как LXML и HTML5Lib, позволяя вам попробовать различные стратегии анализа или скорость торговли для гибкости. В основном, CountrySououp может проанализировать что-нибудь в Интернете, которую вы его даете.

Вот простой пример BeautifulSoup:

from bs4 import BeautifulSoup

page = requests.get("https://codedamn.com")
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.title.text # gets you the text of the (...)

Прохождение требований:

Глядя на пример выше, вы можете видеть, как только мы кормим страницу. Должёт ли внутри BeautifulSoup, вы можете начать работать с парсным деревом DOM очень питон. Решение для лаборатории было бы:

import requests
from bs4 import BeautifulSoup

# Make a request to https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Extract title of page
page_title = soup.title.text

# print the result
print(page_title)

Это была также простая лаборатория, где мы должны были изменить URL-адрес и распечатать название страницы. Этот код пройдет лабораторию.

Часть 3: суп-эд корпус и голова

Это Ссылка на эту лабораторию Отказ

В последней лаборатории вы видели, как вы можете извлечь название со страницы. Это одинаково легко извлечь определенные разделы тоже.

Вы также видели, что вам нужно позвонить .Text на них, чтобы получить строку, но вы можете распечатать их без вызова .Text тоже, и это даст вам полную разметку. Попробуйте запустить пример ниже:

import requests
from bs4 import BeautifulSoup

# Make a request
page = requests.get(
    "https://codedamn.com")
soup = BeautifulSoup(page.content, 'html.parser')

# Extract title of page
page_title = soup.title.text

# Extract body of page
page_body = soup.body

# Extract head of page
page_head = soup.head

# print the result
print(page_body, page_head)

Давайте посмотрим, как вы можете извлечь тело и разделы головы с ваших страниц.

Прохождение требований:

  • Повторите эксперимент с URL: https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/
  • Хранить заголовок страницы (без вызова .text) URL в странице_title
  • Хранить содержание тела (без вызова .Text) URL в странице_body
  • Хранить головной контент (без вызова .Text) URL на странице_head

Когда вы пытаетесь распечатать Page_body или Страница_head Вы увидите, что те, которые напечатаны как строки. Но на самом деле, когда ты Печать (Тип страницы_Бой) Вы увидите, что это не строка, но работает нормально.

Решение этого примера будет просто, основано на коде выше:

import requests
from bs4 import BeautifulSoup

# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Extract title of page
page_title = soup.title

# Extract body of page
page_body = soup.body

# Extract head of page
page_head = soup.head

# print the result
print(page_title, page_head)

Часть 4: Выберите с BaintheSoup

Это Ссылка на эту лабораторию Отказ

Теперь, когда вы изучили некоторые части Beautifulsoup, давайте посмотрим, как вы можете выбрать элементы DOM с помощью методов BeautifulSoup.

Как только у вас есть переменная супа (например, предыдущие лаборатории), вы можете работать с .Выберите На этом который является селектором CSS внутри BeautifulSoup. То есть вы можете достичь по дереву DOM, так как вы выберете элементы с CSS. Давайте посмотрим на пример:

import requests
from bs4 import BeautifulSoup

# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Extract first 

(...)

text first_h1 = soup.select('h1')[0].text

.Выберите Возвращает список всех элементов Python. Вот почему вы выбрали только первый элемент здесь с [0] показатель.

Прохождение требований:

  • Создать переменную all_h1_tags Отказ Установите его в пустой список.
  • Используйте .Выберите, чтобы выбрать все теги H1 и хранить текст этих H1 в списке ALL_H1_TAGS.
  • Создайте переменную SEVTHENT_P_TEXT и храните текст 7-го элемента P (индекс 6) внутри. Решение этой лаборатории:
import requests
from bs4 import BeautifulSoup
# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Create all_h1_tags as empty list
all_h1_tags = []

# Set all_h1_tags to all h1 tags of the soup
for element in soup.select('h1'):
    all_h1_tags.append(element.text)

# Create seventh_p_text and set it to 7th p element text of the page
seventh_p_text = soup.select('p')[6].text

print(all_h1_tags, seventh_p_text)

Давайте продолжим.

Часть 5: Лучшие предметы соскобы прямо сейчас

Это Ссылка на эту лабораторию Отказ

Давайте пойдем вперед и извлечь верхние предметы, соскобы из URL: https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/

Если вы откроете эту страницу на новой вкладке, вы увидите несколько лучших предметов. В этой лаборатории ваша задача – соскрести их имена и хранить их в списке под названием top_items. . Вы также выделите обзоры для этих предметов.

Чтобы пройти этот вызов, позаботьтесь о следующих вещах:

  • Использовать .Выберите извлечь названия. (Подсказка: один селектор для названий продукта может быть a.title Несомненно
  • Использовать .Выберите Чтобы извлечь метку счетчика обзора для этих названий продукта. (Подсказка: один селектор для обзоров может быть div.ratings ) ПРИМЕЧАНИЕ. Это полная метка (I.E. 2 Отзывы ) И не просто номер.

  • Создайте новый словарь в формате:

info = {
   "title": 'Asus AsusPro Adv...   '.strip(),
   "review": '2 reviews\n\n\n'.strip()
}
  • Обратите внимание, что вы используете метод полоски для удаления любых дополнительных новостей/пробелов, которые вы можете иметь в выходе. Это важно пройти эту лабораторию.
  • Добавьте этот словарь в списке под названием top_items.
  • Распечатайте этот список в конце

Есть довольно несколько задач, которые будут выполнены в этой задаче. Давайте сначала посмотрим на решение и понять, что происходит:

import requests
from bs4 import BeautifulSoup
# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Create top_items as empty list
top_items = []

# Extract and store in top_items according to instructions on the left
products = soup.select('div.thumbnail')
for elem in products:
    title = elem.select('h4 > a.title')[0].text
    review_label = elem.select('div.ratings')[0].text
    info = {
        "title": title.strip(),
        "review": review_label.strip()
    }
    top_items.append(info)

print(top_items)

Обратите внимание, что это только одно из решений. Вы можете попробовать это по-другому. В этом решении:

  • Прежде всего, вы выбираете все элементы Div.thumbnail, которые дают вам список отдельных продуктов
  • Тогда вы переживаете их
  • Поскольку SELECT позволяет вам цепотать само по себе, вы можете использовать SELECT еще раз, чтобы получить заголовок.
  • Обратите внимание, что потому, что вы работаете внутри петли для Div.thumbnail Уже H4> A.Title Селектор даст вам только один результат внутри списка. Вы выбираете этот список 0-й Элемент и извлечь текст. Наконец, вы разбиваете любое дополнительное пробелование и добавьте его в свой список. Простое правильно?

Часть 6: Извлечение ссылок

Это Ссылка на эту лабораторию Отказ

До сих пор вы видели, как вы можете извлечь текст или достаточно Innertext элементов. Давайте теперь посмотрим, как вы можете извлечь атрибуты, извлекая ссылки со страницы.

Вот пример того, как извлечь всю информацию о изображении со страницы:

import requests
from bs4 import BeautifulSoup
# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Create top_items as empty list
image_data = []

# Extract and store in top_items according to instructions on the left
images = soup.select('img')
for image in images:
    src = image.get('src')
    alt = image.get('alt')
    image_data.append({"src": src, "alt": alt})

print(image_data)

В этой лаборатории ваша задача – извлечь href Атрибут ссылок с их текстом. Убедитесь, что следующие вещи:

Вы должны создать список под названием All_Links в этом списке, храните всю ссылку Dict Infort. Это должно быть в следующем формате:

info = {
   "href": "",
   "text": ""
}

Убедитесь, что ваш текст ограничен любым пробелом Убедитесь, что вы проверяете, если ваш .Text это Нет Прежде чем звонить .полоска () в теме. Храните все эти диктовы в All_Links Распечатайте этот список в конце Вы извлекаете значения атрибута так же, как вы извлекаете значения из Dict, используя функцию Get. Давайте посмотрим на решение для этой лаборатории:

import requests
from bs4 import BeautifulSoup
# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Create top_items as empty list
all_links = []

# Extract and store in top_items according to instructions on the left
links = soup.select('a')
for ahref in links:
    text = ahref.text
    text = text.strip() if text is not None else ''

    href = ahref.get('href')
    href = href.strip() if href is not None else ''
    all_links.append({"href": href, "text": text})

print(all_links)

Здесь вы извлекаете href атрибут так же, как вы сделали в случае изображения. Единственное, что вы делаете, также проверяет, если это нет. Мы хотим установить его в пустую строку, в противном случае мы хотим распределить пробел.

Часть 7: Генерация CSV из данных Это Ссылка на эту лабораторию Отказ

Наконец, давайте понять, как вы можете генерировать CSV из набора данных. Вы создадите CSV со следующими заголовками:

  • наименование товара
  • Цена
  • Описание
  • Отзывы
  • Изображение продукта
  • Эти продукты расположены в ДВО .thumbnail. Котел CSV приведен ниже:
import requests
from bs4 import BeautifulSoup
import csv
# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

all_products = []

products = soup.select('div.thumbnail')
for product in products:
    # TODO: Work
    print("Work on product here")


keys = all_products[0].keys()

with open('products.csv', 'w', newline='') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(all_products)

Вы должны извлечь данные с сайта и генерировать этот CSV для трех продуктов.

Прохождение требований:

  • Название продукта – это белое пространство урезанная версия имени элемента (пример – Asus Asuspro Adv ..)
  • Цена – это пробел урезанный, но полный ценовой ярлык продукта (пример – $ 1101.83)
  • Описание – это белое пространство Trummed версия описания продукта (пример – Asus AsusPro Advanced Bu401la-Fa271g темно-серый, 14 “, Core I5-4210U, 4 ГБ, 128 ГБ SSD, Win7 Pro)
  • Отзывы пробел урезанные версии продукта (пример – 7 отзывов)
  • Изображение продукта – это URL-адрес (атрибут SRC) изображения для продукта (пример -/webscraper-python-codedamn-classroom-website/cart2.png)
  • Имя файла CSV должна быть продуктами .CSV и должна храниться в том же каталоге, что и ваш файл Script.py Давайте посмотрим решение этой лаборатории:
import requests
from bs4 import BeautifulSoup
import csv
# Make a request
page = requests.get(
    "https://codedamn-classrooms.github.io/webscraper-python-codedamn-classroom-website/")
soup = BeautifulSoup(page.content, 'html.parser')

# Create top_items as empty list
all_products = []

# Extract and store in top_items according to instructions on the left
products = soup.select('div.thumbnail')
for product in products:
    name = product.select('h4 > a')[0].text.strip()
    description = product.select('p.description')[0].text.strip()
    price = product.select('h4.price')[0].text.strip()
    reviews = product.select('div.ratings')[0].text.strip()
    image = product.select('img')[0].get('src')

    all_products.append({
        "name": name,
        "description": description,
        "price": price,
        "reviews": reviews,
        "image": image
    })


keys = all_products[0].keys()

with open('products.csv', 'w', newline='') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(all_products)

За блок самым интересным здесь. Вы извлекаете все элементы и атрибуты из того, что вы узнали до сих пор во всех лабораториях.

Когда вы запускаете этот код, вы в конечном итоге с хорошим файлом CSV. И вот обо всех основы веб-соскабливания с Booksouroup!

Я надеюсь, что этот интерактивный класс от CodeDamn помог вам понять основы веб-соскабливания с Python.

Если вам понравилось этот класс и этот блог, расскажите мне об этом в моем Twitter и Instagram. Хотел бы услышать обратную связь!

Оригинал: “https://dev.to/mehulmpt/web-scraping-python-tutorial-how-to-scrape-data-from-a-website-kic”