Как получить 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 шт):
Тут проблема не с селектором, а с тем что он возвращает.
По документации .find() вернёт объект! Да, в общем то и .xpath() вернёт объект, но если как у Вас сделать с @href, то сразу вернёт ссылку.
Отвечая на вопрос, у css тоже есть такой селектор ::attr(href), но вот беда, с данной библиотекой он не работает, выдаст ошибку:
ExpressionError: Pseudo-elements are not supported.
Поэтому придётся использовать обходные пути, а именно работу с объектами.
Да поправят меня гуру, если всё же можно напрямую в селекторе выбрать с данной библиотекой.
По работе с объектом есть несколько вариантов:
- выдаст искомую ссылку, которую ищем
links_css_selectors[0].attrs['href']
- Также выдаст relative-link, атрибут выдаёт
set
next(iter(links_css_selectors[0].links))
- Опять получаем
set, но ссылка будет полная вместе с базовым url.
links_css_selectors[0].absolute_links
Чтобы код для обоих селекторов был одинаковый, можно в первом варианте с xpath также получать объект и пользоваться теми же методами.