Stop guessing what′s working and start seeing it for yourself.
Login or register
Q&A
Question Center →

Um tutorial da Semalt: Web Scraping in Python

 

Visitei recentemente o KinoPoisk (versão russa da IMDB) e descobriu que, ao longo da anos, consegui avaliar mais de 1000 filmes. Eu pensei que seria interessante pesquisar esses dados mais detalhadamente: os gostos do meu filme mudaram ao longo do tempo? Durante o qual as estações do ano eu assisto mais filmes?

Mas antes de analisar e construir gráficos bonitos, precisamos obter os dados. Infelizmente, muitos serviços não têm API pública, então você tem que enrolar as mangas e analisar as páginas html.

Este artigo destina-se a quem sempre quis aprender a usar o Web Scrapping, mas não conseguiu as mãos sobre ele ou não sabia por onde começar.

Tarefa

Nossa tarefa é extrair os dados sobre filmes já vistos: o título do filme, a data e a hora de assistir, a classificação do usuário.

Na verdade, nosso trabalho será feito em 2 etapas:

Fase 1: baixe e salve páginas html

Etapa 2: analise html em um formato adequado para Análise posterior (csv, json, banco de dados de pandas, etc.)

Instrumentos

Existem muitas bibliotecas python para enviar pedidos http. O mais famoso e muito útil é o pedido.

Também é necessário escolher uma biblioteca para análise de HTML.

BeatifulSoup, lxml

Estas são as duas bibliotecas mais populares para analisar html e escolher uma delas é apenas uma preferência pessoal. Além disso, essas bibliotecas estão intimamente conectadas entre si: BeautifulSoup começou a usar lxml como analisador interno para aceleração, e em lxml, um módulo mais sofisticado foi adicionado. Para comparar as abordagens, analisarei os dados com o BeautifulSoup e usando os seletores XPath no módulo lxml.html.

Download de dados

Vamos começar a baixar dados. Antes de tudo, vamos tentar obter a página por url e salvá-la em um arquivo local.

Abrimos o arquivo resultante e vejo que não é tão simples: o site nos considerou um robô e não mostrará os dados.

Vamos descobrir como funciona o site

O navegador não tem nenhum problema em obter informações do site. Vamos ver como exatamente isso envia o pedido. Para fazer isso, usamos o painel "Rede" nas "Ferramentas para desenvolvedores" no navegador (eu uso o Firebug para isso), geralmente, o pedido que precisamos é o mais longo.

Como podemos ver, o navegador também envia para cabeçalhos UserAgent, cookie e outro número de parâmetros. Primeiro, tentaremos enviar o UserAgent correto para um cabeçalho.

Desta vez, temos sucesso, e agora recebemos os dados necessários. Vale a pena notar que às vezes o site também verifica a validade do cookie, caso em que as sessões na biblioteca de Solicitações ajudarão.

Download Todas as Taxas

Agora podemos salvar uma página com tarifas. Mas, geralmente, o usuário tem muitas taxas, e é necessário iterar em todas as páginas. O número da página que nos interessa é fácil de transferir diretamente para a url.

Coletando dados de Html

Agora vamos direto para a coleta de dados de html. A maneira mais fácil de entender como a página html está estruturada é usando a função "Inspecionar elemento" no navegador. Neste caso, tudo é bastante simples: toda a tabela com taxas está na etiqueta. Selecione este nó:

de bs4 Importar BeautifulSoup

de lxml importar html

# Beautiful Soup

sopa = BeautifulSoup (texto)

film_list = sop.find ('div', ('class': 'profileFilmsList'))

# lxml

tree = html.fromstring (texto)

film_list_lxml = tree.xpath ('// div [@class =' 'profileFilmList' ']') [0]

Vamos aprender a retirar o título russo do filme e um link para a página do filme (também como obter o texto e o valor do atributo).

Se você precisa extrair o título em inglês, basta alterar "nameRus" para "nameEng".

Resultados

Aprendemos a analisar sites, conhecer bibliotecas Requests, BeautifulSoup e lxml, bem como dados recebidos adequados para análises futuras de filmes já visualizados no KinoPoisk.

Post a comment

Post Your Comment
© 2013 - 2024, Semalt.com. All rights reserved

Skype

semaltcompany

WhatsApp

16468937756

Telegram

Semaltsupport