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