#selenium #web-scraping #selenium-chromedriver
Вопрос:
Я хочу выбрать часть названия веб-сайта.
после проверки заголовка html-код веб-сайта выглядит следующим образом:
и я хочу выбрать только часть «2014 Ram 1500». Для этого я написал следующий код:
# car name
try:
temp = driver.find_element_by_xpath(
'//*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1]/text()[2]').text
data.append(temp)
except:
data.append('')
но я получаю только пустую строку(‘ ‘). Я использую selenium для автоматизации и копирования полного Xpath «2014 Ram 1500» в коде. Что я делаю не так? И как я могу выбрать только часть «2014 Ram 1500» из всего названия?
Ответ №1:
Текст находится в новой строке, вы можете разделить строку на основе n
массива строк, из которого мы могли бы извлечь первый элемент.
try:
temp = driver.find_element_by_xpath('//*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1]').text
a = temp.split('n')[1]
print(a)
data.append(a)
except:
data.append('')
Комментарии:
1. не знаю, почему этот Xpath не работает. Мне пришлось использовать Xpath заголовка h1
2. У вас изначально было это
//*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1]/text()[2]
, и, увидев это в первый раз, я понял, что это неправильно, поэтому я дал вам это//*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1]
. Ну, я мог бы дать вам больше информации о локаторе, но нет, я не буду.
Ответ №2:
Я написал приведенный ниже код, и он действительно сработал. На этот раз я скопировал Xpath из заголовка h1 и преобразовал его в текст. Затем, используя нарезку, я получил именно то, что хотел. Хотя я не уверен, что это лучшая практика или нет:
# car name
try:
temp = driver.find_element_by_xpath('/html/body/section/div/div/div[2]/div[5]/div[2]/div/h1[1]').text
temp = temp.split()[1:-2]
temp = " ".join(e for e in temp)
data.append(temp)
except:
data.append('')