Estoy intentando recuperar texto del sitio web (https://www.doc.govt.nz/parks-and-recreation/places-to-go/otago/places/dunedin-area/?tab-id=50578). Estoy tratando de extraer información presente en el sitio web. Aquí está mi código que está recuperando el texto:

driver = webdriver.Chrome(driverLocation)
driver.get('https://www.doc.govt.nz/parks-and-recreation/places-to-go/otago/places/dunedin-area/?tab-id=50578')
driver.implicitly_wait(20)

for element in driver.find_elements_by_xpath('//div[@class="profile-detail"]'):

    desc = element.find_element_by_xpath('//div[@class="profile-detail-body"]').text
    info = element.find_element_by_xpath('//div[@class="profile-info"]').text

    print(desc)
    print(info)

El problema es que siempre repite la primera entrada de la información presente en la página (es decir, información de Allans Beach Track). Cuando intenté recuperar la información usando dos bucles separados, funciona bien. ¿Podría por favor guiarme donde estoy cometiendo el error?

0
user2293224 12 feb. 2020 a las 13:29

2 respuestas

La mejor respuesta

La idea es comprender la estructura de los elementos y luego definir su estrategia de secuencias de comandos.

Creo que está intentando acceder a cada elemento de la lista presente en la lista "class =" profileRepeater "que tiene múltiples entradas de" class = "profile-info" y "profile-detail-body".

driver = webdriver.Chrome(driverLocation)
driver.get('https://www.doc.govt.nz/parks-and-recreation/places-to-go/otago/places/dunedin-area/?tab-id=50578')
driver.implicitly_wait(20)

parentElement = driver.find_element_by_class_name('profileRepeater')

for listItemElement in parentElement.find_element_by_tag_name('li'):

    desc = listItemElement.find_element_by_class_name('profile-detail-body').text
    info = listItemElement.find_element_by_class_name('profile-info').text

    print(desc)
    print(info)

esto debería imprimir todos los diferentes valores en los elementos de la lista de resultados de búsqueda

1
mds731 12 feb. 2020 a las 10:48

Cuando utilice xpath para localizar un elemento de otro elemento, debe especificar el contexto actual . antes de la segunda ruta

for element in driver.find_elements_by_xpath('//div[@class="profile-detail"]'):
    desc = element.find_element_by_xpath('.//div[@class="profile-detail-body"]').text
    info = element.find_element_by_xpath('.//div[@class="profile-info"]').text

Puedes usar class_name en su lugar sin ninguna condición

for element in driver.find_elements_by_class_name('profile-detail'):
    desc = element.find_element_by_class_name('profile-detail-body').text
    info = element.find_element_by_class_name('profile-info').text
0
Guy 12 feb. 2020 a las 10:52