在对网页数据清洗的时候遇到,如果在一段html文本中,有多个目标对象,如何将内容都提取出来。
比如下面一段内容
<span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times new roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;">
<font face="宋体">我们信步走进了一家乡村气息浓郁的小院子,小院里干净利落。院子中整齐地挂满了金黄的玉米,连玉米骨头都码得整整齐齐的,红红的辣椒挂在门口两侧,鸡狗猫等正悠闲地在庭院中散步,鸡屋子上有两个鸡窝,其中一个鸡窝里正好有一枚鸡蛋,还有,绣球花等各色花儿开得正艳</font>……小院的主人已都是八十多岁高龄,男主人八十三岁,女主人八十五岁,他们还正在扒着玉米,见我们闯进院子,非但不紧张,倒是很热情,邀我们落座,还打算给我们倒热水,我们连连推辞才罢。两位老人,不紧不慢,却也一直不停歇,听他们说,现在儿孙们大都已独立,也算有出息。看到这么干净利落,充满温馨生活气息的小院,一定是老人们的生活充满追求又富有情趣,才创造了这一切的美好。</span>
想提取出其中的汉字部分。
目前的方案
使用正则表达式全匹配,具体代码如下(部分截取):
import re
s = '''
<span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times new roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;">
<font face="宋体">我们信步走进了一家乡村气息浓郁的小院子,小院里干净利落。院子中整齐地挂满了金黄的玉米,连玉米骨头都码得整整齐齐的,红红的辣椒挂在门口两侧,鸡狗猫等正悠闲地在庭院中散步,鸡屋子上有两个鸡窝,其中一个鸡窝里正好有一枚鸡蛋,还有,绣球花等各色花儿开得正艳</font>……小院的主人已都是八十多岁高龄,男主人八十三岁,女主人八十五岁,他们还正在扒着玉米,见我们闯进院子,非但不紧张,倒是很热情,邀我们落座,还打算给我们倒热水,我们连连推辞才罢。两位老人,不紧不慢,却也一直不停歇,听他们说,现在儿孙们大都已独立,也算有出息。看到这么干净利落,充满温馨生活气息的小院,一定是老人们的生活充满追求又富有情趣,才创造了这一切的美好。</span>
'''
rs = re.findall(r'(?<=(>))[\d\D]*?(?=(<))', s, re.M)
for item in rs:
print item
结果
输出如下,并非自己想要的结果
('>', '<')
('>', '<')
('>', '<')
不要用正则, BeautifulSoup处理html要好上很多
输出