Я использую BeautifulSoup в простой функции для извлечения ссылок, которые имеют весь заглавный текст:
def findAllCapsUrls(page_contents):
""" given HTML, returns a list of URLs that have ALL CAPS text
"""
soup = BeautifulSoup.BeautifulSoup(page_contents)
all_urls = node_with_links.findAll(name='a')
# if the text for the link is ALL CAPS then add the link to good_urls
good_urls = []
for url in all_urls:
text = url.find(text=True)
if text.upper() == text:
good_urls.append(url['href'])
return good_urls
Работает хорошо в большинстве случаев, но несколько страниц не будут правильно анализироваться в BeautifulSoup (или lxml, который я тоже пробовал) из-за некорректного HTML на странице, что приводит к объекту без (или только некоторых) ссылок в этом. «Горстка» может звучать как не большое дело, но эта функция используется в сканере, поэтому может быть сотни страниц, которые сканер никогда не найдет ...
Как можно реорганизовать вышеуказанную функцию, чтобы она не использовала такой парсер, как BeautifulSoup? Я искал, как это сделать с помощью регулярных выражений, но во всех ответах говорится «используйте BeautifulSoup». В качестве альтернативы я начал смотреть, как «исправить» искаженный HTML-код, чтобы он выполнялся синтаксическим анализом, но я не думаю, что это лучший путь ...
Какое альтернативное решение, использующее re или что-то еще, может сделать то же самое, что и функция выше?