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 . 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( '//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( '//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