Estou procurando um módulo Parser HTML para Python que possa me ajudar a obter as tags na forma de listas / dicionários / objetos em Python.
Se eu tiver um documento do formulário:
<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
então, ele deve me dar uma maneira de acessar as tags aninhadas por meio do nome ou ID da tag HTML, para que eu possa basicamente solicitar que o conteúdo / texto da div
tag class='container'
contido na body
tag ou algo semelhante.
Se você usou o recurso "Inspecionar elemento" do Firefox (visualizar HTML), saberia que ele fornece todas as tags de maneira agradável e aninhada, como uma árvore.
Eu preferiria um módulo interno, mas isso pode estar pedindo um pouco demais.
Passei por muitas perguntas sobre o Stack Overflow e alguns blogs na Internet, e a maioria deles sugere BeautifulSoup ou lxml ou HTMLParser, mas poucos detalham a funcionalidade e simplesmente terminam como um debate sobre qual deles é mais rápido / eficaz.
fonte
Respostas:
Acho que você não precisa de descrições de desempenho - basta ler como o BeautifulSoup funciona. Veja a documentação oficial .
fonte
from bs4 import BeautifulSoup
lxml
biblioteca (veja a resposta abaixo). Comcssselect
isso, é bastante útil também e o desempenho costuma ser 10 a 100 vezes melhor do que as outras bibliotecas disponíveis.class
atributo é especial:BeautifulSoup(html).find('div', 'container').text
Eu acho que o que você está procurando é pyquery :
Um exemplo do que você deseja pode ser:
E usa os mesmos seletores do elemento de inspeção do Firefox ou Chrome. Por exemplo:
O seletor de elemento inspecionado é 'div # mw-head.noprint'. Portanto, no pyquery, você só precisa passar neste seletor:
fonte
Aqui você pode ler mais sobre os diferentes analisadores de HTML no Python e seu desempenho. Embora o artigo seja um pouco datado, ele ainda oferece uma boa visão geral.
Desempenho do analisador HTML do Python
Eu recomendaria o BeautifulSoup mesmo que não esteja incorporado. Só porque é muito fácil trabalhar com esses tipos de tarefas. Por exemplo:
fonte
from bs4 import BeautifulSoup
Comparado com as outras bibliotecas do analisador,
lxml
é extremamente rápido:E
cssselect
também é fácil de usar para raspar páginas HTML:Documentação lxml.html
fonte
import requests
, save buffer para file: stackoverflow.com/a/14114741/1518921 (ou urllib), após a carga arquivo salvo usando análise,doc = parse('localfile.html').getroot()
1.7
pouco, mas a aplicação do lxml o aumentou quase*100
vezes MAIS RAPIDAMENTE! Se se preocupa com desempenho, lxml é a melhor opçãoEu recomendo o lxml para analisar o HTML. Consulte "Analisando HTML" (no site lxml).
Na minha experiência, a Beautiful Soup mexe com alguns HTML complexos. Acredito que é porque Beautiful Soup não é um analisador, mas um analisador de cordas muito bom.
fonte
Eu recomendo usar a biblioteca justext :
https://github.com/miso-belica/jusText
Uso: Python2:
Python3:
fonte
Eu usaria EHP
https://github.com/iogf/ehp
Aqui está:
Resultado:
fonte