soup.find("tagName", { "id" : "articlebody" })
¿Por qué esto NO devuelve las <div id="articlebody"> ... </div>
etiquetas y demás? No devuelve nada. Y sé a ciencia cierta que existe porque lo estoy mirando desde
soup.prettify()
soup.find("div", { "id" : "articlebody" })
Tampoco funciona.
( EDITAR: descubrí que BeautifulSoup no estaba analizando correctamente mi página, lo que probablemente significaba que la página que estaba tratando de analizar no estaba formateada correctamente en SGML o lo que sea)
python
beautifulsoup
Tony Stark
fuente
fuente
Respuestas:
Debe publicar su documento de ejemplo, porque el código funciona bien:
Encontrar
<div>
s dentro de<div>
s también funciona:fuente
div = soup.find(id="articlebody")
soup.find('div', id='articlebody')
Para encontrar un elemento por su
id
:fuente
Beautiful Soup 4 es compatible con la mayoría de los selectores CSS con el
.select()
método , por lo tanto, puede usar unid
selector como:Si necesita especificar el tipo de elemento, puede agregar un selector de tipo antes del
id
selector:los
.select()
método devolverá una colección de elementos, lo que significa que devolverá los mismos resultados que el siguiente ejemplo de.find_all()
método :Si solo desea seleccionar un solo elemento, puede usar el
.find()
método :fuente
Creo que hay un problema cuando las etiquetas 'div' están demasiado anidadas. Estoy tratando de analizar algunos contactos de un archivo html de Facebook, y Beautifulsoup no puede encontrar las etiquetas "div" con la clase "fcontent".
Esto sucede con otras clases también. Cuando busco divs en general, solo se vuelven aquellos que no están tan anidados.
El código fuente html puede ser cualquier página de Facebook de la lista de amigos de un amigo tuyo (no el de tus amigos). Si alguien puede probarlo y dar algún consejo, realmente lo agradecería.
Este es mi código, donde solo trato de imprimir el número de etiquetas "div" con la clase "fcontent":
fuente
Lo más probable es que el analizador predeterminado de beautifulsoup tenga un problema. Cambie un analizador diferente, como 'lxml' e intente nuevamente.
fuente
soup = BeautifulSoup(data, parser="html.parser")
En la fuente beautifulsoup, esta línea permite que los divs se aniden dentro de los divs; entonces su preocupación en el comentario de lukas no sería válida.
Lo que creo que debe hacer es especificar los atributos que desea, como
fuente
has intentado
soup.findAll("div", {"id": "articlebody"})
?Suena loco, pero si estás sacando cosas de la naturaleza, no puedes descartar múltiples divs ...
fuente
Solía:
Como mi sintaxis para find / findall; Dicho esto, a menos que haya otros parámetros opcionales entre la etiqueta y la lista de atributos, esto no debería ser diferente.
fuente
Me pasó a mí también mientras intentaba raspar a Google.
Terminé usando pyquery.
Instalar en pc:
Utilizar:
fuente
Aquí hay un fragmento de código
Como puede ver, encuentro todas las etiquetas y luego encuentro todas las etiquetas con class = "article" dentro
fuente
La
Id
propiedad siempre se identifica de forma única. Eso significa que puede usarlo directamente sin siquiera especificar el elemento. Por lo tanto, es un punto a favor si sus elementos tienen que analizar el contenido.fuente