темный логотип proxyscrape

Самоучитель по веб-скрапингу с помощью Python: Советы и приемы

Python, Скрапинг, Мар-06-20245 минут чтения

С помощью веб-скреппинга можно автоматически извлекать большие объемы данных с веб-сайтов и сохранять их в базе данных или в файле. Полученные данные чаще всего хранятся в виде электронных таблиц или табличных форматов. Веб-скрепинг также называют сбором данных с веб-сайтов. Он необходим, потому что ручной сбор данных является утомительной задачей.

Оглавление

С помощью веб-скреппинга можно автоматически извлекать большие объемы данных с веб-сайтов и сохранять их в базе данных или в файле. Полученные данные чаще всего хранятся в виде электронных таблиц или табличных форматов. Веб-скрепинг также называют сбором данных с веб-сайтов. Он необходим, потому что ручной поиск - это утомительная задача, которая может занять несколько часов или даже дней. Поэтому необходимо автоматизировать этот процесс и извлекать данные с веб-сайтов в течение короткого времени.

Вы можете использовать программное обеспечение для веб-скреппинга, чтобы автоматически загружать, просматривать и извлекать данные с различных страниц веб-сайта в соответствии с вашими потребностями и требованиями. Одним словом, вы можете получить нужные данные с веб-сайтов одним нажатием кнопки. В современном мире компаниям необходимо анализировать данные и выполнять интеллектуальные действия. Но иногда получение данных с веб-сайтов затруднено, когда владельцы сайтов используют такие методы, как запрет IP-адресов и CAPTCHA. Для решения этой проблемы вы можете использовать прокси-серверы или VPN, которые помогают вам анонимно собирать данные из Интернета. 

Зачем нужен веб-скрепинг?

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

  • С помощью веб-скреппинга собираются обучающие и тестовые наборы данных для проектов машинного обучения.
  • В электронной коммерции веб-скраппинг используется для мониторинга цен конкурентов.
  • Веб-скреппинг используется в сфере недвижимости для получения информации о недвижимости и владельцах/агентах.
  • В маркетинге веб-скраппинг используется для создания списков телефонов и адресов электронной почты для "холодной" работы с клиентами.

Ниже перечислены основные причины, по которым необходимо соскребать данные из Интернета.

Достижение автоматизации - Вы можете извлекать данные с веб-сайтов с помощью надежных веб-скреперов. Таким образом, вы сможете сэкономить время на рутинных задачах по сбору данных. Вы можете собирать данные в большем объеме, чем это может сделать один человек, используя веб-скреперы. Кроме того, вы можете создавать сложные веб-боты для автоматизации деятельности в Интернете, используя язык программирования Python, Javascript или инструмент для веб-скрепинга.

Богатые и уникальные наборы данных - Вы можете получить из Интернета большое количество изображений, видео, текстовых и числовых данных. Вы также можете найти соответствующие веб-сайты и создать свой собственный набор данных для анализа в зависимости от поставленной цели. Например, вы заинтересованы в глубоком изучении спортивного рынка Великобритании. Вы можете настроить веб-скреперы, которые будут собирать для вас видеоконтент или информацию о футбольной статистике.

Эффективное управление данными - Вам не нужно копировать и вставлять данные из Интернета, поскольку вы можете точно собирать данные с различных веб-сайтов с помощью веб-скреппинга. Таким образом, ваша компания и сотрудники смогут уделять больше времени творческой работе благодаря эффективному хранению данных с помощью автоматического программного обеспечения и программ.

Бизнес-аналитика и аналитика - Веб-скраппинг из Интернета позволяет делать следующее:

  • Мониторинг маркетинговой активности конкурентов
  • Поиск цен конкурентов
  • Построение общей картины вашего рынка

Кроме того, загрузка, очистка и анализ данных в значительных объемах позволяют предприятиям принимать более качественные решения.

Скорость - веб-скрепинг извлекает данные с веб-сайтов с огромной скоростью. Он позволяет извлекать данные за несколько часов, а не дней. Но некоторые проекты могут занять время в зависимости от их сложности, а также ресурсов и инструментов, которые мы используем для их выполнения.

Точность данных - Ручное извлечение данных с веб-сайтов сопряжено с человеческим фактором, что приводит к серьезным проблемам. Поэтому для любой информации очень важна точность извлечения данных, что можно сделать с помощью веб-скрепинга.

Веб-скрапинг в Python

Предположим, вам нужно извлечь данные с этого сайта. Для этого необходимо установить два модуля Python - requests и BeautifulSoup. 

Импорт библиотек

Вы можете установить эти модули с помощью следующей команды.

!pip install requests
!pip install BeautifulSoup

Вы можете импортировать эти модули как:

из bs4 import BeautifulSoup
импортировать запросы

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

Добавьте заголовок и URL

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

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

Вы можете использовать функцию requests.get() для отправки GET-запроса на указанный URL.

