paint-brush
Como construir um Python Web Scraper: raspe dados de qualquer sitepor@terieyenike
8,557 leituras
8,557 leituras

Como construir um Python Web Scraper: raspe dados de qualquer site

por Teri4m2022/09/08
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

O Python permite que você raspe ou pegue dados de um site com um script Python. Este método de coleta de dados é chamado de web scraping. A maioria dos sites não quer que você raspe seus dados e, para descobrir o que é legal e permitido para a extração, os sites têm uma página dedicada que mostra detalhes dos endpoints permitidos. Neste exercício, raspamos a página inicial do conteúdo de notícias, o que podemos fazer de acordo com o agente do usuário. Com todo o script escrito, nossa página deve coletar os dados da página inicial de notícias do YCombinator.
featured image - Como construir um Python Web Scraper: raspe dados de qualquer site
Teri HackerNoon profile picture

Neste artigo, construiremos um programa que permite que você raspe ou obtenha dados de um site com um script Python. Este método de coleta de dados é chamado de web scraping.

A raspagem da Web tem tudo a ver com o uso programático do Python ou de qualquer outra linguagem de programação para baixar, limpar e usar os dados de uma página da web. A maioria dos sites não quer que você raspe seus dados e, para descobrir o que é legal e permitido para a raspagem, os sites têm uma página dedicada que mostra detalhes dos endpoints permitidos.

Anexe robots.txt ao final de qualquer link para saber mais sobre os endpoints permitidos. Por exemplo, vamos usar https://news.ycombinator.com/robots.txt .

O resultado deve ficar assim com este arquivo de texto abaixo:

A captura de tela indica quais endpoints podemos e não podemos extrair do site do YCombinator. Um atraso de rastreamento significa uma pausa ao coletar dados do site com programas, não sobrecarregando seus servidores e diminuindo a velocidade do site devido à captura constante.

Neste exercício, raspamos a página inicial do conteúdo de notícias, o que podemos fazer de acordo com o agente do usuário.

Começando

O raspador da web Python requer dois módulos necessários para raspar os dados:

  • bela sopa
  • solicitações de

bela sopa

Beautiful Soup é uma biblioteca Python para extrair dados de arquivos HTML. Ele modifica o arquivo usando um analisador, transforma os dados em um documento valioso e economiza horas de trabalho manual e repetitivo dos programadores.

solicitações de

A biblioteca HTTP request é para baixar arquivos HTML usando o link para o site com o

 .get()
função.

Criando um Web Scraper

Agora, para o âmago da questão deste projeto. Crie um novo diretório e, nele, um arquivo que conterá todos os scripts do programa web scraper.

Copie e cole o seguinte código:

 # app.py import requests response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text print(yc_web_page)

O código acima faz o seguinte:

  • Importando o
     requests
    módulo
  • Usando a variável de resposta, as solicitações anexadas ao
     .get()
    função baixar os arquivos HTML do link do site fornecido
  • Lendo o conteúdo da página da web com
     .text

Se você executar este código com o comando python

 app.py
e não fornecer nenhuma saída, significa que os dois módulos importados precisam ser instalados.

Execute os seguintes comandos para instalar os módulos.

 pip3 install requests pip install beautifulsoup4

O resultado do código-fonte deve ficar assim:

Em seguida, vamos atualizar o

 app.py
arquivo com o restante do código usando beautiful soup:

 # main.py import requests from bs4 import BeautifulSoup # add this
response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text # add this 
soup = BeautifulSoup(yc_web_page, 'html.parser' ) article_tag = soup.find(name= "a" , class_= 'titlelink' ) article_title = article_tag.get_text() article_link = article_tag.get( 'href' ) article_upvote = soup.find(name= "span" , class_= "score" ).get_text() result = {  "title" : article_title,  "link" : article_link,  "point" : article_upvote } print(result)

Siga o trecho de código acima fazendo o seguinte::

  • Importe a função BeautifulSoup do módulo bs4
  • Em seguida, use a variável soup para analisar o documento do
     yc_web_page
    usando a função BeautifulSoup e
     html.parser
    para obter os arquivos HTML

Antes de passar pelo restante do código, vamos abrir nosso navegador da Web com o link fornecido em

 .get()

Em seguida, clique com o botão direito do mouse na página e clique em inspecionar para visualizar a guia de elementos da página de notícias do YCombinator .

Nossa página web deve ficar assim:

Com Beautiful Soup, podemos direcionar elementos específicos na página com seus nomes de classe:

  • Ao atribuir a variável article_tag, cada elemento da página tem um nome de tag usando o
     find()
    função com o nome do elemento, a tag a e o
     class_
    com um sublinhado. Isso é feito para evitar uma substituição da classe no elemento na página da web
  • Agora, queremos extrair um dos títulos de link do
     article_tag
    usando o
     .get_text()
    função
  • Em seguida, extraia o link do
     article_tag
    usando o atributo
     href
    com o
     .get()
    função
  • O mesmo se aplica ao
     article_upvote
    variável, onde o nome da tag,
     <span>
    , e o nome da classe são usados para extrair os pontos para cada link de artigo
  • Crie um resultado variável que exibirá os dados extraídos como um dicionário com o par de chave e valor
  • Imprima o resultado final

Com todo o script escrito, nossa página deve extrair os dados da página inicial de notícias do YCombinator e ficar assim:

Conclusão

Este artigo ensinou como usar o raspador da web Python para extrair dados de uma página da web.

Além disso, as funcionalidades de usar um raspador da web são que ele economiza tempo e esforço na produção de grandes conjuntos de dados mais rapidamente do que manualmente.

Saber mais