#! /usr/bin/env python import pycurl class GetPage: def __init__ (self, url): self.contents ='' self.url = url def read_page (self, buf): self.contents = self.contents + buf def show_page (self): print self.contents class GetPageByFakeBrowser(GetPage): def __init__ (self, url, ua): self.contents = '' self.url = url self.ua = ua import HTMLParser class URLParser(HTMLParser.HTMLParser): def __init__(self): HTMLParser.HTMLParser.__init__(self) self.urls = [] def handle_starttag(self, tag, attributes): if tag != 'a': return for name, value in attributes: if name == 'href' and value not in self.urls: self.urls.append (value) mypage = GetPageByFakeBrowser( \ "http://chobill.twbbs.org/blog/", \ "Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.2.15 Version/10.00") testcurl = pycurl.Curl() testcurl.setopt(testcurl.URL, mypage.url) testcurl.setopt(testcurl.USERAGENT, mypage.ua) testcurl.setopt(testcurl.WRITEFUNCTION, mypage.read_page) testcurl.perform() testcurl.close() parser = URLParser() parser.feed ( mypage.contents ) parser.close() for url in parser.urls: print url然而這個程式在許多情況下並不管用,因為這世界上存在許多撰寫的相當"有藝術"或是加入一些直譯語言的網頁,它們會讓這支程式在處理 html 文件時出錯,我們之後會回過頭來修正這些問題。
2010年2月16日 星期二
使用 python + curl 取得網頁內容(2)
當我們取得整個網頁的 html 文件後,接下來就是從 html 中取得我們有興趣的訊息,例如可以搜尋 a 標籤來取得網頁中的連結,以下範例從 http://chobill.twbbs.org/blog/ 網頁中取得所有連結,以 GetPageByFakeBrowser 取得網頁內容,接著使用 URLParser 將網頁連結過濾出來:
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言