簡體   English   中英

Python正則表達式提取html段落

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM