Raspe um site com este lindo tutorial de sopa de python

Raspe um site com este lindo tutorial de sopa de python

Beautiful Soup é uma biblioteca Python de código aberto. Ele usa analisadores de navegação para raspar o conteúdo de arquivos XML e HTML. Você precisa de dados para vários fins analíticos. No entanto, se você é novo em Python e web scraping, vale a pena experimentar a biblioteca Beautiful Soup do Python para um projeto de web scraping.





Com a biblioteca Beautiful Soup de código-fonte aberto do Python, você pode obter dados copiando qualquer parte ou elemento de uma página da web com controle máximo sobre o processo. Neste artigo, veremos como você pode usar o Beautiful Soup para raspar um site.





Como instalar a bela sopa e começar a utilizá-la

Antes de prosseguirmos, neste artigo do tutorial da Beautiful Soup, usaremos Python 3 e bela sopa 4 , a última versão de Beautiful Soup. Certifique-se de que você criar um ambiente virtual Python para isolar seu projeto e seus pacotes daqueles em sua máquina local.





como consertar arquivos de vídeo corrompidos

Para começar, você deve instalar a biblioteca Beautiful Soup em seu ambiente virtual. Beautiful Soup está disponível como um pacote PyPi para todos os sistemas operacionais, então você pode instalá-lo com o pip instalar beautifulsoup4 comando através do terminal.

No entanto, se você estiver no Debian ou Linux, o comando acima ainda funciona, mas você pode instalá-lo com o gerenciador de pacotes executando apt-get install python3-bs4 .



Beautiful Soup não raspa URLs diretamente. Ele só funciona com arquivos HTML ou XML prontos. Isso significa que você não pode passar um URL direto para ele. Para resolver esse problema, você precisa obter a URL do site de destino com a biblioteca de solicitações do Python antes de alimentá-la com a Beautiful Soup.

Para disponibilizar essa biblioteca para o seu raspador, execute o pedidos de instalação pip comando através do terminal.





Para usar a biblioteca do analisador XML, execute pip install lxml para instalá-lo.

Inspecione a página da web que você deseja raspar

Antes de limpar qualquer site com o qual você não está familiarizado, uma prática recomendada é inspecionar seus elementos. Você pode fazer isso mudando seu navegador para o modo de desenvolvedor. É muito fácil usar Chrome DevTools se você estiver usando o Google Chrome.





No entanto, é necessário inspecionar uma página da web para saber mais sobre suas tags, atributos, classes e ids HTML. Isso expõe os principais elementos de uma página da web e seus tipos de conteúdo.

Também ajuda a desenvolver as melhores estratégias que você pode usar para obter os dados exatos que deseja de um site e como obtê-los.

Como raspar os dados de um site com uma sopa bonita

Agora que você tem tudo pronto e pronto, abra um editor de código de sua preferência e crie um novo arquivo Python, dando a ele um nome escolhido. No entanto, você também pode fazer uso de IDEs baseados na web, como o Jupyter Notebook se você não estiver familiarizado com a execução do Python por meio da linha de comando.

Em seguida, importe as bibliotecas necessárias:

from bs4 import BeautifulSoup
import requests

Primeiro, vamos ver como funciona a biblioteca de solicitações:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Quando você executa o código acima, ele retorna um status 200, indicando que sua solicitação foi bem-sucedida. Caso contrário, você obtém um status 400 ou alguns outros status de erro que indicam uma falha na solicitação GET.

Lembre-se de sempre substituir o URL do site entre parênteses pelo seu URL de destino.

Depois de obter o site com o pegue pedido, você então o passa para a Beautiful Soup, que agora pode ler o conteúdo como arquivos HTML ou XML usando seu XML ou analisador HTML embutido, dependendo do formato escolhido.

Dê uma olhada neste próximo snippet de código para ver como fazer isso com o analisador HTML:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

O código acima retorna todo o DOM de uma página da web com seu conteúdo.

Você também pode obter uma versão mais alinhada do DOM usando o embelezar método. Você pode tentar isso para ver o resultado:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Você também pode obter o conteúdo puro de uma página da web sem carregar seu elemento com o .texto método:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Como raspar o conteúdo de uma página da web pelo nome da tag

Você também pode raspar o conteúdo em uma tag específica com Beautiful Soup. Para fazer isso, você precisa incluir o nome da tag de destino em sua solicitação de raspador de sopa bonita.

Por exemplo, vamos ver como você pode obter o conteúdo no H2 tags de uma página da web.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

