Получить ссылку href с помощью драматурга python

Я пытаюсь извлечь ссылку внутри href, но все, что я нахожу, это текст внутри элемента.

Код сайта следующий:

<div class = "item-info-container ">
   <a href = "/imovel/32600863/" role = "heading" aria-level = "2" class = "item-link xh-highlight" 
   title = "Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga">
   Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga
   </a>

И код, который я использую:

element_handle = page.locator('//div[@class = "item-info-container "]//a').all_inner_texts()

Независимо от того, укажу я //a[@href] или нет, мой вывод всегда будет текстом заголовка:

Apartamento T3 na avenida da Liberdade, São José de São Lázaro e São João do Souto, Braga

Когда то, чего я действительно хочу достичь, это:

/imovel/32600863/

Любые идеи о том, где моя логика подводит меня? заранее спасибо

ЭЛЕМЕНТ, который вам нужен, — это элемент <a>. Когда у вас есть этот элемент, вам нужно использовать get_attribute, чтобы получить его атрибут href. Драматург не был предназначен для просмотра веб-страниц. Почему вы его используете? Есть несколько пакетов, которые были разработаны специально для парсинга.

Tim Roberts 06.07.2023 03:28

Спасибо, что сообщили мне, я использую драматург, потому что это единственный, с которым я смог обойти DataDome

gustavo matteo 06.07.2023 03:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Просто опустите // и используйте следующее выражение XPath-1.0:

//div[@class = "item-info-container "]/a/@href

Это даст вам значение атрибута @href: "/imovel/32600863/".
Вероятно, вся команда будет

element_handle = page.locator('//div[@class = "item-info-container "]/a/@href').all_inner_texts()

но результатом выражения является не элемент, а атрибут, поэтому это может привести к ошибке.

Ответ принят как подходящий

Используя get_attribute:

link = page.locator('.item-info-container ').get_by_role('link').get_attribute('href')

**Редактировать:**Более одного локатора:

link_locators = page.locator('.item-info-container ').get_by_role('link').all()
for _ in link_locators:
    print(_.get_attribute('href'))

Код возвращает ошибку playwright._impl._api_types.Error: Ошибка: нарушение строгого режима: locator(".item-info-container").get_by_role("link") разрешено до 30 элементов:

gustavo matteo 06.07.2023 10:43

Добавлен код, если более одного

candre 06.07.2023 12:11

Только что увидел, что ты разобрался :)

candre 06.07.2023 12:12

Спасибо (+1) за оригинальное решение ОП.

Vishal Aggarwal 06.07.2023 18:28

Удалось сделать это, найдя все элементы, а затем получив атрибут после обработки всех элементов.

handleLinks = page.locator('//div[@class = "item-info-container "]/a')
    for links in handleLinks.element_handles():
        linkF = links.get_attribute('href')
        print(linkF)

и результат будет:

/imovel/32611494/
/imovel/32642523/
/imovel/32633771/
/imovel/32527162/
/imovel/30344934/
/imovel/31221488/
/imovel/32477875/
/imovel/31221480/
/imovel/32450120/
/imovel/32515628/
/imovel/32299064/

Другие вопросы по теме