HTMLParser和BeautifulSoup使用入門和總結

1.HTMLParser通常這麼用:html

from html.parser import HTMLParser from urllib import request class MyHtmlParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.categories = [] self.in_a = False def handle_starttag(self, tag, attrs): def _attr(attrs,attrname): for attr in attrs: if attr[0] == attrname: return attr[1] return None if tag == 'a' and _attr(attrs,'role') == 'menuitem': self.in_a = True def handle_endtag(self, tag): if tag == 'a' and self.in_a: self.in_a = False def handle_data(self, data): if self.in_a: self.categories.append(data)

2.BeautifulSoup通常這樣:python

soup = BeautifulSoup(price_html,'html.parser') soup.find_all('div',class_='abcd')

3.HTMLParser遇到div嵌套,handle_endtag裏關閉div開關會提早關閉,試了好久目前沒想出解決方案。正則表達式

3.BeautifulSoup的find('div', class_='test')是find_all(...)的特殊狀況,只匹配第一次。class是python預留關鍵字,因此加下劃線區分,也能夠這樣attrs={'class':'test')。其中test還能夠用正則表達式來匹配。app

4.若是沒有span, tag.div.a.span=None, tag.div.a.span.string會報錯。ui

5.BeautifulSoup遇到問題:<a>kkk<span>lang</span></a>, a.string沒法得到kkk, 就由於a裏面嵌套了<span>url

6.BeautifulSoup先讀取整個html,生成對象樹,比較耗內存,速度慢。可是比HTMLParser更方便使用。spa

相關文章
相關標籤/搜索