Проблема определения селектора, предназначенного для поиска двух типов TRS - PullRequest
1 голос
/ 22 июня 2019

Я написал два выражения, чтобы найти некоторые элементы на веб-странице.Элементы находятся в пределах tr, которые находятся внутри таблицы.Проблема в том, что существует два типа tr, например:

<tr class="even"> 
<tr class="odd">

Я хотел бы получить содержимое обоих типов.

Когда я пытаюсь использовать .find_all(),Я понимаю, что это работает правильно.Тем не менее, когда я выбираю .select(), я нахожу, что он тоже работает, но дело в том, что селектор выглядит неразборчиво.Можно ли сделать селектор более читабельным и лаконичным?

Использование .find_all():

soup.find("table",class_="rightLinks").find_all("tr",class_=["even","odd"])

Использование .select():

soup.select("table.rightLinks tr.even, table.rightLinks tr.odd")

Как я могу сделать последний более читабельным и лаконичным?

1 Ответ

1 голос
/ 22 июня 2019

Почти нет.Просто упростите свой логический или CSS селектор (,).

soup.select("table.rightLinks tr.even,tr.odd"))

ORIGINAL

Вы можете использовать шаблон селектора, чтобы не повторять общую часть table.rightLinks tr..

selector_template = "table.rightLinks tr.{cls}"
soup.select(", ".join((selector_template.format(cls="even"), selector_template.format(cls="odd"))))

Есть ли в целевой таблице только even и odd tr классы?Если так, то почему бы просто не использовать soup.select("table.rightLinks tr")?

...