#python #pandas #selenium
#python #панды #селен
Вопрос:
Я застрял на этом уже целую вечность… Не могли бы вы помочь?
Пытаюсь создать скребок, который очищает списки на этом веб-сайте, и я просто не могу получить URL-адрес каждого списка. Не могли бы вы помочь?
Я пробовал множество способов найти элемент, этот последний — по абсолютному XPath (по классу тоже всегда терпел неудачу)
Код:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
import time
PATH = "/Users/csongordoma/Documents/chromedriver"
driver = webdriver.Chrome(PATH)
driver.get('https://ingatlan.com/lista/elado lakas budapest')
data = {}
df = pd.DataFrame(columns=['Price', 'Address', 'Size', 'Rooms', 'URL'])
listings = driver.find_elements_by_css_selector('div.listing__card')
for listing in listings:
data['Price'] = listing.find_elements_by_css_selector('div.price')[0].text
data['Address'] = listing.find_elements_by_css_selector('div.listing__address')[0].text
# data['Size'] = listing.find_elements_by_css_selector('div.listing__parameter listing__data--area-size')[0].text
data['URL'] = listing.find_elements_by_xpath('/html[1]/body[1]/div[1]/div[2]/div[4]/div[1]/main[1]/div[1]/div[1]/div[1]/a[3]')[0].text
df = df.append(data, ignore_index=True)
print(len(listings))
print(data)
# driver.find_element_by_xpath("//a[. = 'Következő oldal']").click()
driver.quit()
Сообщение об ошибке:
Traceback (most recent call last):
File "hello.py", line 18, in <module>
data['URL'] = listing.find_elements_by_xpath('/html[1]/body[1]/div[1]/div[2]/div[4]/div[1]/main[1]/div[1]/div[1]/div[1]/a[3]')[0].text
IndexError: list index out of range
Большое спасибо!
Комментарии:
1. Похоже, это второй a [2] списка, а не a [3] . Также используйте относительный путь, а не абсолютный xpath. Затем используйте get_attribute(‘href’) вместо текста.
2. ваш find_elements не возвращает совпадающих элементов. Исправьте xpath.
Ответ №1:
Сработало бы что-то вроде приведенного ниже. Чтобы получить webelement из [2] из элемента, и это href.
data['URL'] = listing.find_element_by_xpath('//a[2]').get_attribute('href')