[英]Python regex to extract html paragraph
我正在嘗試使用以下代碼行從 HTML 中提取段落:
paragraphs = re.match(r'<p>.{1,}</p>', html)
但它沒有返回,即使我知道有。 為什么?
為什么不使用HTML 解析器來解析 HTML 。 使用BeautifulSoup
示例:
>>> from bs4 import BeautifulSoup
>>>
>>> data = """
... <div>
... <p>text1</p>
... <p></p>
... <p>text2</p>
... </div>
... """
>>> soup = BeautifulSoup(data, "html.parser")
>>> [p.get_text() for p in soup.find_all("p", text=True)]
[u'text1', u'text2']
請注意, text=True
有助於過濾掉空段落。
確保您使用re.search
(或re.findall
)而不是re.match
,它會嘗試匹配整個 html 字符串(您的 html 絕對不是以<p>
標簽開頭和結尾)。
還應該注意,當前您的搜索是貪婪的,這意味着它將返回第一個<p>
標記和最后一個</p>
之間的所有內容,這是您絕對不想要的。 嘗試
re.findall(r'<p(\s.*?)?>(.*?)</p>', response.text, flags=re.IGNORECASE | re.MULTILINE | re.DOTALL)
反而。 問號將使您的正則表達式在第一個結束</p>
標記處停止匹配,與search
相比, findall
將返回多個匹配項。
您應該使用re.search
而不是re.match
。 前者將搜索整個字符串,而后者僅在模式位於字符串開頭時才匹配。
也就是說,正則表達式是解析 HTML 的可怕工具。 你很快就會和他們碰壁。 我強烈建議您查看 HTMLParser 或 BeautifulSoup 來完成您的任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.