Здесь показаны различия между двумя версиями данной страницы.
| Следующая версия | Предыдущая версия | ||
|
python:parsers:ua-footbal [2020/01/27 00:31] werwolf создано |
python:parsers:ua-footbal [2023/01/12 12:18] (текущий) |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====ua-football.com==== | ====ua-football.com==== | ||
| + | |||
| + | Парсер забирает новости со страницы [[https://www.ua-football.com/sport|ua-football.com/sport]] | ||
| + | <code python> | ||
| + | # https://pypi.org/project/beautifulsoup4/ - установить сторонний пакет с помощью пакетного менеджера pip | ||
| + | |||
| + | # pip freeze - список установленных пакетов | ||
| + | # pip install beautifulsoup4 установить пакет | ||
| + | |||
| + | from bs4 import BeautifulSoup | ||
| + | import urllib.request | ||
| + | |||
| + | # Создаем запрос к сайту | ||
| + | req = urllib.request.urlopen('https://www.ua-football.com/sport') | ||
| + | # Читаем ответ | ||
| + | html = req.read() | ||
| + | |||
| + | # Парсим страницу, features='html.parser' - модификатор (что парсим) | ||
| + | soup = BeautifulSoup(html, features='html.parser') | ||
| + | # Ищем новости | ||
| + | news = soup.find_all('li', class_='liga-news-item') | ||
| + | results = [] | ||
| + | |||
| + | for item in news: | ||
| + | # find - выбрать эдемент, getText - получить содержимое тега(strip=True - убрать пробелы) | ||
| + | title = item.find('span', class_='d-block').getText(strip=True) | ||
| + | desc = item.find('span', class_='name-dop').getText(strip=True) | ||
| + | link = item.a.get('href') | ||
| + | results.append({ | ||
| + | 'title': title, | ||
| + | 'desc': desc, | ||
| + | 'link': link | ||
| + | } | ||
| + | ) | ||
| + | f = open('news.txt', 'w', encoding='utf-8') | ||
| + | i=1 | ||
| + | for item in results: | ||
| + | # Запись в файл | ||
| + | f.write(f'Новость №: {i}\n\n Название: {item["title"]} \n Описание: {item["desc"]}\n Ссылка: {item["link"]}\n\n*********\n\n') | ||
| + | i += 1 | ||
| + | </code> | ||
| + | |||
| + | результат: | ||
| + | |||
| + | <sxh text;title:news.txt> | ||
| + | Новость №: 1 | ||
| + | |||
| + | Название: Легенда мирового баскетбола Коби Брайант погиб в авиакатастрофе4 | ||
| + | Описание: Коби Брайант погиб - большая потеря для мирового спорта | ||
| + | Ссылка: /sport/basketball/1580068406-legenda-mirovogo-basketbola-kobi-brayant-pogib-v-aviakatastrofe.html | ||
| + | |||
| + | ********* | ||
| + | |||
| + | Новость №: 2 | ||
| + | |||
| + | Название: Элиз Мертенс - Симона Халеп. Анонс и прогноз на матч Australian Open | ||
| + | Описание: Элиз Мертенс - Симона Халеп: Прогноз и анонс матча ⋉ 27.01.2020 ⋊ Australian Open онлайн на UA-Футбол | ||
| + | Ссылка: /sport/tennis/1580058418-yeliz-martines-simona-halep-anons-i-prognoz-na-match-australian-open.html | ||
| + | |||
| + | ********* | ||
| + | |||
| + | Новость №: 3 | ||
| + | ............ | ||
| + | </sxh> | ||
| + | |||
| + | ====ООП версия парсера==== | ||
| + | |||
| + | <code python> | ||
| + | # https://pypi.org/project/beautifulsoup4/ - установить сторонний пакет с помощью пакетного менеджера pip | ||
| + | # pip freeze - список установленных пакетов | ||
| + | # pip install beautifulsoup4 установить пакет | ||
| + | |||
| + | from bs4 import BeautifulSoup | ||
| + | import urllib.request | ||
| + | |||
| + | class Parser: | ||
| + | |||
| + | row_html = '' | ||
| + | html = '' | ||
| + | results = [] | ||
| + | |||
| + | def __init__(self, url, path): | ||
| + | ''' | ||
| + | Инициализация | ||
| + | |||
| + | :param url: адрес странички | ||
| + | :param path: Куда сохранить файл | ||
| + | ''' | ||
| + | self.url = url | ||
| + | self.path = path | ||
| + | |||
| + | def get_html(self): | ||
| + | ''' | ||
| + | Получить страничку | ||
| + | ''' | ||
| + | req = urllib.request.urlopen(self.url) | ||
| + | self.row_html = req.read() | ||
| + | self.html = BeautifulSoup(self.row_html, features='html.parser') | ||
| + | return self | ||
| + | |||
| + | def parsing(self): | ||
| + | ''' | ||
| + | Парсим новости | ||
| + | ''' | ||
| + | news = self.html.find_all('li', class_='liga-news-item') | ||
| + | for item in news: | ||
| + | # find - выбрать эдемент, getText - получить содержимое тега(strip=True - убрать пробелы) | ||
| + | title = item.find('span', class_='d-block').getText(strip=True) | ||
| + | desc = item.find('span', class_='name-dop').getText(strip=True) | ||
| + | link = item.a.get('href') | ||
| + | |||
| + | self.results.append({ | ||
| + | 'title': title, | ||
| + | 'desc': desc, | ||
| + | 'link': link}) | ||
| + | return self | ||
| + | |||
| + | def save(self): | ||
| + | ''' | ||
| + | Сохранить список | ||
| + | ''' | ||
| + | with open(self.path, 'w', encoding='UTF-8') as f: | ||
| + | i = 1 | ||
| + | for item in self.results: | ||
| + | # Запись в файл | ||
| + | f.write( | ||
| + | f'Новость №: {i}\n\n Название: {item["title"]} \n Описание: {item["desc"]}\n Ссылка: {item["link"]}\n\n*********\n\n') | ||
| + | i += 1 | ||
| + | |||
| + | def run(self): | ||
| + | ''' | ||
| + | Точка входа | ||
| + | ''' | ||
| + | self.get_html()\ | ||
| + | .parsing()\ | ||
| + | .save() | ||
| + | |||
| + | </code> | ||