beautifulsoup — фильтровать текст тега привязки

#python #html #web-scraping #beautifulsoup

#python #HTML #очистка веб-страниц #beautifulsoup

Вопрос:

У меня есть следующий HTML-контент :

 <a href="http://app_url1" >install app xyz</a>
<a href="http://app_url2" >install app xyz</a>
<a href="http://app_url3" >install app aaa</a>
<a href="http://app_url4">install app aaa</a>
  

Я хочу отфильтровать тексты тега привязки, которые заканчиваются заданным шаблоном регулярных выражений (например, xyz здесь)?
Я хочу передать шаблон регулярного выражения в findAll вместо дополнительной итерации всех anchor тегов.

Ответ №1:

Вы можете использовать text параметр BeautifulSoup в find_all методе.

 from bs4 import BeautifulSoup
import re

html = """<a href="http://app_url1" >install app xyz</a>
<a href="http://app_url2" >install app xyz</a>
<a href="http://app_url3" >install app aaa</a>
<a href="http://app_url4">install app aaa</a>"""

soup = BeautifulSoup(html, "html.parser")

print(soup.findAll("a", text=re.compile("xyz$")))
  

Вывод:

 [<a href="http://app_url1">install app xyz</a>, <a href="http://app_url2">install app xyz</a>]
  

Комментарии:

1. привет, большая награда, если у меня есть <a href=» app_url1 » ><img src=»/path.jpg «> установить приложение xyz</ a> тогда, похоже, текст не найден, хотя он соответствует шаблону регулярных выражений.

Ответ №2:

Используя лямбда с str.endswith

Пример:

 from bs4 import BeautifulSoup

html = """<div><a href="http://app_url1" >install app xyz</a>
<a href="http://app_url2" >install app xyz</a>
<a href="http://app_url3" >install app aaa</a>
<a href="http://app_url4">install app aaa</a></div>"""

soup = BeautifulSoup(html, "html.parser")
print(soup.find_all("a", text=lambda x: x is not None and x.endswith("xyz")))
# --> [<a href="http://app_url1">install app xyz</a>, <a href="http://app_url2">install app xyz</a>]
  

Ответ №3:

Я думаю, вы можете попробовать это, чтобы получить тексты тега привязки:

 >>> html = """<a href="http://app_url1" >install app xyz</a>
... <a href="http://app_url2" >install app xyz</a>
... <a href="http://app_url3" >install app aaa</a>
... <a href="http://app_url4">install app aaa</a>"""
>>> soup = BeautifulSoup(html, "html.parser")
>>> anchor_texts = []
>>> anchor_texts.append(soup.get_text())
>>> for i in anchor_texts:
...    print(i)
  

Вывод:

 install app xyz
install app xyz
install app aaa
install app aaa