python提取html當(dāng)中的信息_第1頁
python提取html當(dāng)中的信息_第2頁
python提取html當(dāng)中的信息_第3頁
python提取html當(dāng)中的信息_第4頁
python提取html當(dāng)中的信息_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SGMLParserPython 默認(rèn)自帶 HTMLParser 以及 SGMLParser 等等解析器,前者實(shí)在是太難用了,我就用 SGMLParser 寫了一個(gè)示例程序:import urllib2from sgmllib import SGMLParserclass ListName(SGMLParser):def _init_(self):SGMLParser._init_(self)self.is_h4 = = def start_h4(self, attrs):self.is_h4 = 1def end_h4(self):self.is_h4 = def han

2、dle_data(self, text):if self.is_h4 = 1:.append(text)content = urllib2.urlopen(/browse/cat-0.htm).read()listname = ListName()listname.feed(content)for item in :print item.decode(gbk).encode(utf8)很簡(jiǎn)單,這里定義了一個(gè)叫做ListName的類,繼承SGMLParser里面的方法。使用一個(gè)變量is_h4做標(biāo)記判定 html

3、 文件中的h4標(biāo)簽,如果遇到h4標(biāo)簽,則將標(biāo)簽內(nèi)的內(nèi)容加入到List變量name中。解釋一下start_h4()和end_h4()函數(shù),他們?cè)褪?SGMLParser 中的start_tagname(self, attrs)end_tagname(self)tagname就是標(biāo)簽名稱,比如當(dāng)遇到,就會(huì)調(diào)用start_pre,遇到,就會(huì)調(diào)用end_pre。attrs為標(biāo)簽的參數(shù),以(attribute, value), (attribute, value), .的形式傳回。輸出:虛擬票務(wù)數(shù)碼市場(chǎng)家電市場(chǎng)女裝市場(chǎng)男裝市場(chǎng)童裝童鞋女鞋市場(chǎng)男鞋市場(chǎng)內(nèi)衣市場(chǎng)箱包市場(chǎng)服飾配件珠寶飾品美容市場(chǎng)母嬰市場(chǎng)家居

4、市場(chǎng)日用市場(chǎng)食品/保健運(yùn)動(dòng)鞋服運(yùn)動(dòng)戶外汽車用品玩具市場(chǎng)文化用品市場(chǎng)愛好市場(chǎng)生活服務(wù)如果有亂碼,可能是與網(wǎng)頁編碼不一致,需要替換最后一句deconde()的參數(shù),我在香港淘寶默認(rèn)用的是繁體編碼。各位可以 copy 上面的代碼自己試試,把淘寶的商品目錄抓下來,就是這么簡(jiǎn)單。稍微改改,就可以抽取二級(jí)分類等其他信息python的SGMLParser模塊處理html解析非常的方便,它是處理網(wǎng)頁解析的好幫手,能夠?qū)TML 處理分成三步:將 HTML 分解成它的組成片段,對(duì)片段進(jìn)行加工,接著將片段再重新合成 HTML。第一步是通過 sgmllib.py 來完成的,它是標(biāo)準(zhǔn) Python 庫(kù)的一部分。理解本

5、章的關(guān)鍵是要知道 HTML 不只是文本,更是結(jié)構(gòu)化文本。這種結(jié)構(gòu)來源于開始與結(jié)束標(biāo)記的或多或少分級(jí)序列。通常您并不以這種方式處理 HTML ,而是以文本方式 在一個(gè)文本編輯中對(duì)其進(jìn)行處理,或以可視的方式 在一個(gè)瀏覽器中進(jìn)行瀏覽或頁面編輯工具中進(jìn)行編輯。sgmllib.py 表現(xiàn)出了 HTML 的結(jié)構(gòu)。sgmllib.py 包含一個(gè)重要的類:SGMLParser。SGMLParser 將 HTML 分解成有用的片段,比如開始標(biāo)記和結(jié)束標(biāo)記。在它成功地分解出某個(gè)數(shù)據(jù)為一個(gè)有用的片段后,它會(huì)根據(jù)所發(fā)現(xiàn)的數(shù)據(jù),調(diào)用一個(gè)自身內(nèi)部的方法。為了使用這個(gè)分析器,您需要子類化 SGMLParser 類,并且覆蓋

6、這些方法。這就是當(dāng)我說它表示了 HTML 結(jié)構(gòu) 的意思:HTML 的結(jié)構(gòu)決定了方法調(diào)用的次序和傳給每個(gè)方法的參數(shù)。SGMLParser 將 HTML 分析成 8 類數(shù)據(jù),然后對(duì)每一類調(diào)用單獨(dú)的方法:開始標(biāo)記 (Start tag)是開始一個(gè)塊的 HTML 標(biāo)記,像 、 或 等,或是一個(gè)獨(dú)一的標(biāo)記,像 或 等。當(dāng)它找到一個(gè)開始標(biāo)記 tagname,SGMLParser 將查找名為 start_tagname 或 do_tagname 的方法。例如,當(dāng)它找到一個(gè) 標(biāo)記,它將查找一個(gè) start_pre 或 do_pre 的方法。如果找到了,SGMLParser 會(huì)使用這個(gè)標(biāo)記的屬性列表來調(diào)用這個(gè)方

