htmlparser,顧名思義,是解析html的乙個工具。python自帶的。
一、常用屬性和方法介紹
htmlparser是乙個類,在使用時一般繼承它然後過載它的方法,來達到解析出需要的資料的目的。
1.常用屬性:
lasttag,儲存上乙個解析的標籤名,是字串。
2.常用方法:
handle_starttag(tag, attrs) ,處理開始標籤,比如;這裡的attrs獲取到的是屬性列表,屬性以元組的方式展示
handle_endtag(tag) ,處理結束標籤,比如
handle_startendtag(tag, attrs) ,處理自己結束的標籤,如
handle_data(data) ,處理資料,標籤之間的文字
handle_comment(data) ,處理注釋,之間的文字
二、基本使用
不多說,上**
from html.parser import htmlparser
class myhtmlparser(htmlparser):
def handle_starttag(self, tag, attrs):
"""recognize start tag, like :param tag:
:param attrs:
:return:
"""print("encountered a start tag:", tag)
def handle_endtag(self, tag):
"""recognize end tag, like
:param tag:
:return:
"""print("encountered an end tag :", tag)
def handle_data(self, data):
"""recognize data, html content string
:param data:
:return:
"""print("encountered some data :", data)
def handle_startendtag(self, tag, attrs):
"""recognize tag that without endtag, like
:param tag:
:param attrs:
:return:
"""print("encountered startendtag :", tag)
def handle_comment(self,data):
""":param data:
:return:
"""print("encountered comment :", data)
parser = myhtmlparser()
parser.feed(''
'' '
')
以上是根據python手冊寫的基本使用,解析了乙個簡單的html。可以執行看看,主要用於了解各個函式負責解析的部分,以及解析順序。
三、實用案例
以下的實用案例均在上面的**中修改對應函式,每個例項都是單獨的。
解析的html如下:
a paragraph.
a paragraph with class.
a paragraph in div.
1.獲取屬性的函式,是個靜態函式,新增的。直接定義在類中,返回屬性名對應的屬性
def _attr(attrlist, attrname):
for attr in attrlist:
if attr[0] == attrname:
return attr[1]
return none
2.獲取所有p標籤的文字,最簡單方法只修改handle_data
def handle_data(self, data):
if self.lasttag == 'p':
print("encountered p data :", data)
3.獲取css樣式(class)為p_font的p標籤的文字,使用了案例1,增加乙個例項屬性作為標誌,選取需要的標籤
def __init__(self):
htmlparser.__init__(self)
self.flag = false
def handle_starttag(self, tag, attrs):
if tag == 'p' and _attr(attrs, 'class') == 'p_font':
self.flag = true
def handle_data(self, data):
if self.flag == true:
print("encountered p data :", data)
4.獲取p標籤的屬性列表
def handle_starttag(self, tag, attrs):
if tag == 'p':
print("encountered p attrs :", attrs)
5.獲取p標籤的class屬性
def handle_starttag(self, tag, attrs):
if tag == 'p' and _attr(attrs, 'class'):
print("encountered p class :", _attr(attrs, 'class'))
6.獲取div下的p標籤的文字
def __init__(self):
htmlparser.__init__(self)
self.in_div = false
def handle_starttag(self, tag, attrs):
if tag == 'div':
self.in_div = true
def handle_data(self, data):
if self.in_div == true and self.lasttag == 'p':
print("encountered p data :", data)
7.處理注釋中的標籤,若需要的資料在注釋中,使用一般函式解析不到
處理方法為,寫兩個類,繼承htmlparser。在其中乙個類的handle_comment裡例項化解析類,和其他標籤一樣解析
這裡的myhtmlparser可以為基本使用中的myhtmlparser,或者按需重寫。
class commenthtmlparser(htmlparser):
def __init__(self):
htmlparser.__init__(self)
def handle_comment(self,data):
cparser = myhtmlparser()
cparser.feed(data)
該文章**於這裡,謝謝
python爬蟲常用庫安裝 爬蟲常用庫的安裝
請求庫 解析庫儲存庫 工具庫請求庫 urlib re python內建庫 requests pip3 install requests pip2,pip conda都是可以選擇的 selenium pip3 install selenium chromedriver 測試python下輸入 from...
python爬蟲常用的模組
由於作者經常有抓取 內容的需要,所以就對使用過的爬蟲工具進行了總結,以備後續查詢某台灣大神開發的,功能簡單,能夠自動抓取某個 的所有內容,當然你也可是設定那些url需要抓。功能介面 set content type filter 設定抓取的content type header中的contentty...
python 常用小程式 網頁爬蟲
設定鏈結的路徑 url def downloadpicfromurl dest dir,url try urllib.urlretrieve url dest dir except print terror retrieving the url dest dir 執行downloadpicfromu...