🐍 Самоучитель по Python для начинающих. Часть 17: Основы скрапинга и парсинга

Научимся извлекать данные из статического и динамического контента с помощью регулярных выражений, XPath, BeautifulSoup, MechanicalSoup и Selenium. В конце статьи – код 10 скриптов для скрапинга данных и изображений с Wikipedia, Habr, LiveLib, IMDb и TIOBE.
2
🐍 Самоучитель по Python для начинающих. Часть 17: Основы скрапинга и парсинга

Веб-скрапинг – это процесс автоматического сбора информации из онлайн-источников. Для выбора нужных сведений из массива «сырых» данных, полученных в ходе скрапинга, нужна дальнейшая обработка – парсинг. В процессе парсинга выполняются синтаксический анализ, разбор и очистка данных. Результат парсинга – очищенные, упорядоченные, структурированные данные, представленные в формате, понятном конечному пользователю (или приложению).

Скрипты для скрапинга создают определенную нагрузку на сайт, с которого они собирают данные – могут, например, посылать чрезмерное количество GET запросов к серверу. Это одна из причин, по которой скрапинг относится к спорным видам деятельности. Чтобы не выходить за рамки сетевого этикета, необходимо всегда соблюдать главные правила сбора публичной информации:

  • Если на сайте есть API, нужно запрашивать данные у него.
  • Частота и количество GET запросов должны быть разумными.
  • Следует передавать информацию о клиенте в User-Agent.
  • Если на сайте есть личные данные пользователей, необходимо учитывать настройки приватности в robots.txt.
«Программирование на Python» от Proglib Academy!
Хочешь стать Python-разработчиком? Тебя ждут 30 практических уроков по веб-разработке (Flask), аналитике (Pandas), работе с базами данных (SQLite, SQLAlchemy), скрапингу и автоматизации. Реальные задачи, интерактивные вебинары с опытными разработчиками и финальный проект для твоего портфолио. Получи востребованные навыки и начни карьеру! Купить полный курс →

Комментарии

 
 
04 марта 2024

спасибо за вашу статью! сам решил попробовать, вот что получилось :) find_text = 'введите текст запроса' html = urlopen(f'https://САЙТ.com/ru/search/?q={find_text}&target_type=posts&order=relevance') bsObj = BeautifulSoup(html.read()) -строка выдачи tmpagination = bsObj.find('div', class = 'tm-pagination__pages').findAll('a') last_page = int(tm_pagination[-1].text.strip())

построчный перебор

link_list = [] for page_num in range(1,last_page+1): .html = urlopen(f'https://САЙТ.com/ru/search/page{page_num}/?q={find_text}&target_type=posts&order=relevance') .bsObj = BeautifulSoup(html.read()) .for elem in bsObj.findAll('a', class_ ='tm-article-snippetreadmore'): ..link_list.append('https://САЙТ.com' + elem['href']) print(len(link_list)) print(*link_list[:10],sep = '\n') -тут выводятся ссылки которые напарсил код. потом чтение ссылок: def parse_one_article(article_url): html = urlopen(articleurl) bsObj = BeautifulSoup(html.read(), 'html.parser') content = bsObj.find('div', class ='tm-article-body').text #tm-article-presenterbody return(content) with concurrent.futures.ThreadPoolExecutor() as executor: future_to_url = {executor.submit(parse_one_article,link): link for link in link_list} pages_text = [] for future in concurrent.futures.as_completed(future_to_url): article_url = future_to_url[future] try: article_text = future.result() if article_text: pages_text.append(article_text) except Exception as err: print(f'Error{article_url}:{err}') print(pages_text[2])

18 января 2024

Спасибо! Прекрасный материал!

ВАКАНСИИ

Добавить вакансию
Go-разработчик
по итогам собеседования
Senior Marketing Analyst
по итогам собеседования
Старший C++ разработчик
Лимасол, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

LIVE >

Подпишись

на push-уведомления