7、法;否則,它用這個(gè)標(biāo)記的名字和屬性列表來調(diào)用 unknown_starttag 方法。 結(jié)束標(biāo)記 (End tag) 是結(jié)束一個(gè)塊的 HTML 標(biāo)記,像 、 或 等。當(dāng)找到一個(gè)結(jié)束標(biāo)記時(shí),SGMLParser 將查找名為 end_tagname 的方法。如果找到,SGMLParser 調(diào)用這個(gè)方法,否則它使用標(biāo)記的名字來調(diào)用 unknown_endtag 。 字符引用 (Character reference) 用字符的十進(jìn)制或等同的十六進(jìn)制來表示的轉(zhuǎn)義字符,像 。當(dāng)找到,SGMLParser 使用十進(jìn)制或等同的十六進(jìn)制字符文本來調(diào)用 handle_charref 。 實(shí)體引用 (Entity

8、 reference) HTML 實(shí)體,像 。當(dāng)找到,SGMLParser 使用 HTML 實(shí)體的名字來調(diào)用 handle_entityref 。 注釋 (Comment) HTML 注釋,包括在 之間。當(dāng)找到,SGMLParser 用注釋內(nèi)容來調(diào)用 handle_comment。 處理指令 (Processing instruction) HTML 處理指令,包括在 之間。當(dāng)找到,SGMLParser 用處理指令內(nèi)容來調(diào)用 handle_pi。 聲明 (Declaration) HTML 聲明,如 DOCTYPE,包括在 之間。當(dāng)找到,SGMLParser 用聲明內(nèi)容來調(diào)用 handle_d

9、ecl。 文本數(shù)據(jù) (Text data) 文本塊。不滿足其它 7 種類別的任何東西。當(dāng)找到,SGMLParser 用文本來調(diào)用 handle_data。 重要Python 2.0 存在一個(gè) bug,即 SGMLParser 完全不能識(shí)別聲明 (handle_decl 永遠(yuǎn)不會(huì)調(diào)用),這就意味著 DOCTYPE 被靜靜地忽略掉了。這個(gè)錯(cuò)誤在 Python 2.1 中改正了。sgmllib.py 所附帶的一個(gè)測(cè)試套件舉例說明了這一點(diǎn)。您可以運(yùn)行 sgmllib.py,在命令行下傳入一個(gè) HTML 文件的名字,然后它會(huì)在分析標(biāo)記和其它元素的同時(shí)將它們打印出來。它的實(shí)現(xiàn)是通過子類化 SGMLPars

10、er 類,然后定義 unknown_starttag,unknown_endtag,handle_data 和其它方法來實(shí)現(xiàn)的。這些方法簡(jiǎn)單地打印出它們的參數(shù)。如果要詳細(xì)的了解python SGMLParser的用法的話,可以看看python SGMLParser的文檔,下面放上個(gè)我用python SGMLParsr寫的例子,希望對(duì)大家有幫助:#encoding=utf-8#description:baidutiba contentimport sysimport reimport httplibimport urllibfrom sgmllib import SGMLParserclass

11、BaidutiebaParser(SGMLParser): 在百度貼吧里采集相應(yīng)的關(guān)鍵字的標(biāo)題 def reset(self): SGMLParser.reset(self) = # self.q_check = 0 self.num = 0 self.strcontent = def start_td(self, tag): 匹配 標(biāo)簽 if len(tag)!=0 and tag01 = s: self.num = self.num + 1 self.q_check = 1 def handle_data(self, text): 處理文本 txt = text.str

12、ip() if txt and self.q_check: for i in checklist: pipei = r%s % str(i)#在要匹配的信息里找到和關(guān)鍵字匹配 check_pan = pile(pipei) if check_pan.search(txt) is not None: .append(txt) else: continue self.strcontent = $|$.join() def end_td(self): 匹配 self.q_check = 0#配置信息# keylist = 旅游#貼吧名稱checklist = 張家界,韓國(guó)#要查詢的關(guān)鍵字content = #采集內(nèi)容for m in keylist: page = 0 keyword = urllib.quote(m.decode(utf-8).encode(gbk) for i in xrange(10): url = /f?z=0&ct=&lm=11&sc=0&rn=50&tn=baiduKeywordSearch&rs3=0&rs4=0&word=%s&pn=%s % (str(keyword),str(page) data = urll

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論