soup.find("tagName", { "id" : "articlebody" })
Por que isso NÃO retorna as <div id="articlebody"> ... </div>
tags e outras coisas no meio? Não retorna nada. E eu sei de fato que existe, porque eu estou olhando direto para ele
soup.prettify()
soup.find("div", { "id" : "articlebody" })
também não funciona.
( EDIT: descobri que o BeautifulSoup não estava analisando corretamente minha página, o que provavelmente significa que a página que eu estava tentando analisar não está formatada corretamente em SGML ou o que for)
python
beautifulsoup
Tony Stark
fonte
fonte
Respostas:
Você deve postar seu documento de exemplo, porque o código funciona bem:
Encontrar
<div>
s dentro de<div>
s também funciona:fonte
div = soup.find(id="articlebody")
soup.find('div', id='articlebody')
Para encontrar um elemento por
id
:fonte
O Beautiful Soup 4 suporta a maioria dos seletores de CSS com o
.select()
método , portanto, você pode usar umid
seletor como:Se você precisar especificar o tipo do elemento, poderá adicionar um seletor de tipo antes do
id
seletor:O
.select()
método retornará uma coleção de elementos, o que significa que retornaria os mesmos resultados do exemplo de.find_all()
método a seguir:Se você deseja selecionar apenas um único elemento, basta usar o
.find()
método :fonte
Acho que há um problema quando as tags 'div' estão muito aninhadas. Estou tentando analisar alguns contatos de um arquivo html do facebook e o Beautifulsoup não consegue encontrar as tags "div" com a classe "fcontent".
Isso acontece com outras classes também. Quando procuro divs em geral, ele gira apenas aqueles que não são muito aninhados.
O código-fonte html pode ser qualquer página do facebook da lista de amigos de um amigo seu (não o de seus amigos). Se alguém puder testá-lo e dar alguns conselhos, eu realmente aprecio isso.
Este é o meu código, onde apenas tento imprimir o número de tags "div" com a classe "fcontent":
fonte
Provavelmente, devido ao analisador de beautifulsoup padrão, há um problema. Altere um analisador diferente, como 'lxml' e tente novamente.
fonte
soup = BeautifulSoup(data, parser="html.parser")
Na fonte beautifulsoup, essa linha permite que os divs sejam aninhados dentro de divs; portanto, sua preocupação com o comentário de lukas não seria válida.
O que eu acho que você precisa fazer é especificar os atributos que você deseja, como
fonte
você já tentou
soup.findAll("div", {"id": "articlebody"})
?parece loucura, mas se você está pegando coisas do nada, não pode excluir vários divs ...
fonte
Eu usei:
Como minha sintaxe para encontrar / encontrar tudo; Dito isto, a menos que haja outros parâmetros opcionais entre a tag e a lista de atributos, isso não deve ser diferente.
fonte
Aconteceu comigo também ao tentar raspar o Google.
Acabei usando pyquery.
Instalar:
Usar:
fonte
Aqui está um fragmento de código
Como você pode ver, encontro todas as tags e, em seguida, todas as tags com class = "article" dentro
fonte
A
Id
propriedade é sempre identificada exclusivamente. Isso significa que você pode usá-lo diretamente, sem especificar o elemento. Portanto, é um ponto positivo se os seus elementos tiverem que analisar o conteúdo.fonte