Guia do iniciante para Web Scraping em Python (usando BeautifulSoup)

Conteúdo

Visão geral

  • Aprenda web scraping em Python usando a biblioteca BeautifulSoup
  • Web Scraping é uma técnica útil para converter dados não estruturados na web em dados estruturados
  • BeautifulSoup é uma biblioteca eficiente disponível em Python para executar arranhões da web diferentes urllib
  • Um conhecimento básico de HTML e tags HTML é necessário para fazer web scraping em Python

Introdução

A necessidade e a importância de extrair dados da web estão se tornando mais fortes e claras. A cada poucas semanas, Estou em uma situação em que precisamos extrair dados da web para construir um modelo de aprendizado de máquina.

Por exemplo, na semana passada, estávamos pensando em criar um índice de coceira e sentimento em vários cursos de ciência de dados disponível na internet. Isso não exigiria apenas encontrar novos cursos!, mas também pesquise na web por seus comentários e, em seguida, resuma-os em algumas métricas!

Este é um dos problemas / produtos cuja eficácia depende mais de web scraping e extração de informações (coleta de dados) qual das técnicas usadas para resumir os dados.

Observação: Também criamos um curso gratuito para este artigo: Introdução ao web scraping com Python. Este formato estruturado ajudará você a aprender melhor.

Maneiras de extrair informações da web

Existem várias maneiras de extrair informações da web. Uso de APIs sendo provavelmente a melhor maneira de extrair dados de um site. Quase todos os grandes sites como o Twitter, Facebook, Google, Twitter, StackOverflow fornece APIs para acessar seus dados de uma forma mais estruturada. Se você puder obter o que precisa por meio de uma API, quase sempre é a abordagem preferida sobre web scraping. Isso ocorre porque se você acessar dados estruturados do provedor, Por que você deseja criar um mecanismo para extrair as mesmas informações?

Lamentavelmente, nem todos os sites fornecem uma API. Alguns fazem isso porque não querem que os leitores extraiam muitas informações de uma forma estruturada, enquanto outros não fornecem API devido à falta de conhecimento técnico. O que você faz nesses casos? Nós vamos, precisamos raspar o site para obter as informações.

Pode haver outras maneiras, como feeds RSS, mas seu uso é limitado e, portanto, Não vou incluí-los na discussão aqui.

admin-ajax-6170451

O que é Web Scraping?

Web scraping é uma técnica de software de computador para extrair informações de sites. Esta técnica é focada principalmente na transformação de dados não estruturados (Formato HTML) na web em dados estruturados (banco de dados ou planilha).

Você pode realizar web scraping de várias maneiras, incluindo o uso do Google Docs em quase todas as linguagens de programação. Eu recorreria ao Python por sua facilidade e rico ecossistema. Tem uma biblioteca conhecida como 'BeautifulSoup’ o que ajuda nesta tarefa. Neste artigo, vou mostrar a maneira mais fácil de aprender web scraping usando programação python.

Para aqueles que precisam de uma maneira não programada para extrair informações de páginas da web, eles também podem olhar import.io . Fornece uma interface guiada por GUI para realizar todas as operações básicas de web scraping. Os hackers podem continuar lendo este artigo!!

Bibliotecas necessárias para web scraping

Como sabemos, Piton é uma linguagem de programação de código aberto. Você pode encontrar muitas bibliotecas para realizar uma função. Portanto, você precisa encontrar a melhor biblioteca para usar. eu prefiro Sopa linda (Biblioteca Python), porque é fácil e intuitivo trabalhar nisso. Precisamente, vou usar dois módulos python para extrair dados:

  • Urllib2: É um módulo Python que pode ser usado para pesquisar URL. Defina funções e classes para ajudar com ações de URL (autenticação básica e sumária, redireciona, biscoitos, etc.). Para mais detalhes, Veja o página de documentação. Observação: urllib2 é o nome da biblioteca incluída no Python 2. Em seu lugar, você pode usar a biblioteca urllib.request incluída com python 3. A biblioteca urllib.request funciona da mesma maneira que urllib.request funciona em Python 2. Porque é já incluído não há necessidade de instalar.
  • BeautifulSoup: É uma ferramenta incrível para extrair informações de uma página da web. Você pode usá-lo para extrair tabelas, listas, parágrafo e você também pode colocar filtros para extrair informações de páginas da web. Neste artigo, usaremos a versão mais recente do BeautifulSoup 4. Você pode consultar as instruções de instalação em seu página de documentação.

A BeautifulSoup não pesquisa o site por nós. Por isso, Eu uso urllib2 em combinação com a biblioteca BeautifulSoup.

Piton tem várias outras opções para extração de HTML além de BeatifulSoup. Aqui estão alguns outros:

