Как получить уникальный css селектор объекта BeautifulSoup? - PullRequest
0 голосов
/ 10 января 2020

Я хочу получить уникальный css путь селектора элемента в HTML.

Я использую BeautifulSoup, но не могу понять, как действительно получить уникальный селектор css, как вы будет использовать инструмент Chrome Dev.

Скажем, вы пытаетесь получить уникальный css селектор элемента на странице Google, в частности, кнопку Gmail в правом верхнем углу. Используя Chrome инструмент разработчика, вы можете легко использовать «копирование селектора» и получить: #gbw > div > div > div.gb_9d.gb_i.gb_yg.gb_pg > div:nth-child(1) > a

Я пытаюсь сделать то же самое, не зная никакой предварительной информации о структуре сайта. т.е. из одного элемента BeautifulSoup.

Я попытался получить уникальный селектор, перечислив всех родителей элемента, но это НЕ уникально. Мне нужно что-то более похожее на class & id, чтобы сделать его уникальным

Как мне это сделать?

(Конечно, это работает в очень простых случаях, таких как тот, что я дал вам ниже, но css путь селектора, использующий только имена тегов, всегда рискует быть не уникальным.)

from urllib.request import urlopen
from bs4 import BeautifulSoup 

html = urlopen("https://www.google.com")
html_bs = BeautifulSoup(html, 'html.parser')

gmail = html_bs.find_all(text='Gmail')[0]
print(type(gmail)) # >> bs4.element.NavigableString

# How do I get gmail's unique css path?

# I tried to use parents but this is generally not unique. 
# div > div > nobr > a might NOT be unique in some cases. 

for parent in gmail.parents:
    print(parent.name)
# >>
'''
a
nobr
div
div
body
html
[document]
'''

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...