Guia de Web Scraping com Python usando Beautiful Soup
Publicados: 2020-06-23Introdução ao Web Scraping com Python:
Quando se trata de web scraping, algumas linguagens de programação são preferidas em relação a outras. Um dos mais populares entre eles é o Python. Além de ser uma das linguagens mais fáceis de aprender devido à sua curva de aprendizado mais suave, também tem a vantagem de ser uma linguagem com suporte massivo ao desenvolvedor - o que levou a vários pacotes de terceiros. Esses pacotes podem ser usados para várias funcionalidades, o que pode ser difícil de executar com o núcleo do Python. Alguns exemplos comuns são: para processamento de imagens ou visão computacional, usamos OpenCV, para aprendizado de máquina, usamos TensorFlow e para plotagem de gráficos, usamos MatplotLib. Quando se trata de web scraping, uma das bibliotecas mais usadas é a BeautifulSoup. Essa biblioteca não extrai dados da Internet especificamente, mas caso você consiga obter o arquivo HTML de uma página da Web, ela pode ajudar a extrair pontos de dados específicos dela. Em geral, a biblioteca é usada para extrair pontos de dados de documentos XML e HTML.
Como o BeautifulSoup funciona?
Antes de escrever código em Python, você precisa entender como o BeautifulSoup funciona. Depois de extrair o conteúdo HTML de uma página da Web e armazená-lo em uma variável, digamos html_obj, você pode convertê-lo em um objeto BeautifulSoup com apenas uma linha de código.
| sopa_obj = BeautifulSoup(html_obj, 'html.parser') |
Onde html_obj são os dados HTML, o soup_obj é o objeto bs que foi obtido e o “html.parser” é o analisador que foi usado para fazer a conversão. Uma vez que você tenha o objeto bs, chamado soup_obj, percorrê-lo é muito fácil e, como percorrê-lo é bastante simples, a extração de dados também se torna simples. Tomemos um exemplo. Digamos que você precise buscar um ponto de dados chamado título do produto, que está presente em todas as páginas de um site de comércio eletrônico. Agora você baixou uma única página de produto HTML desse site e percebeu que cada página tem o nome do produto mencionado em um elemento do tipo span com id como productTitle. Então, como você buscará esses dados de, digamos, 1.000 páginas de produtos? Bem, você obterá os dados HTML para cada página e obterá o ponto de dados dessa maneira -
| para períodos em soup.findAll('span', attrs={'id': 'productTitle'}): name_of_product = spans.text.strip() |
Embora essa seja uma maneira de obter dados textuais presentes entre um determinado elemento de tag, você também pode buscar dados de atributos de uma tag.

Como extrair dados de páginas da Web usando o BeautifulSoup?
Agora que temos algum entendimento básico de como um objeto bs é percorrido, vamos escrever algum código e ver como ele funciona. Usando o trecho de código abaixo, você pode extrair dados do Zillow, um mercado imobiliário líder com sede nos EUA com muita facilidade. Você pode executar esse código e inserir a URL de uma listagem para obter os dados de saída em um formato JSON. Vamos entender o código, linha por linha. Primeiramente, certifique-se de ter o Python 3.7 ou superior instalado em sua máquina. Use pip para instalar o BeautifulSoup. Todos os outros pacotes vêm pré-empacotados com o Python, então você não precisará instalar nenhum deles. Uma vez feito, instale um editor de código como Atom ou VS Code, e você está pronto para começar. Entender o código é importante e, portanto, começaremos desde a primeira linha. Você precisa das quatro instruções de importação para uma funcionalidade específica. Em seguida, você tem três linhas começando com “ctx”. Eles são especificamente para ignorar os erros de certificado SSL que você pode enfrentar ao acessar sites por meio do seu código. Em seguida, pegamos a URL do site como entrada do usuário. Aqui você também pode codificar o URL ou até mesmo ter uma variedade de vários URLs.
Processo de raspagem da Web:
Em seguida, acessamos a página da Web usando a função Request de urllib. Certifique-se de adicionar o User-Agent no cabeçalho para fazer o site acreditar que você está usando um navegador. A razão por trás disso é que os sites devem ser acessados por navegadores e não por código e, portanto, eles podem bloquear seu IP se pegarem você. Feito isso, completamos todas as etapas básicas e, em seguida, estaremos convertendo o objeto HTML em um objeto bs e, em seguida, embelezando-o no formato utf-8, para lidar com caracteres e símbolos especiais na página da web. Feito isso, extraímos o título, os detalhes curtos e outras propriedades analisando o objeto bs. Como você pode ver, na tag de script com atributo type = application/ld+json, existem vários pontos de dados armazenados em um formato JSON. Além disso, você pode ver que usamos uma verificação i==0 e i==1. Isso ocorre porque existem duas tags de script (com o mesmo atributo) como esta em uma página. A primeira tag nos dá alguns pontos de dados, enquanto a segunda dá o resto. Depois de extrair todos os pontos de dados, você pode armazená-los em um arquivo JSON e salvá-los como temos. Você também pode salvar, carregá-lo em um site ou até mesmo acessar uma API com os dados, se desejar.

| importar json importar ssl de urllib.request solicitação de importação, urlopen de bs4 importe BeautifulSoup # Ignora erros de certificado SSL # Pegue o URL da listagem Zillow como entrada # Faça o site acreditar que você está usando um navegador # Página HTML -> BeautifulSoup Object sopa = BeautifulSoup(página da web, 'html.parser') # Extraia diferentes pontos de dados da listagem de propriedades para meta em soup.findAll('meta', attrs={'name': 'description'}): para div em soup.findAll('div', attrs={'class': 'character-count-truncated'}): for (i, script) em enumerate(soup.findAll('script', com open('house_listing_data.json', 'w') como outfile: com open('house_listing_data.html', 'wb') como arquivo: print('———-A extração dos dados foi concluída. Verifique o arquivo json.———-') |
O JSON de saída deve se parecer com isso-
| { “details_long”: { “no_of_rooms”: 3, “floor_size_in_sqrft”: “1.392” }, "Morada": { “rua”: “22516 Joan Dr”, “localidade”: “Califórnia”, “região”: “MD”, “postal_code”: “20619” }, “Título”: “22516 Joan Dr, Califórnia, MD 20619 | MLS #MDSM167670”, “details_short”: “22516 Joan Dr , Califórnia, MD 20619-3175 é uma casa unifamiliar listada à venda por US$ 150.000. A casa de 1.392 pés quadrados é uma propriedade de 3 quartos e 2 banheiros. Encontre 40 fotos da casa 22516 de Joan Dr em Zillow. Veja mais detalhes da propriedade, histórico de vendas e dados Zestimate no Zillow. MLS # MDSM167670”, “preço_em_dólares”: 150.000, “inage”: “https://photos.zillowstatic.com/p_h/ISn2oi3glpvdv10000000000.jpg” } |
Conclusão:
Usar o BeautifulSoup para suas necessidades de web-scraping pode ser fácil, desde que você possa analisar as páginas HTML manualmente no início e decidir sobre as tags que precisam ser direcionadas. Ele pode funcionar em páginas que não possuem conteúdo dinâmico e não ficam atrás de uma página de login. Para páginas da Web mais complexas, você precisará de ferramentas mais complexas. Nossa equipe da PromptCloud ajuda as empresas que buscam alavancar dados e tomar decisões baseadas em dados. Não apenas ajudamos a configurar mecanismos de web scraping totalmente automatizados que são executados em intervalos frequentes, na nuvem, mas também ajudamos as empresas a analisar os dados para extrair tendências e outras informações úteis.
