249.80K
Категория: ПрограммированиеПрограммирование

Разработка парсеров. Введение в requests и BeautifulSoup

1.

Модуль 4. Тема № 3
Разработка парсеров.
Введение в requests и
BeautifulSoup
Практика
Задание № 1
Установить библиотеки requests и bs4.
С помощью библиотеки requests получить код и содержимое html страницы
http://pythonscraping.com/pages/page1.html
С помощью библиотеки bs4 выполнить синтаксический разбор html страницы:
вывести h1 несколькими способами.
Отобразите содержимое страницы, используйте метод prettify().
Решение:
import requests
from bs4 import BeautifulSoup
html = requests.get('http://pythonscraping.com/pages/page1.html')
print(html)
print(html.text)
bs = BeautifulSoup(html.text, 'html.parser')
print(bs.h1)
print(bs.html.body.h1)
print(bs.body.h1)
print(bs.html.h1)
Задание № 2
Создадим веб-скрапер, который сканирует страницу, расположенную по адресу
http://www.pythonscraping.com/pages/warandpeace.html.

2.

На этой странице строки, в которых содержатся реплики персонажей, выделены
красным цветом, а имена персонажей — зеленым.
Примечание
С помощью этого объекта BeautifulSoup можно вызвать функцию find_all и извлечь
Python-список всех имен персонажей, полученных путем выбора текста из тегов <
span class="green">< /span>
bs.имяТега - Это только первый тег, который встретился в тексте
bs.find_all(имяТега,атрибутыТега) - список всех тегов, присутствующих на странице
Решение:
from bs4 import BeautifulSoup
import requests
html =
requests.get("http://www.pythonscraping.com/pages/warandpeace.html
")
bs = BeautifulSoup(html.text, 'html.parser')
# Поиск экземпляров тега
nameList = bs.find_all('span', {'class': 'green'})
#список всех персонажей «Войны и мира» в порядке их появления в
тексте
for name in nameList:
print(name.get_text()) #удаляет из документа, с которым вы
работаете, все теги и возвращает строку,
#содержащую только текст в кодировке Unicode.
# tag - мы можем передать функции строку, содержащую имя тега, или
даже Python-список имен тегов
titles = bs.find_all(['h1', 'h2','h3','h4','h5','h6'])
print([title for title in titles])
#attribute принимает Python-словарь атрибутов и ищет теги, которые
содержат любой из этих атрибутов
allText = bs.find_all('span', {'class':{'green', 'red'}})
print(*[text for text in allText])
Задание № 3
Вывести заголовки новостей про Python со страницы сайта Habr.com
Источник: https://habr.com/ru/hub/python/

3.

Инструкция по работе:
1. Импортируйте библиотеки request и bs4
2. Выберите сайт, с которого хотите собрать данные
3. Изучите сайт с помощью браузера
4. Попробуйте подключиться, используя `requests` с измененным headers и без
5. Заберите содержимое первой страницы и примените к нему BeautifulSoup
6. Напечатайте теги, которые будут на странице в следующем порядке - строка с
тегами первого уровня, затем строка с тегами второго уровня и так далее (формат
вывода можете выбирать на свое усмотрение)
7. Напечатайте содержимое нескольких тегов, которые содержат текст
8. Напечатайте содержимое нескольких тегов, которые содержат ссылки
9. Если на вашей странице есть таблица, то попробуйте найти и напечатать ее
10. Напечатайте типы классов тегов, которые встречаются на изучаемой вами
странице
Решение:
from bs4 import BeautifulSoup
import requests
html = requests.get('https://habr.com/ru/hub/python/')
bs = BeautifulSoup(html.text, 'html.parser')
new_list = bs.find_all('h2', {'class': 'tm-title tm-title_h2'})
for name in new_list:
print(name.get_text())
Задание № 4
Пропарсить сайт https://coinmarketcap.com – вывести данные:
Имя – цену криптовалюты
Решение:
import pandas as pd
url = 'https://coinmarketcap.com'
df = pd.read_html(url)[0]
print(df[['Name','Price']].head(15))
Задание № 5

4.

Пропарсить сайт: https://scrapingclub.com/exercise/list_basic/?page=1
Получить данные с одной страницы сайта:
a.
Название товара
b.
Цена
English     Русский Правила