我想要一個正則表達式從HTML頁面中提取標題。目前我有這個:提取正則表達式匹配的部分
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
是否有一個正則表達式只提取內容,所以我不必刪除標籤?
謝謝!
我想要一個正則表達式從HTML頁面中提取標題。目前我有這個:提取正則表達式匹配的部分
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
是否有一個正則表達式只提取內容,所以我不必刪除標籤?
謝謝!
使用(
)
在正則表達式和蟒蛇group(1)
檢索捕獲的字符串(re.search
將返回None
,如果沒有找到結果,所以不要」 t使用group()
直接):
title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE)
if title_search:
title = title_search.group(1)
如果在找不到標題時沒有做任何事情,爲什麼直接使用group()會是一件壞事? (無論如何,你可以捕獲異常) – tonfa 2009-08-25 10:52:57
是的,但大多數人忘記異常,並且當他們在運行時看到它們時真的感到驚訝:) – 2009-08-25 18:30:21
嘗試:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
re.search('<title>(.*)</title>', s, re.IGNORECASE).group(1)
嘗試使用捕獲組:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
使用正則表達式來解析HTML通常不是一個好主意。你可以使用任何HTML分析器,比如美麗的湯。退房http://www.crummy.com/software/BeautifulSoup/documentation.html
還記得一些人,當遇到一個問題,認爲「我知道,我將使用正則表達式。」現在他們有兩個問題。
我認爲這應該足夠了:「文本」
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
...假設你的文本(HTML)是在一個名爲變量
這也假定沒有其他HTML標籤可以合法地嵌入到HTML TITLE標籤中,也沒有辦法合法地在這樣的容器/塊中嵌入任何其他<字符。
然而 ...
不要使用Python中HTML解析正則表達式。使用HTML解析器! (除非你打算寫一個完整的解析器,這將是一個額外的工作時各種HTML,SGML和XML解析器已經在標準庫。
如果處理「真實世界」 標籤湯 HTML (它通常不符合任何SGML/XML驗證程序),則使用BeautifulSoup包。它不在標準庫(尚未)中,但是爲此目的被廣泛推薦爲
另一個選項是:lxml .. 。它是爲正確結構化(符合標準的)HTML編寫的,但它可以選擇使用BeautifulSoup作爲解析器:ElementSoup。
我可以向你推薦美麗的湯。湯是一個非常好的lib來解析所有的html文檔。
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
我想補充一點,那個beautifulsoup也會解析不完整的html,這真的很不錯。 – pyeleven 2013-10-21 07:52:19
的代碼所提供的碎片不會應付Exceptions
我建議
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
這如果模式沒有被發現在默認情況下會返回一個空字符串,或第一個匹配。
哇我不能相信所有的響應調用解析整個HTML頁面只是爲了提取一個簡單的標題。什麼矯枉過正! – hoju 2009-08-27 02:02:01
問題標題說明了這一切 - 給出_happens_爲HTML的例子,但一般問題是... general。 – Phil 2017-05-24 23:30:28