Raspagem da web com o guia de Selenium

Este é o único guia passo-a-passo de que necessitará para começar a coletar dados da web a partir dos sítios alvo, e guardá-los como ficheiros CSV em menos de 10 minutos
6 min read
How to use Selenium for web scraping

Neste artigo iremos discutir:

O correspondente repositório GitHub para este artigo pode ser encontrado aqui.

Selenium: O que é, e como é utilizado

Selenium é um software de código aberto que inclui uma variedade de ferramentas e bibliotecas que permitem atividades de automatização de navegadores, incluindo:

  • Ações/recuperação de elementos baseados em páginas web (por exemplo, fechar, voltar, get_cookie, get_screenshot_as_png, get_window_size)
  • Teste do sítio
  • Gestão de avisos de alerta, e cookies (adição/remoção)
  • Apresentação de elementos do formulário
  • Coleta de dados / raspagem da web

É compatível com a maioria dos navegadores, incluindo Firefox, Chrome, Safari e Internet Browser. E pode ser utilizado para escrever testes numa variedade de linguagens de programação tais como Python, Node.js, C#, JavaScript e PHP. Para sua conveniência, incluí um link para a biblioteca de documentação oficial do Selenium 4.1.5.

Puppeteer vs. Selenium

Para aqueles que estão a debater-se, e a considerar “Puppeteer vs. Selenium”, direi que o “Puppeteer” pode servi-lo melhor se planear concentrar-se principalmente no JavaScript, e no Chrome. Selenium, por outro lado, pode ser a melhor escolha se estiver a procurar trabalhar em vários navegadores diferentes para testar aplicações de navegadores e/ou realizar a coleta de dados da web.

Um guia passo-a-passo para raspar com Selenium

Primeiro passo: Instalar Selenium

Para aqueles que têm pip (ou seja, instalador de pacotes para Python) nos vossos computadores, tudo o que precisam de fazer é abri-lo e digitar:

pip install -U selenium

Caso contrário, pode descarregar PyPI, desarquivá-lo, e executar:

python setup.py install

Note que precisará de um driver para que Selenium possa fazer interface com o seu navegador à sua escolha. Aqui tem enlaces para alguns dos mais populares drivers de navegadores para sua conveniência:

Vamos usar o Firefox como um navegador de exemplo. Conseguiria isto abrindo o Firefox, indo a uma página web, digamos Yahoo, procurando por “seleniumhq”, e depois fechando o navegador. Aqui está o que isso pareceria em código:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()

browser.get('http://www.yahoo.com')
assert 'Yahoo' in browser.title

elem = browser.find_element(By.NAME, 'p')  # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)

browser.quit()

Segundo passo: Importação de pacotes de apoio

Selenium não é utilizado isoladamente, mas sim em conjunto com outros programas, incluindo o Pandas (uma ferramenta de análise de dados de fonte aberta fácil de usar), por exemplo. Eis o que deve estar a teclar, a fim de o conseguir:

from selenium import webdriver
import time
import pandas as pd 

Terceiro passo: Definição de variáveis

Nesta etapa definiremos a nossa pasta de destino, consulta de pesquisa, e site de destino. Neste exemplo, teremos como objetivo mapear diferentes oportunidades de emprego, tal como apresentadas por empresas concorrentes no LinkedIn. O que se escreve deve parecer-se com isto:

FILE_PATH_FOLDER = 'F:....Competitive_Analysis'
search_query = 'https://www.linkedin.com/q-chief-financial-officer-jobs.html'
driver = webdriver.Chrome(executable_path='C:/.../chromedriver_win32/chromedriver.exe')
job_details = []

Quarto passo: Inspeção da etiqueta HTML

Os sítios HTML têm tipicamente um identificador único para cada etiqueta que está associada à informação que é exibida em qualquer sítio alvo. A técnica aqui é aproveitar esta propriedade do sítio HTML para rastejar o sítio alvo em questão. Pode conseguir isto ao:

  • Clicar com o botão direito do rato em qualquer parte da página, e depois clicar em ‘inspecionar’.
  • E depois ao clicar na seta que aparece no canto superior esquerdo ou ao premir as teclas Ctrl+Shift+C para inspecionar um elemento específico e obter a etiqueta HTML desejada

