CoderCastrov logo
CoderCastrov
Питон

Использование Selenium для парсинга веб-страниц: пошаговое руководство

Использование Selenium для парсинга веб-страниц: пошаговое руководство
просмотров
4 мин чтение
#Питон

Введение

Мы знаем, что парсинг веб-страниц стал значительным инструментом для извлечения данных с веб-сайтов, позволяя нам получать информацию, анализировать тренды и принимать обоснованные решения. В этом блоге мы рассмотрим реальный пример парсинга веб-страниц с использованием фреймворка Selenium в Python (Jupyter Notebook). Нашей целью является: извлечение контактной информации о членах законодательного собрания с официального сайта Законодательного собрания Теланганы.

Парсинг профилей членов Законодательного собрания

Предоставленный Python-код демонстрирует, как парсить необходимые данные из профилей членов с веб-сайта Законодательного собрания Теланганы. Вот обзор основных шагов:

Настройка окружения

  • Чтобы начать, убедитесь, что у вас установлены необходимые библиотеки:
#Вы можете установить эти библиотеки с помощью pip:
!pip install selenium
  • Импортируйте необходимые библиотеки и установите параметры Chrome.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import pandas as pd
option = webdriver.ChromeOptions()
from selenium.webdriver.common.by import By
import numpy as np
  • Инициализируйте экземпляр Chrome WebDriver с использованием ChromeDriverManager.
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option('useAutomationExtension', False)
option.add_argument("--disable-infobars")
option.add_argument("start-maximized")
option.add_argument("--disable-extensions")

#chrome to stay open
option.add_experimental_option("detach", True)

# Pass the argument 1 to allow and 2 to block
option.add_experimental_option("prefs", { 
    "profile.default_content_setting_values.notifications": 2 
})
PATH = "путь к Chrome Driver\\chromedriver.exe"
driver = webdriver.Chrome(PATH,options=option)
  • Перейдите по целевому URL.
URL="https://legislature.telangana.gov.in/assemblymemprofile?selectedtab=m"
driver.get(URL)
time.sleep(4)
  • Извлеките все веб-ссылки на странице, а затем отфильтруйте только те, которые ведут на отдельные профили членов.
link1=[]
links = driver.find_elements(by='tag name', value='a')
for link in links:
    href = link.get_attribute("href")
    if href and "memid" in href:
         link1.append(href)
  • Переберите каждую ссылку на профиль члена и извлеките соответствующую информацию, такую как имя, адрес, контактный номер и электронная почта. Наконец, сохраните полученные данные в списки.
data2=[]
nm1=[]
for m in range(len(link1)):
  time.sleep(1)
  driver.get(link1[m])
  time.sleep(1)
  
  nm=driver.find_element('xpath','//*[@id="mlapersonalprofile"]/div[1]/table/tbody/tr[1]/td[2]/div').text
  nm=nm.split("\n")
  nm1.append(nm)
  # Locate the table by some attribute (e.g., class or ID)
  table = driver.find_element(by='id', value='mlapersonalprofile')  # Replace 'table-id' with the actual ID of the table
  dt1 = table.find_elements(by='tag name', value='th')
  tab1 = []
  for j in range(len(dt1)):
      #print(dt1[j].text)
      tab=dt1[j].text
      if tab in ['Permanent Address','Contact Number','Email Id']:
          print(j)
          row = dt1[j].find_element('xpath',"./ancestor::tr")
          # Find data cells (<td>) within the same row
          data = row.find_elements(by='tag name', value='td')
          for k in data:
              data1=k.text
              data1=data1.replace('\n'," ")
              data2.append(data1)

  driver.back()

Обработка и анализ данных

После парсинга данных, код обрабатывает и организует их с помощью библиотеки pandas и numpy. Парсинг данных включает имена участников, партии, избирательные округа, адреса, контактные номера и адреса электронной почты.

Полученные данные будут выглядеть примерно так:

Output (scraped data)

Теперь, так как мы хотим получить данные в трех столбцах, где первый элемент списка (data2) будет в первом столбце, второй элемент - во втором столбце, а третий элемент - в третьем столбце, а остальные элементы - в следующих столбцах.

#переформатирование
data3=[data2[i:i+3] for i in range(0, len(data2), 3)]
df=pd.DataFrame(data3)
df.columns=['Адрес','Контактный номер','Email']
df

Полученный датафрейм после переформатирования будет выглядеть так:

Reshaped Data frame

Объединение данных с избирательными округами и названиями партий, извлеченными в список 'nm1':

formatted list ‘nm1’ to data frame ‘df2'
df2=pd.DataFrame(nm1)
df2.columns=['Депутат','Партия','Избирательный округ']
df2['Партия']=df2['Партия'].str.replace('(',"").str.replace(')',"")
df2

df=pd.concat([df2,df],axis=1)

Итоговый датафрейм:

Final Output

Сохранение данных в CSV-файл

После обработки и организации данных они сохраняются в CSV-файле для дальнейшего анализа и хранения. Функция DataFrame.to_csv() используется для записи данных в CSV-файл на локальной системе.

df.to_csv("Путь для сохранения файла\\Telangana_MLAContactDetails.csv", index=False)

Заключение

В этом блог-посте мы рассмотрели, как использовать Selenium в Python для парсинга веб-страниц. Автоматизируя процесс навигации по страницам и извлечения нужной информации, мы можем эффективно собирать структурированные данные для анализа и принятия решений. Мы рассмотрели предоставленный код на Python, который демонстрирует, как извлечь необходимую информацию о членах законодательного собрания с веб-сайта, обработать данные и сохранить их в CSV-файле. Парсинг веб-страниц открывает возможности для извлечения и анализа данных, позволяя нам получать ценные сведения с веб-сайтов. Также следует отметить, что парсинг веб-страниц несет этическую ответственность. Всегда соблюдайте условия использования веб-сайта, следуйте bewt практикам и убедитесь, что ваши действия по парсингу не перегружают сервер. Учитывая эти моменты, можно использовать мощь парсинга веб-страниц для получения ценных сведений из обширного мира интернета в минимальные сроки.

References:

Простыми словами

Спасибо, что вы являетесь частью нашего сообщества! Перед тем, как уйти: