найди href значения, фильтрующие по классу с красивым супом - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть источник страницы, который имеет ссылки «класса», как в примере ниже.Я хотел бы вернуть список, содержащий все значения «href», поэтому в приведенном ниже примере «/ detail / Request-Technology% 2C-LLC-Oakland-CA-94609 / napil006 / cyberMan». Я использую красивый суп сfind_all пытается использовать атрибут 'a class', но он ничего не возвращает. Кто-нибудь может увидеть, что я делаю неправильно, и предложить решение?

source:

<a class="web-btn-link easy-click" href="/detail/Request-Technology%2C-LLC-Oakland-CA-94609/napil006/cyberMan" id="position15" onclick="cookieJobID('b54b4b964def18552eefff31d034d2a5');handleBackButton(this);" style="font-size:18px;" title=“stuff” value="b54b4b964def18552eefff31d034d2a5">

Код:

BeautifulSoup(driver.page_source).find_all('href', {'a class':'web-btn-link easy-click'})

выход:

[]

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете собрать все нужные элементы с помощью BeautifulSoup и сохранить их в списке, а затем выполнить итерацию по списку, чтобы напечатать атрибут href следующим образом:

href_elements = BeautifulSoup(driver.page_source).find_all('a', {'class':'web-btn-link easy-click'})
for href_element in href_elements:
    print(href_element.href)
0 голосов
/ 25 февраля 2019

Ваша первая ошибка - передать имя атрибута find_all(), который вместо этого интерпретирует первый аргумент как тэг .Затем вы просите find_all() отфильтровать найденные теги, чтобы они возвращали только те, у которых атрибут a class соответствует данному значению, теги не могут иметь имен атрибутов с пробелом.

Обратите внимание, что у вас нет тегов a class, у вас есть теги a с атрибутами class и href.Таким образом, вы хотите использовать

soup = BeautifulSoup(driver.page_source)
tags = soup.find_all('a', {'class': 'web-btn-link', 'href': True})

Фильтр 'href': True соответствует только в том случае, если для тега определен этот атрибут.Обратите внимание, что я фильтрую только по одному из двух классов;см. Поиск по классу CSS почему это важно, но вы, как правило, не хотите исключать сопоставление тегов с более чем двумя найденными вами классами.В подавляющем большинстве документов обычно требуется сопоставить только один из классов (и easy-click звучит как класс для скрипта или расширения CSS, применяемого к потенциально различным элементам на странице).

Этопоиск намного проще с помощью CSS .select() call :

soup = BeautifulSoup(driver.page_source)
tags = soup.select("a.web-btn-link.easy-click[href]")

Это ищет a теги с по крайней мере обоими web-btn-linkи easy-click классы и только те, которые имеют атрибут href.

Вызов все равно создаст последовательность объектов тегов, чтобы получить только атрибуты, используйте подписку:

soup = BeautifulSoup(driver.page_source)
tags = soup.select("a.web-btn-link[href]")
urls = [t['href'] for t in tags]

Или просто печатать их по очереди:

for tag in tags:
    print(t[‘href’])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...