No snippet de código acima, sopa.h2 retorna o primeiro H2 elemento da página da web e ignora o resto. Para carregar todos os H2 elementos, você pode usar o encontrar tudo função embutida e o para loop de Python:

como tornar o google chrome padrão
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Esse bloco de código retorna todos H2 elementos e seu conteúdo. No entanto, você pode obter o conteúdo sem carregar a tag usando o .fragmento método:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Você pode usar este método para qualquer tag HTML. Tudo que você precisa fazer é substituir o H2 tag com o que você gosta.

No entanto, você também pode raspar mais tags passando uma lista de tags para o encontrar tudo método. Por exemplo, o bloco de código abaixo raspa o conteúdo de para , H2 , e título Tag:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Como raspar uma página da web usando o ID e o nome da classe

Depois de inspecionar um site com as DevTools, ele permite que você saiba mais sobre os atributos de id e classe que mantêm cada elemento em seu DOM. Depois de ter essa informação, você pode raspar a página da web usando este método. É útil quando o conteúdo de um componente de destino está saindo do banco de dados.

Você pode usar o achar método para os raspadores de id e classe. Ao contrário do encontrar tudo método que retorna um objeto iterável, o achar método funciona em um único destino não iterável, que é o Eu iria nesse caso. Então, você não precisa usar o para fazer um laço com ele.

Vejamos um exemplo de como você pode raspar o conteúdo de uma página abaixo usando o id:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Para fazer isso para um nome de classe, substitua o Eu iria com classe . No entanto, escrevendo classe resulta diretamente em confusão de sintaxe, visto que o Python a vê como uma palavra-chave. Para contornar esse erro, você precisa escrever um sublinhado na frente da classe como este: classe_ .

Em essência, a linha que contém o id se torna:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

No entanto, você também pode raspar uma página da web chamando um nome de tag específico com seu ID ou classe correspondente:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Como fazer um raspador reutilizável com uma bela sopa

Você pode criar uma classe e colocar todo o código anterior junto em uma função nessa classe para fazer um raspador reutilizável que obtém o conteúdo de algumas tags e seus ids. Podemos fazer isso criando uma função que aceita cinco argumentos: um URL, dois nomes de tag e seus ids ou classes correspondentes.

Suponha que você queira raspar o preço das camisas de um site de comércio eletrônico. O exemplo de classe de raspador abaixo extrai as tags de preço e camisa com seus IDs ou classes correspondentes e, em seguida, retorna como um quadro de dados Pandas com 'Preço' e Shirt_name como os nomes das colunas.

Certifique-se de que você pip instalar pandas através do terminal, caso ainda não o tenha feito.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

O raspador que você acabou de fazer é um módulo reutilizável e você pode importá-lo e usá-lo em outro arquivo Python. Para chamar o raspar função de sua classe, você usa scrapeit.scrape ('URL do site', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Se você não fornecer o URL e outros parâmetros, o outro declaração solicita que você faça isso.

Para usar esse scaper em outro arquivo Python, você pode importá-lo assim:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Observação: scraper_module é o nome do arquivo Python que contém a classe scraper.

Você também pode verificar o Documentação da bela sopa se quiser se aprofundar em como fazer o melhor uso dele.

A bela sopa é uma valiosa ferramenta de raspagem de teia

Beautiful Soup é um poderoso raspador de tela em Python que oferece controle sobre como os dados chegam durante a coleta. É uma ferramenta de negócios valiosa, pois pode fornecer acesso aos dados da web do concorrente, como preços, tendências de mercado e muito mais.

como converter um png para pdf

Embora tenhamos feito um raspador de tag neste artigo, você ainda pode brincar com esta poderosa biblioteca Python para fazer ferramentas de raspagem mais úteis.

Compartilhado Compartilhado Tweet O email As melhores ferramentas online para Web Scraping

Precisa coletar dados de sites para fins analíticos? Essas ferramentas de web scraping tornam isso mais fácil.

Leia a seguir
Tópicos relacionados
  • Programação
  • Pitão
Sobre o autor Idisou Omisola(94 artigos publicados)

Idowu é apaixonado por qualquer tecnologia inteligente e produtividade. Em seu tempo livre, ele brinca com codificação e muda para o tabuleiro de xadrez quando está entediado, mas também adora quebrar a rotina de vez em quando. Sua paixão por mostrar às pessoas o caminho da tecnologia moderna o motiva a escrever mais.

Mais de Idowu Omisola

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever