抓取

用Python抓取QQ空间文章(终)

其实上一篇博文就已经将所有抓取工作解决了,这篇主要是抓取后的一点点处理工作(其实也没有处理完,充其量是个半成品)。 上篇说道使用正则表达式来匹配图片地址,不过上次方案有些缺陷,那就是疼迅给每张图片都加了链接,因此直接匹配会得到很多重复的地址,不过没关系,Python里有个很好用的模块:HTMLParser(Python 3是html.parser)。 文档上有个使用的例子: from HTMLParser import HTMLParser class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): print "Encountered the beginning of a %s tag" % tag def handle_endtag(self, tag): print "Encountered the end of a %s tag" % tag 很明显的,handle_starttag方法在遇到开始标签时会被调用,而handle_endtag会在遇到结束标签时被调用,所以用HTMLParser结合正则表达式来获取图片地址就很方便了: def handle_starttag(self, tag, attrs): if tag == 'img': pattern = u"http://bd*.photo.store.qq.com/[^"]*" #图片地址 prog = re.compile(pattern); imgUrl = re.findall(prog, self.get_starttag_text()) if imgUrl: self.imgList.extend(imgUrl) 当然不是只定义这样一个方法就行了,使用HTMLParser需要创建自己的类,并继承HTMLParser: class PicParser(HTMLParser): 使用时只需要生成一个PicParser对象,并将网页内容作为参数调用其feed方法即可: picParser = PicParser() picParser.