Neste artigo iremos discutir:
- Selenium: O que é, e como é utilizado
- Um guia passo-a-passo para raspar com Selenium
- Integração de proxies com Selenium
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:
- Ir ao seu Painel de Bright Data e clicar em ‘criar uma Zona’.
- Escolher ‘Tipo de rede’ e depois clicar em ‘guardar’.
- 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.
- 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.
Não é necessário cartão de crédito