Em sua forma mais simples, o web scraping envolve a automatização do processo de coleta de informações disponíveis na web, que podem então ser armazenadas, analisadas ou usadas como insumo para os processos de tomada de decisão.
Agora, você pode estar se perguntando, por que o LinkedIn? O LinkedIn, como plataforma de networking profissional, tem uma riqueza enorme de dados. Ele hospeda uma grande quantidade de informações sobre profissionais, empresas e vagas de emprego. Por exemplo, recrutadores podem usá-lo para encontrar candidatos em potencial, equipes de vendas podem identificar leads em potencial e pesquisadores podem usá-lo para análises do mercado de trabalho. As possibilidades são infinitas.
Neste tutorial, você aprenderá a coletar dados do LinkedIn usando Beautiful Soup. Depois de aprender sobre o processo passo a passo, você também aprenderá sobre a solução da Bright Data que torna a coleta de dados do LinkedIn muito mais rápida.
Coletando dados do LinkedIn em Python
Neste tutorial, você usará Python para criar um web scraper usando ferramentas gratuitas, como Beautiful Soup e Requests. Então, vamos começar!
Atenção: este tutorial é destinado apenas para fins educativos e para demonstrar competências técnicas. Esteja ciente de que coletar dados do LinkedIn é estritamente proibido, de acordo com o Contrato de Usuário do LinkedIn. O uso indevido dessas informações para coletar dados do LinkedIn pode fazer com que sua conta seja banida permanentemente ou resultar em outras possíveis repercussões legais. Proceda por sua conta e risco.
Antes de começar, certifique-se de ter o Python versão 3.7.9 ou superior instalado em seu sistema.
Depois de instalar o Python, a próxima etapa é configurar as bibliotecas necessárias para web scraping. Aqui, você utilizará Requests
para fazer solicitações HTTP, Beautiful Soup
(BS4) para analisar conteúdo HTML e Playwright
para automação de tarefas e interação com o navegador. Abra seu terminal ou shell e execute os comandos a seguir:
pip3 install beautifulsoup4
pip3 install requests
pip3 install playwright
Estrutura e objetos de dados do LinkedIn
Antes de começar a coletar dados do LinkedIn, a seção a seguir falará sobre a estrutura do site e identificará os objetos de dados que você extrairá. Para o propósito deste tutorial, você se concentrará em coletar dados de vagas de empregos, perfis de usuário, artigos e informações de empresas:
- Vagas de emprego contêm dados como cargo, empresa, localização e descrição do cargo.
- Informações de curso podem incluir título, instrutor, duração e descrição do curso.
- Dados da empresa podem incluir o nome, setor, tamanho, localização e descrição da empresa.
- Artigos são redigidos por profissionais e abrangem temas como desenvolvimento profissional e insights do setor.
Por exemplo, se você quiser entender melhor a estrutura HTML da página de Vagas do LinkedIn, siga estas etapas:
- Acesse o site do LinkedIn e faça login na sua conta.
- Clique no ícone de Empregos na barra de navegação superior. Insira qualquer cargo (p. ex., “desenvolvedor front-end”) e pressione Enter.
- Clique com o botão direito do mouse em uma vaga da lista e clique em Inspecionar para abrir as ferramentas de desenvolvedor do navegador.
- Analise a estrutura HTML para identificar as tags e os atributos que contêm os dados que você deseja coletar.
Coletar dados de vagas de empregos
Comece coletando dados de vagas de emprego do LinkedIn. Você usará Requests
para buscar o conteúdo HTML da página e Beautiful Soup
para analisar e extrair as informações relevantes.
Crie um novo arquivo chamado scraper_linkedIn_jobs.py
e adicione o seguinte código:
import requests
from bs4 import BeautifulSoup
url = 'https://www.linkedin.com/jobs/search?keywords=Frontend%20Developer&location=United%20States&pageNum=0'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
job_listings = soup.find_all('div', {'class':'job-search-card'})
for job in job_listings:
title = job.find('h3', {'class': 'base-search-card__title'}).text.strip()
company = job.find('a', {'class': 'hidden-nested-link'}).text.strip()
location = job.find('span', {'class': 'job-search-card__location'}).text.strip()
anchor_tag = job.find('a', class_='base-card__full-link')
href_link = anchor_tag['href']
print(f"Title: {title}\nCompany: {company}\nLocation: {location}\nJob Link: {href_link}\n")
else:
print("Failed to fetch job listings.")
Esse código busca vagas de emprego em uma página de pesquisa do LinkedIn com vagas para desenvolvedor front-end nos Estados Unidos.
Observação: na
url
definida, você pode personalizar a busca de vagas de acordo com suas preferências usando parâmetros de URL. Por exemplo, você pode alterarlocation=United%20States
para o país de sua escolha para encontrar vagas de emprego nesse local específico. Da mesma forma, você pode alterarkeywords=Frontend%20Developer
para qualquer outro cargo do seu interesse, permitindo que você pesquise vagas com base em diferentes palavras-chave. Além disso, você pode ajustar “pageNum=0” para navegar por várias páginas de resultados de pesquisa e explorar mais oportunidades de emprego. Esses parâmetros oferecem a flexibilidade de adaptar a busca de emprego conforme os critérios e preferências desejados.
Execute o código através do seu shell ou terminal usando o seguinte comando:
python3 scraper_linkedIn_jobs.py
Você deve obter uma lista de vagas com cargo, empresa, localização e link da vaga. Seus resultados devem ser semelhantes ao exemplo:
…output omitted…
Title: Frontend Engineer
Company: Klarity
Location: San Francisco, CA
Job Link: https://www.linkedin.com/jobs/view/desenvolvedor-front-end-at-pasquali-solution-3671519424?refId=JN%2FeM862Wu7qnbJd96Eoww%3D%3D&trackingId=kTSLczKp1q4aurZ5rSzRPQ%3D%3D&position=1&pageNum=0&trk=public_jobs_jserp-result_search-card
Title: Front-End Developer (Remote)
Company: Prevail Legal
Location: United States
Job Link: https://www.linkedin.com/jobs/view/desenvolvedor-front-end-at-pasquali-solution-3671519424?refId=JN%2FeM862Wu7qnbJd96Eoww%3D%3D&trackingId=kTSLczKp1q4aurZ5rSzRPQ%3D%3D&position=1&pageNum=0&trk=public_jobs_jserp-result_search-card
…output omitted…
Coletar dados do LinkedIn Learning
Além de dados de vagas de emprego, você também pode coletar dados de cursos da página do LinkedIn Learning.
Crie um novo arquivo chamado scraper_linkedIn_courses.py
e adicione o seguinte código:
import requests
from bs4 import BeautifulSoup
url = 'https://www.linkedin.com/learning/search?trk=content-hub-home-page_guest_nav_menu_learning'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
course_listings = soup.find_all('li', {'class':'results-list__item'})
for course in course_listings:
title = course.find('h3', {'class': 'base-search-card__title'}).text.strip()
created_by = course.find('h4', {'class': 'base-search-card__subtitle'}).text.strip()
duration = course.find('div', {'class': 'search-entity-media__duration'}).text.strip()
# Find the anchor tag containing the link
anchor_tag = course.find('a', class_='base-card__full-link')
# Extract the 'href' attribute value
if anchor_tag:
href_link = anchor_tag['href']
else:
print("Anchor tag not found.")
print(f"Title: {title}\nCreated By: {created_by}\nDuration: {duration}\nCourse Link: {href_link}\n")
else:
print("Failed to fetch course listings.")
Aqui você usa Requests
para acessar a página do LinkedIn Learning e Beautiful Soup
para analisá-la. Você está em busca de elementos li
com a classe results-list__item
, que contém as listagens de cursos. Para cada curso, você extrai e imprime o título, o criador, a duração e o link. Se a solicitação inicial falhar, uma mensagem de falha será impressa.
Execute o código através do seu shell ou terminal usando o seguinte comando:
python3 scraper_linkedIn_courses.py
Você deve obter uma lista de cursos com título, autor e link do curso. Seus resultados serão semelhantes ao exemplo:
…output omitted…
Title: Define general intelligence
Created By: From: Introduction to Artificial Intelligence
Duration: 3m
Course Link: https://www.linkedin.com/learning/introduction-to-artificial-intelligence/define-general-intelligence?trk=learning-serp_learning-search-card_search-card
Title: Shortcut menus and the Mini toolbar
Created By: From: Excel Essential Training (Microsoft 365)
Duration: 4m
Course Link: https://www.linkedin.com/learning/excel-essential-training-microsoft-365-17231101/shortcut-menus-and-the-mini-toolbar?trk=learning-serp_learning-search-card_search-card
Title: Learning Excel: Data Analysis
Created By: By: Curt Frye
Duration: 3h 16m
Course Link: https://www.linkedin.com/learning/learning-excel-data-analysis-18868618?trk=learning-serp_learning-search-card_search-card
…output omitted…
Coletar dados de artigos do LinkedIn
Você também pode extrair dados de artigos através da página de Artigos do LinkedIn.
Para isso, crie um novo arquivo chamado scraper_linkedIn_articles.py
e adicione o seguinte código:
import requests
from bs4 import BeautifulSoup
url = 'https://www.linkedin.com/pulse/topics/home/?trk=guest_homepage-basic_guest_nav_menu_articles'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
article_listings = soup.find_all('div', {'class':'content-hub-entities'})
for article in article_listings:
title = article.find('h2', {'class': 'break-words'}).text.strip()
description = article.find('p', {'class': 'content-description'}).text.strip()
# Find the anchor tag containing the link
anchor_tag = article.find('a', class_='min-w-0')
# Extract the 'href' attribute value
if anchor_tag:
href_link = anchor_tag['href']
else:
print("Anchor tag not found.")
print(f"Title: {title}\nDescription: {description}\nArticle Link: {href_link}\n")
else:
print("Failed to fetch article listings.")
Nesse código, você usa Requests
para buscar uma página do LinkedIn e Beautiful Soup
para analisá-la. Você está em busca de elementos div
com a classe content-hub-entities
, que contém as listagens de artigos. Para cada artigo, você extrai e imprime o título, a descrição e o link. Se a solicitação inicial falhar, uma mensagem de falha será impressa.
Execute o código através do seu shell ou terminal usando o seguinte comando:
python3 scraper_linkedIn_articles.py
Você receberá uma lista de artigos com título, descrição e link do artigo. Seus resultados devem ser semelhantes ao exemplo:
…output omitted…
Title: What are some of the emerging leadership trends and theories that you should be aware of?
Description: Learn about the six emerging leadership styles and frameworks that can help you develop your leadership skills and potential in a changing and complex world.
Article Link: https://www.linkedin.com/advice/1/what-some-emerging-leadership-trends-theories
Title: What are the most effective strategies for handling a leadership transition?
Description: Learn six strategies to manage a leadership transition smoothly and successfully, from assessing the situation to planning for the future.
Article Link: https://www.linkedin.com/advice/0/what-most-effective-strategies-handling
Title: How do you combine quality assurance training with other learning initiatives?
Description: Learn some strategies and tips for integrating quality assurance training with other learning objectives and methods in your organization.
Article Link: https://www.linkedin.com/advice/0/how-do-you-combine-quality-assurance-training
…output omitted…
Todo o código deste tutorial está disponível neste repositório do GitHub.
O que considerar ao coletar dados do LinkedIn
O LinkedIn, como muitos outros sites, emprega várias técnicas para evitar a coleta automatizada de seus dados. Entender essas técnicas pode ajudar você a contorná-las e garantir que suas atividades de coleta de dados sejam bem-sucedidas:
- Paginação: o LinkedIn exibe os resultados de pesquisas em forma paginada. Certifique-se de que seu script de scraping manuseie a paginação para recuperar todos os dados relevantes.
- Anúncios: o LinkedIn exibe anúncios em várias seções. Certifique-se de que seu script de scraping seja direcionado a dados reais e evite extrair o conteúdo de anúncios.
- Limitação de taxa: o LinkedIn monitora o número de solicitações vindas de um endereço IP dentro de um determinado período. Se o número de solicitações exceder um limite especificado, o LinkedIn pode bloquear o endereço IP temporária ou permanentemente.
- CAPTCHA: o LinkedIn pode apresentar um desafio de CAPTCHA se detectar atividade incomum vindo de um endereço IP. Os CAPTCHAs são projetados para serem fáceis de resolver por humanos, mas difíceis para bots, evitando assim a coleta automatizada de dados.
- Exigência de login: alguns dados do LinkedIn só podem ser acessados depois de fazer login (p. ex., perfis de usuários e páginas de empresas). Isso significa que qualquer tentativa de coletar esses dados exigiria login automatizado, que o LinkedIn pode detectar e bloquear.
- Conteúdo dinâmico: o LinkedIn usa JavaScript para carregar alguns conteúdos dinamicamente. Isso pode dificultar a coleta, pois os dados podem não estar presentes no HTML quando a página é carregada inicialmente.
robots.txt
: o arquivorobots.txt
do LinkedIn especifica quais partes do site os rastreadores web (web crawlers) podem acessar. Embora não seja estritamente uma técnica de prevenção, ignorar as instruções desse arquivo pode fazer com que seu IP seja bloqueado.
Lembre-se de que, embora seja tecnicamente possível contornar essas técnicas, isso pode violar os termos de serviço do LinkedIn e fazer com que sua conta seja banida. Certifique-se sempre de que suas atividades de coleta de dados sejam lícitas e éticas.
Uma opção melhor: usar a Bright Data para coletar dados do LinkedIn
Embora a coleta de dados manual da web funcione para extração de dados em pequena escala, ela se torna demorada e ineficiente em larga escala. A Bright Data oferece uma alternativa mais simples e eficiente, permitindo que você acesse facilmente grandes quantidades de dados do LinkedIn.
A Bright Data oferece dois produtos principais para web scraping:
- Scraping Browser: o Scraping Browser é uma solução baseada em navegador que permite que você interaja com sites como um usuário comum. Ele lida com renderização de JavaScript, solicitações de AJAX e outras complexidades, tornando-o ideal para coletar dados de sites dinâmicos como o LinkedIn.
- Conjuntos de dados do LinkedIn: o conjunto de dados do LinkedIn é um conjunto pré-coletado e estruturado que contém dados do LinkedIn, incluindo vagas de empregos, perfis de usuários e informações de empresas. Você pode acessar e baixar os dados diretamente da plataforma Bright Data.
Cria uma conta na Bright Data
Para acessar o conjunto de dados do LinkedIn na plataforma Bright Data, siga estas etapas:
Crie uma conta no site da Bright Data clicando em Começar o teste grátis e seguindo as instruções.
Depois de fazer login, clique no ícone de cartão de crédito no painel de navegação esquerdo para acessar a página de Cobrança . Em seguida, adicione uma forma de pagamento para ativar sua conta:
Em seguida, clique no ícone de alfinete para abrir a página de Infraestrutura de Scraping e Proxies . Selecione Scraping Browser > Primeiros passos:
Dê um nome à sua solução e clique no botão Adicionar :
Selecione Parâmetros de acesso e anote seu nome de usuário, host e senha, pois você precisará deles na próxima etapa:
Depois de concluir todas essas etapas, você pode prosseguir para a próxima seção.
Coletar dados de empresas do LinkedIn usando o Scraping Browser
Para coletar dados da página de uma empresa no LinkedIn, crie um novo arquivo chamado scraper_linkedIn_bdata_company.py
e adicione o seguinte código:
import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_HOST'
browser_url = f'wss://{auth}@{host}'
async def main():
async with async_playwright() as pw:
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
print('goto')
await page.goto('https://www.linkedin.com/company/spacex/', timeout=120000)
print('done, evaluating')
# Get the entire HTML content
html_content = await page.evaluate('()=>document.documentElement.outerHTML')
# Parse the HTML with Beautiful Soup
soup = BeautifulSoup(html_content, 'html.parser')
# Extract the 'About us' description
description_element = soup.select_one('.core-section-container[data-test-id="about-us"] p[data-test-id="about-us__description"]')
description = description_element.text if description_element else None
print('Description:')
print(description)
# Extract the 'Company size'
company_size_element = soup.select_one('div[data-test-id="about-us__size"] dd')
company_size = company_size_element.text.strip() if company_size_element else None
print('Company size:')
print(company_size)
await browser.close()
# Run the async function
asyncio.run(main())
Nesse código, você usa a Playwright para automação do navegador. Você se conecta a um navegador Chromium através de um proxy, navega até a página da empresa SpaceX e extrai a descrição de Sobre nós e o Tamanho da empresa.
Para obter o conteúdo HTML, você usa o método de avaliação da Playwright e depois o analisa com Beautiful Soup para encontrar os elementos específicos e imprimir as informações extraídas. Você utiliza os recursos assíncronos da Playwright definindo uma função assíncrona chamada main ()
e inicia a execução do script com asyncio.run(main())
.
Observação: certifique-se de substituir
YOUR_BRIGHTDATA_USERNAME
,YOUR_BRIGHTDATA_PASSWORD
eYOUR_BRIGHTDATA_HOST
pelas credenciais de login corretas e específicas da sua conta na Bright Data. Essa etapa é crucial para autenticar e acessar sua conta com sucesso.
Abra seu shell ou terminal e execute o código com o seguinte comando:
python3 scraper_linkedIn_bdata_company.py
Você deve ter um resultado semelhante ao exemplo:
…output omitted…
Description:
SpaceX designs, manufactures and launches the world's most advanced rockets and spacecraft. The company was founded in 2002 by Elon Musk to revolutionize space transportation, with the ultimate goal of making life multiplanetary.
SpaceX has gained worldwide attention for a series of historic milestones. It is the only private company ever to return a spacecraft from low-Earth orbit, which it first accomplished in December 2010. The company made history again in May 2012 when its Dragon spacecraft attached to the International Space Station, exchanged cargo payloads, and returned safely to Earth — a technically challenging feat previously accomplished only by governments. Since then Dragon has delivered cargo to and from the space station multiple times, providing regular cargo resupply missions for NASA.
For more information, visit www.spacex.com.
Company size:
1,001-5,000 employees
A abordagem inicial que você usou para coletar dados do LinkedIn pode enfrentar desafios, incluindo pop-ups e reCAPTCHA, levando a possíveis bloqueios de código. Porém, usar o Scraping Browser da Bright Data permite que você supere esses obstáculos, garantindo uma coleta de dados ininterrupta.
Conjunto de dados do LinkedIn da Bright Data
Outra opção alternativa à coleta manual de dados envolve a compra de conjuntos de dados do LinkedIn, que fornecem acesso a dados pessoais valiosos, incluindo perfis de usuários e informações adicionais. Usar o conjunto de dados do LinkedIn da Bright Data elimina a necessidade de captura manual de dados da web, economiza tempo e fornece dados estruturados prontos para análise.
Para descobrir quais conjuntos de dados estão disponíveis, acesse seu Painel da Bright Data e clique em Conjuntos de Dados e Web Scraper IDE na barra de navegação esquerda e selecione Conjuntos de dados de perfis de pessoas do LinkedIn (dados públicos da web):
Agora, você pode aplicar filtros para refinar ainda mais suas escolhas e obter dados específicos que atendam aos seus critérios. Depois disso, clique em “Opções de compra” para ver quanto custará.
O preço é baseado no número de registros que você escolher, permitindo que personalize sua compra de acordo com suas necessidades e seu orçamento. Ao optar por comprar esses conjuntos de dados, você pode simplificar significativamente seu fluxo de trabalho, evitando o esforço manual de extração e coleta de dados:
Conclusão
Neste artigo, você aprendeu a coletar dados manualmente do LinkedIn usando Python e conheceu a Bright Data, uma solução que simplifica e acelera o processo de coleta de dados. Se estiver coletando dados para pesquisa de mercado, aquisição de talentos ou análise competitiva, essas ferramentas e técnicas podem ajudá-lo a reunir as informações de que precisa.
Lembre-se de que, embora a coleta manual de dados possa ser uma ferramenta poderosa, a Bright Data oferece uma alternativa mais simples e eficiente. Com o Scraping Browser e um conjunto de dados pré-coletados do LinkedIn, a Bright Data pode economizar tempo e esforço, permitindo que você se concentre no que realmente importa: usar os dados para tomar decisões informadas. Fale com um dos especialistas em dados da Bright Data para encontrar a solução ideal para você.
Não é necessário cartão de crédito