用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去解析。