Как получить href ссылки с использованием библиоетеки requests_html в python через cssSelectors?

Только учусь, прошу это учесть. Вот с помощью xpath я могу получить значение href, а вот с помощью cssSelectors не получается.

from requests_html import HTMLSession

url = 'https://ru.stackoverflow.com/'

s = HTMLSession()
response = s.get(url)
if response.status_code != 200:
    print (f'status_code {response.status_code}')
    exit()

links_xpath = response.html.xpath('//*[@class="s-post-summary--content-title"]/a/@href')

links_css_selectors = response.html.find('.s-post-summary--content-title > a') #?????

print(links_xpath[0], links_css_selectors[0] , sep = '\n-------------\n')

Буду признателен за помощь


Ответы (1 шт):

Автор решения: DiMithras

Тут проблема не с селектором, а с тем что он возвращает.
По документации .find() вернёт объект! Да, в общем то и .xpath() вернёт объект, но если как у Вас сделать с @href, то сразу вернёт ссылку.

Отвечая на вопрос, у css тоже есть такой селектор ::attr(href), но вот беда, с данной библиотекой он не работает, выдаст ошибку:

ExpressionError: Pseudo-elements are not supported. 

Поэтому придётся использовать обходные пути, а именно работу с объектами.
Да поправят меня гуру, если всё же можно напрямую в селекторе выбрать с данной библиотекой.

По работе с объектом есть несколько вариантов:

  1. выдаст искомую ссылку, которую ищем
links_css_selectors[0].attrs['href']
  1. Также выдаст relative-link, атрибут выдаёт set
next(iter(links_css_selectors[0].links))
  1. Опять получаем set, но ссылка будет полная вместе с базовым url.
links_css_selectors[0].absolute_links

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

→ Ссылка