#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