用python正则表达式删除html
我对python中的正则表达式有一些问题。我有一些html页面,其中包含对我有用的信息。在保存页面时,encodig字符集是一种iso。。。 它保存了所有德国典型的编码字母,如“Fr%C3%BCchte”等。 html的结构非常糟糕,所以唯一合理的方法就是使用正则表达式 我用python编写了这个正则表达式:用python正则表达式删除html,python,html,screen-scraping,Python,Html,Screen Scraping,我对python中的正则表达式有一些问题。我有一些html页面,其中包含对我有用的信息。在保存页面时,encodig字符集是一种iso。。。 它保存了所有德国典型的编码字母,如“Fr%C3%BCchte”等。 html的结构非常糟糕,所以唯一合理的方法就是使用正则表达式 我用python编写了这个正则表达式: re.compile('<a\s+href="javascript.*?\(\'(\w+).*?\s.(\d+.+\d+).*?(.*)\'\)\">') 也许我累了,但我看
re.compile('<a\s+href="javascript.*?\(\'(\w+).*?\s.(\d+.+\d+).*?(.*)\'\)\">')
也许我累了,但我看不出错误在哪里:
hir html:
<td colspan="3" width="100%"><a href="javascript:sendForm('showSubGroups', '160500', 'Fr%C3%BCchte in Alkohol')">Früchte in Alkohol</a></td>
</tr>
<tr valign="top">
<td colspan="3"><img src="NoName_Time_200843_93448%20-Dateien/pix.gif" height="5" width="1"></td>
</tr> <tr valign="top">
<td colspan="3" width="100%"><a href="javascript:sendForm('showSubGroups', '160400', 'Rumtopf')">Rumtopf</a></td>
</tr>
<tr valign="top">
<td colspan="3"><img src="NoName_Time_200843_93448%20-Dateien/pix.gif" height="5" width="1"></td>
</tr> <tr valign="top">
<td colspan="3" width="100%"><a href="javascript:sendForm('showSubGroups', '160300', 'Spirituosen (Bio)')">Spirituosen (Bio)</a></td>
</tr>
<tr valign="top">
<td colspan="3"><img src="NoName_Time_200843_93448%20-Dateien/pix.gif" height="5" width="1"></td>
</tr> <tr valign="top">
<td colspan="3" width="100%"><a href="javascript:sendForm('showSubGroups', '160200', 'Spirituosen zur Verarbeitung in der Confiserie')">Spirituosen zur Verarbeitung in der Confiserie</a></td>
</tr>
<tr valign="top">
<td colspan="3"><img src="NoName_Time_200843_93448%20-Dateien/pix.gif" height="5" width="1"></td>
</tr> <tr valign="top">
<td colspan="3" width="100%"><a href="javascript:sendForm('showSubGroups', '160100', 'Spirituosen, allgemein')">Spirituosen, allgemein</a></td>
</tr>
<tr valign="top">
<td colspan="3"><img src="NoName_Time_200843_93448%20-Dateien/pix.gif" height="5" width="1"></td>
</tr> </tbody></table>
</td>
</tr>
是解析html的绝佳库
一旦您从html中提取了HREF,那么使用正则表达式应该非常容易。是解析html的一个很好的库
一旦您从html中提取了HREF,那么使用正则表达式应该非常简单。尝试以下方法:
f = re.compile("sendForm\((?:.*), (.*), (.*)\)")
以文本作为输入,它将提供以下内容:
In [7]: f.findall(txt)
Out[7]: [('160500', 'Fr%C3%BCchte in Alkohol'), ('160400', 'Rumtopf'), ('160300', 'Spirituosen (Bio)'), ('160200', 'Spirituosen zur Verarbeitung in der Confiserie'), ('160100', 'Spirituosen, allgemein')]
就解码%C3%BC
(对于'u')而言,它似乎只是拉丁语1块中的UTF-8加上一些额外的“%”,因为如果将“%”替换为“\x”,它就会解码:
In [39]: '\xC3\xBC'.decode('utf-8')
Out[39]: u'\xfc'
0x00FC是u的unicode。请尝试以下操作:
f = re.compile("sendForm\((?:.*), (.*), (.*)\)")
以文本作为输入,它将提供以下内容:
In [7]: f.findall(txt)
Out[7]: [('160500', 'Fr%C3%BCchte in Alkohol'), ('160400', 'Rumtopf'), ('160300', 'Spirituosen (Bio)'), ('160200', 'Spirituosen zur Verarbeitung in der Confiserie'), ('160100', 'Spirituosen, allgemein')]
就解码%C3%BC
(对于'u')而言,它似乎只是拉丁语1块中的UTF-8加上一些额外的“%”,因为如果将“%”替换为“\x”,它就会解码:
In [39]: '\xC3\xBC'.decode('utf-8')
Out[39]: u'\xfc'
0x900FC是U.U.Poode的Unicode。
我建议使用ReGEX解析HTML-这类问题的典型响应-也许会考虑一个库,比如漂亮的Touple或LXML,允许使用XPath用于HTML PARSIGHMM,典型的响应似乎过于戏剧化。甚至可能是正确的,你不能用正则表达式解析HTML。但你可以从中提取信息。这就是这里的重点。@RolandSmith当然可以(至少对于有限的子集),关键是有更容易和更好的方法。对于这种问题,我建议使用ReGEX解析HTML,这可能是一个典型的反应,而不是考虑一个像漂亮的汤或LXML这样的库,它允许使用XPath用于HTML PARSIGHMM,典型的反应看起来过于戏剧化。甚至可能是正确的,你不能用正则表达式解析HTML。但你可以从中提取信息。这就是这里的重点。@RolandSmith当然可以(至少对于有限的子集),重点是有更简单更好的方法。