r = requests.get(url, headers=headers)

Объект BeautifulSoup

Необходимо инициализировать объект BeautifulSoup и указать его параметры. Затем необходимо извлечь все строки таблицы. Получить все элементы таблицы можно с помощью метода find_all(), как показано в приведенном ниже коде.

soup = BeautifulSoup(r.content, "html.parser")
table = soup.find_all('table')[1]
rows = table.find_all('tr')
row_list = list()

Итерация по строкам

Вы можете использовать цикл for для перебора всех строк таблицы, как показано в приведенном ниже коде.

for tr in rows:
   td = tr.find_all('td')
    row = [i.text for i in td]
    row_list.append(row)

Создание фрейма данных

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

import pandas as pd

Теперь вы можете преобразовать объект soup в кадр данных, который будет содержать следующие строки таблицы.

  • Город
  • Страна
  • Примечания

Вы можете преобразовать кадр данных в формат csv и распечатать его, как показано ниже.

df_bs = pd.DataFrame(row_list,columns=['City','Country','Notes'])
df_bs.set_index('Country',inplace=True)
df_bs.to_csv('beautifulsoup.csv')
печать(df_bs)

Вы получите следующий результат.

Прокси для веб-скрапинга с помощью Python

Прокси выступает в роли посредника между клиентом и сервером. Он скрывает ваш реальный IP-адрес и обходит фильтры и цензуру. Вы можете получить бесплатный список прокси-серверов, просто используя функцию в Python, как показано в следующих шагах.

Импорт библиотек

Вам необходимо импортировать следующие модули в Python.

из bs4 import BeautifulSoup
импортировать запросы
импортировать случайные

Определите функцию

Вы можете определить функцию get_free_proxies(), в которой нужно указать URL-адрес списка бесплатных прокси. Затем нужно создать объект BeautifulSoup и получить HTTP-ответ с помощью функции requests.get(). 

def get_free_proxies():
    url = "https://free-proxy-list.net/"
    soup = bs(requests.get(url).content, "html.parser")
    proxies = []

Используйте цикл For Loop

Вы можете использовать метод find_all() в цикле for для перебора всех строк таблицы, как показано ниже.

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

Список рабочих доверенных лиц

Вы можете упомянуть список некоторых рабочих прокси-серверов, как тот, что мы привели ниже.

прокси = [
    '167.172.248.53:3128',
   '194.226.34.132:5555',
   '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
   '51.15.166.107:3128',
   '91.205.218.64:80',
    '128.199.237.57:8080',
]

Запрос сессии

Вам нужно создать функцию get_session(), которая будет принимать список прокси-серверов. Она также создает сессию запросов, которая случайным образом выбирает любой из переданных прокси, как показано в приведенном ниже коде.

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

Сделать запрос

Вы можете использовать цикл for, чтобы сделать запрос к веб-сайту и получить в ответ IP-адрес.

for i in range(5):
    s = get_session(proxies)
    try:
       print("Запрашиваем страницу с IP:", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    except Exception as e:
        continue

Вы можете получить следующий результат.

Почему прокси важны для веб-скрапинга?

С помощью веб-скрепинга компании могут извлекать ценные данные для принятия решений на основе данных и предоставления услуг, основанных на данных. Прокси-серверы важны для веб-скрепинга по следующим причинам.

  • С помощью прокси-серверов вы можете делать запросы из определенного географического региона и видеть конкретный контент, который отображается на сайте для этого региона. Эта функция прокси-серверов полезна, когда вы собираете данные о товарах из интернет-магазинов.
  • Прокси-серверы позволяют выполнять большее количество запросов к целевому сайту, не подвергаясь при этом блокировке или запрету.
  • Прокси позволяют более надежно и эффективно собирать данные с веб-сайтов.
  • С помощью прокси-серверов вы можете совершать неограниченное количество одновременных сессий на одном или разных сайтах, не опасаясь, что вас забанят.
  • Прокси скрывает IP-адрес вашего компьютера от целевого веб-сайта, обеспечивая тем самым дополнительную безопасность вашего устройства.
  • Предприятия используют прокси-серверы для мониторинга цен и характеристик продукции конкурентов, чтобы улучшить свои услуги и товары.

Заключение по этому учебнику Python для веб-скрапинга

До сих пор мы говорили о том, что веб-скрепинг помогает извлекать данные с веб-сайтов в автоматическом режиме. Вы можете преобразовать данные в удобный для использования формат, например в файл .csv. Предприниматели используют веб-скреппинг для проверки цен и характеристик продукции конкурентов. Веб-скреппинг очень полезен, если вы используете прокси-серверы, поскольку они сохраняют анонимность вашей личности, скрывая ваш оригинальный IP-адрес от целевого веб-сайта. С помощью прокси-серверов вы можете отправлять множество запросов на сайт, не боясь быть заблокированным или забаненным.