Conceitos básicos: familiarize-se com HTML (rótulos)

Enquanto fazemos a web robusta, nós cuidamos das tags html. Portanto, devemos entendê-los bem. Se você já conhece o básico de HTML, você pode pular esta seção. Abaixo está a sintaxe básica do HTML:html-7707012Esta sintaxe possui várias tags que são detalhadas abaixo:

  1. : Os documentos HTML devem começar com uma declaração de tipo
  2. O documento HTML está contido entre e
  3. A parte visível do documento HTML está entre e
  4. Os cabeçalhos HTML são definidos com o

    para

    rótulos

  5. Os parágrafos HTML são definidos com o

    rótulo

Outras tags HTML úteis são:

  1. Os links HTML são definidos com o rótulo, “<uma href =“Http://www.test.com”>Este é um link para test.com</uma> ”
  2. As tabelas HTML são definidas com, linha como
    e as linhas são divididas em dados como

    está dentro da etiqueta

    tabela-9656416
  3. A lista HTML começa com
  4. )
    estrutura-6561345Acima, você pode notar que o segundo elemento de

    , não

    , então devemos cuidar disso. Agora, para acessar o valor de cada elemento, vamos usar a opção “procurar (text = True)” com cada elemento. Vamos ver o código:
    #Gerar listas
    A =[]
    B =[]
    C =[]
    D =[]
    E =[]
    F =[]
    G =[]
    para linha em right_table.findAll("tr"):
        células = row.findAll('td')
        states = row.findAll('º') #Para armazenar os dados da segunda coluna
        se len(células)== 6: #Extraia apenas o corpo da tabela, não o título
            A. anexar(células[0].achar(text = True))
            B. anexar(estados[0].achar(text = True))
            C.append(células[1].achar(text = True))
            D.append(células[2].achar(text = True))
            E. anexar(células[3].achar(text = True))
            F. anexar(células[4].achar(text = True))
            G.append(células[5].achar(text = True))
    #importe pandas para converter a lista em data frame
    importar pandas como pd
    df = pd.DataFrame(UMA,colunas =['Número'])
    df['State / UT']= B
    df['Admin_Capital']= C
    df['Legislative_Capital']= D
    df['Judiciary_Capital']= E
    df['Year_Capital']= F
    df['Former_Capital']= G
    df
    

    Finalmente, temos dados no quadro de dados:
    output-6122649
    Do mesmo modo, você pode realizar outros tipos de web scraping usando “Sopa linda“. Isso reduzirá seus esforços manuais para coletar dados de páginas da web.. Você também pode olhar para outros atributos, como .parent, .conteúdo, .descendentes y .next_sibling, .prev_sibling e vários atributos para navegar usando o nome da tag. Isso o ajudará a remover páginas da web de forma eficaz.

    Mas, Por que não posso usar regex?

    Agora, se você conhece expressões regulares, você pode estar pensando que pode escrever código usando regex que pode fazer o mesmo por você. Eu definitivamente tinha essa pergunta. Na minha experiência com BeautifulSoup e regex para fazer o mesmo, Eu descobri:

    • O código escrito em BeautifulSoup geralmente é mais robusto do que o código escrito com expressões regulares. Códigos escritos com expressões regulares devem ser modificados com quaisquer mudanças nas páginas. Até a BeautifulSoup precisa disso em alguns casos, é que BeautifulSoup é relativamente melhor.
    • Expressões regulares são muito mais rápidas do que BeautifulSoup, geralmente por um fator de 100 para dar o mesmo resultado.

    Portanto, tudo se resume a velocidade versus robustez do código e não há um vencedor universal aqui. Se as informações que você está procurando podem ser extraídas com declarações simples de regex, você deve ir em frente e usá-los. Para quase qualquer trabalho complexo, Eu geralmente recomendo BeautifulSoup mais do que regex.

    Nota final

    Neste artigo, analisamos os métodos de web scraping que eles usam “BeautifulSoup” e “urllib2” e Python. Também analisamos os fundamentos do HTML e executamos a web scraping passo a passo enquanto resolvíamos um desafio.. Eu recomendo que você pratique isso e use-o para coletar dados de páginas da web.

    Você acha útil este artigo? Compartilhe suas opiniões / pensamentos na seção de comentários abaixo.

    Observação: Também criamos um curso gratuito para este artigo: Introdução ao web scraping com Python. Este formato estruturado ajudará você a aprender melhor.

    Se você gostou do que acabou de ler e deseja continuar seu aprendizado sobre análise, inscreva-se em nossos e-mails, Siga-nos no Twitter ou como o nosso página do Facebook.

    Assine a nossa newsletter

    Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.