我正在尝试删除我从网页上搜索的数据周围的所有html,这样剩下的就是我将能够输入数据库的原始数据。所以,如果我有类似的东西:
<p class="location"> Atlanta, GA </p>
以下代码将返回
Atlanta, GA </p>
但我的期望不是返回的内容。这是我找到的here基本问题的更具体的解决方案。任何帮助将不胜感激,谢谢!代码见下文。
def delHTML(self, html):
"""
html is a list made up of items with data surrounded by html
this function should get rid of the html and return the data as a list
"""
for n,i in enumerate(html):
if i==re.match('<p class="location">',str(html[n])):
html[n]=re.sub('<p class="location">', '', str(html[n]))
return html
答案 0 :(得分:2)
正如评论中正确指出的那样,您应该使用特定的库来解析HTML并提取文本,这里有一些例子:
答案 1 :(得分:0)
假设你想要的只是提取<p class="location">
标签中包含的数据,你可以使用快速的&amp;使用Python HTMLParser
模块(一个简单的HTML SAX解析器)进行脏(但正确)的方法,如下所示:
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
PLocationID=0
PCount=0
buf=""
out=[]
def handle_starttag(self, tag, attrs):
if tag=="p":
self.PCount+=1
if ("class", "location") in attrs and self.PLocationID==0:
self.PLocationID=self.PCount
def handle_endtag(self, tag):
if tag=="p":
if self.PLocationID==self.PCount:
self.out.append(self.buf)
self.buf=""
self.PLocationID=0
self.PCount-=1
def handle_data(self, data):
if self.PLocationID:
self.buf+=data
# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed("""
<html>
<body>
<p>This won't appear!</p>
<p class="location">This <b>will</b></p>
<div>
<p class="location">This <span class="someclass">too</span></p>
<p>Even if <p class="location">nested Ps <p class="location"><b>shouldn't</b> <p>be allowed</p></p> <p>this will work</p></p> (this last text is out!)</p>
</div>
</body>
</html>
""")
print parser.out
输出:
['This will', 'This too', "nested Ps shouldn't be allowed this will work"]
这将提取任何<p class="location">
标记内包含的所有文本,剥离其中的所有标记。单独的标签(如果不是嵌套的 - 对于段落不应该被允许)将在out
列表中有一个单独的条目。
请注意,对于更复杂的要求,这很容易失控;在这些情况下,DOM解析器更合适。