用python写爬虫的最简单的版本。
效果是把目标URL的所有想要的URL抓出来。
URLLister.py
from sgmllib import SGMLParser class URLLister(SGMLParser): def reset(self): SGMLParser.reset(self) self.urls = [] self.imgs = [] def start_a(self,attrs): href = [v for k, v in attrs if k == 'href'] if href: self.urls.extend(href) def start_img(self,attrs): img = [v for k, v in attrs if k == 'src'] if img: self.imgs.extend(img)科普1:append() 和extend() 一开始没有注意,前者是在列表尾追加一个元素,后者是追加一个列表。
科普2:href = [v for k, v in attrs if k == 'href'] 返回一个匹配key值为'href'的values的集合。
科普3:class中的元素,都要用self来引用,不加就是全局变量啦。
test.py
import urllib,URLLister parser = URLLister.URLLister() url = urllib.urlopen("http://www.baidu.com") parser.feed(url.read()) url.close() parser.close() for u in parser.urls: print u for i in parser.imgs: print i科普4:urllib在python标准库中。
科普5:urlopen() 如文件对象一般,打开一个web url,所以也要close()。
科普6:SGMLParser的feed(str)就是把str填充给SGMLParser去解析。