Hola, estoy tratando de raspar entre etiquetas. A continuación, adjunto una parte de la fuente que quiero raspar. si miras atentamente hay 3 ul etiqueta. la primera etiqueta ul tiene class = "listGroup". Estoy tratando de extraer el segundo texto de la etiqueta "ul" usando la idea de que es seguido por otra etiqueta "ul" que tiene una clase "listGroup". Por favor comparta cómo puedo hacer esto.

<ul class="listGroup" id="ul_e6d09fbd-19fe-49ac-9b47-bd857c0d411b"><li class="acces-listitems"><a href="https://order.store.mayoclinic.com/books/gnweb43?utm_source=MC-DotOrg-PS&amp;utm_medium=Link&amp;utm_campaign=FamilyHealth-Book&amp;utm_content=FHB">Book: Mayo Clinic Family Health Book, 5th Edition</a></li><li class="acces-hide-listitems"><a href="https://order.store.mayoclinic.com/hl/hldiged?utm_source=MC-DotOrg-PS&amp;utm_medium=Link&amp;utm_campaign=HealthLetter-Digital&amp;utm_content=HLDE">Newsletter: Mayo Clinic Health Letter — Digital Edition</a></li></ul>
<ul>
<li>Osteoporosis</li>
<li>Kidney stones</li>
<li>Excessive urination</li>
<li>Abdominal pain</li>
<li>Tiring easily or weakness</li>
<li>Depression or forgetfulness</li>
<li>Bone and joint pain</li>
<li>Frequent complaints of illness with no apparent cause</li>
<li>Nausea, vomiting or loss of appetite</li>
</ul>
<ul>
<li>A noncancerous growth (adenoma) on a gland is the most common cause.</li>
<li>Enlargement (hyperplasia) of two or more parathyroid glands accounts for most other cases.</li>
<li>A cancerous tumor is a very rare cause of primary hyperparathyroidism.</li>
</ul>

Adjunto el guión corto que he hecho hasta ahora. Por favor ayuda .

import requests
import pandas
from bs4 import BeautifulSoup
for link in ['/diseases-conditions/hyperparathyroidism/symptoms-causes/syc-20356194']:
    page = requests.get(f"https://www.mayoclinic.org{link}")
    soup = BeautifulSoup(page.content, "html.parser")
    for each in soup.find_all("ul"):
        print(each)
0
Ishan Bhardwaj 26 jun. 2020 a las 12:14

2 respuestas

Este parece ser un caso de uso natural para un selector CSS, a saber:

ul.listGroup + ul li seleccionará todas las etiquetas li en la primera etiqueta ul que sigue a cada etiqueta ul con la clase listGroup. Reemplazar + con ~ en su lugar seleccionará todas las etiquetas li en total (en este caso 2) ul etiquetas que siguen a cada etiqueta con la clase listGroup .

Para implementar esta respuesta en su script, reemplace find_all con select y actualice el selector con el selector CSS correspondiente.

import requests
import pandas
from bs4 import BeautifulSoup
for link in ['/diseases-conditions/hyperparathyroidism/symptoms-causes/syc-20356194']:
    page = requests.get(f"https://www.mayoclinic.org{link}")
    soup = BeautifulSoup(page.content, "html.parser")
    for each in soup.select("ul.listGroup + ul li"):
        print(each.text)
1
Calimocho 26 jun. 2020 a las 10:28

Quizás debería considerar usar una expresión regular para hacer una captura.

0
Patrick VALET 26 jun. 2020 a las 15:59