我需要兩個元素中的文本字符串中的文本:解析HTML獲取元素
source_code = """<span class="UserName"><a href="#">Martin Elias</a></span>"""
>>> text
'Martin Elias'
我怎麼能做到這一點?
我需要兩個元素中的文本字符串中的文本:解析HTML獲取元素
source_code = """<span class="UserName"><a href="#">Martin Elias</a></span>"""
>>> text
'Martin Elias'
我怎麼能做到這一點?
我搜索 「蟒蛇解析HTML」,這是第一個結果: https://docs.python.org/2/library/htmlparser.html
此代碼是從Python文檔
from HTMLParser import HTMLParser
# create a subclass and override the handler methods
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print "Encountered a start tag:", tag
def handle_endtag(self, tag):
print "Encountered an end tag :", tag
def handle_data(self, data):
print "Encountered some data :", data
# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')
這裏採取的是結果:
Encountered a start tag: html
Encountered a start tag: head
Encountered a start tag: title
Encountered some data : Test
Encountered an end tag : title
Encountered an end tag : head
Encountered a start tag: body
Encountered a start tag: h1
Encountered some data : Parse me!
Encountered an end tag : h1
Encountered an end tag : body
Encountered an end tag : html
使用此和通過查看HTMLParser中的代碼,我想出了這個:
class myhtmlparser(HTMLParser):
def __init__(self):
self.reset()
self.NEWTAGS = []
self.NEWATTRS = []
self.HTMLDATA = []
def handle_starttag(self, tag, attrs):
self.NEWTAGS.append(tag)
self.NEWATTRS.append(attrs)
def handle_data(self, data):
self.HTMLDATA.append(data)
def clean(self):
self.NEWTAGS = []
self.NEWATTRS = []
self.HTMLDATA = []
您可以使用它像這樣:
from HTMLParser import HTMLParser
pstring = source_code = """<span class="UserName"><a href="#">Martin Elias</a></span>"""
class myhtmlparser(HTMLParser):
def __init__(self):
self.reset()
self.NEWTAGS = []
self.NEWATTRS = []
self.HTMLDATA = []
def handle_starttag(self, tag, attrs):
self.NEWTAGS.append(tag)
self.NEWATTRS.append(attrs)
def handle_data(self, data):
self.HTMLDATA.append(data)
def clean(self):
self.NEWTAGS = []
self.NEWATTRS = []
self.HTMLDATA = []
parser = myhtmlparser()
parser.feed(pstring)
# Extract data from parser
tags = parser.NEWTAGS
attrs = parser.NEWATTRS
data = parser.HTMLDATA
# Clean the parser
parser.clean()
# Print out our data
print tags
print attrs
print data
現在,你應該能夠很容易地從這些名單中提取數據。我希望這有助於!
這是美麗的:) – AsheKetchum 2017-09-14 19:52:07
我推薦使用Python Beautiful Soup 4庫。
pip install beautifulsoup4
它使HTML解析真的很容易。
from bs4 import BeautifulSoup
source_code = """<span class="UserName"><a href="#">Martin Elias</a></span>"""
soup = BeautifulSoup(source_code)
print soup.a.string
>>> 'Martin Elias'
我知道問題是標記爲python-2.x,但我認爲應該指出的是,beautifulsoup只適用於python 2.x. – LJNielsenDk 2012-08-04 09:19:12
美麗的湯4在2.7和3都可以工作。 – 2012-08-04 14:08:10
你從哪裏找到美麗的湯的API文檔? – 2016-02-29 19:15:12
您也可以嘗試使用html5lib和XPath,there is a good question about it here,這個問題的答案有一個重要的細節(namespaceHTMLElements
)要記住,使html5lib像預期的那樣。我浪費了很多時間試圖讓它工作,因爲我忽略了我需要改變它。
安裝beautifulsoup和 你可以這樣做:
from BeautifulSoup import BeautifulSoup
source_code = '"""<span class="UserName"><a href="#">Martin Elias</a></span>"""'
soup = BeautifulSoup(source_code)
print soup.find('span',{'class':'UserName'}).text
的Theres幾種方法來這裏皮膚貓。最終的結果是什麼?你可以做JavaScript或一些服務器端解析。 – 2012-08-03 22:40:22