Eis o que isso parece:

driver.get(search_query)
time.sleep(5)
job_list = driver.find_elements_by_xpath("//div[@data-tn-component='organicJob']")

Quinto passo: Extração de pontos de dados específicos

Extrairemos os nossos pontos de dados alvo utilizando o atributo ‘find_elements_by_xpath’ no driver da web de Selenium, sairemos do driver, e fecharemos o navegador assim que os dados alvo tiverem sido coletados.

Visaremos os pontos de dados da seguinte forma:

  • Título do trabalho
  • Empresa
  • Local do trabalho
  • Descrição do trabalho
  • Data em que o trabalho foi carregado

Eis o que isso parece:

for each_job in job_list:
    # Getting job info
    job_title = each_job.find_elements_by_xpath(".//h2[@class='title']/a")[0]
    job_company = each_job.find_elements_by_xpath(".//span[@class='company']")[0]
    job_location = each_job.find_elements_by_xpath(".//span[@class='location accessible-contrast-color-location']")[0]
    job_summary = each_job.find_elements_by_xpath(".//div[@class='summary']")[0]
    job_publish_date = each_job.find_elements_by_xpath(".//span[@class='date ']")[0]
    # Saving job info 
    job_info = [job_title.text, job_company.text, job_location.text, job_summary.text, job_publish_date.text]
 # Saving into job_details
    job_details.append(job_info)
driver.quit()

Note-se que estes seletores podem ser mudados pelo alvo, pelo que as pessoas devem confirmar que os seletores em questão estão corretos, não assumir que o estão.

Sexto passo: Guardar os dados em preparação para os resultados

Nesta altura, desejará adicionar colunas ao quadro de dados e fazer uso do atributo ‘to_csv’ para guardar todos os dados obtidos em formato CSV, como se segue:

job_details_df = pd.DataFrame(job_details)
job_details_df.columns = ['title', 'company', 'location', 'summary', 'publish_date']
job_details_df.to_csv('job_details.csv', index=False)

O seu ficheiro CSV desejado será descarregado para o seguinte local: FILE_PATH_FOLDER

É tudo! Acabou de concluir com sucesso o seu primeiro trabalho de raspagem da web com Selenium.

Integração de proxies com Selenium

A integração de proxies com Selenium pode ajudá-lo:

  • Realizar a coleta de dados em diversas geolocalizações
  • Permitir a coleta de dados à escala sem risco de bloqueio (por exemplo, limitações de taxas sobre IPs que enviam “demasiados” pedidos de dados simultâneos/consecutivos). Neste contexto, poderá também querer analisar os serviços de desbloqueio da web dedicados.
  • Capacitar você a coletar dados do ponto de vista de um IP de usuário real para que você não seja servido informações enganosas por sites alvo potencialmente desconfiados

A integração de proxies com Selenium pode ser realizada ao:

  1. Ir ao seu Painel de Bright Data e clicar em ‘criar uma Zona’.
  2. Escolher ‘Tipo de rede’ e depois clicar em ‘guardar’.
  3. Em seguida, dirigir-se para Selenium, e preencher o ‘Proxy IP:Port’ na função ‘setProxy’, por exemplo: zproxy.lum-superproxy.io:22225 de HTTP e HTTPS.
  4. Em ‘sendKeys’ introduzir o seu ID de conta de Bright Data e nome de zona name:lum-customer-CUSTOMER-zone-YOURZONE e a sua palavra-passe de Zona encontrada nas definições de Zona.

More from Bright Data

Datasets Icon

Get immediately structured data

Access reliable public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Subscribe to get fresh records of your preferred dataset based on a pre-defined schedule.

Web scraper IDE Icon

Build reliable web scrapers. Fast.

Build scrapers in a cloud environment with code templates and functions that speed up the development. This solution is based on Bright Data's Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.

Web Unlocker Icon

Implement an automated unlocking solution

Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?