2007年7月1日星期日

python过滤HTML代码小记

我常用Python来过滤HTML代码,其中一项工作是将网络上批量下载的文章进行重命名。一般操作是先下载索引页面(HTML),然后用FlashGet批量下载文件;用Python过滤索引页面以获取文件下载名与实际文件名的对应列表,最后转换为BAT文件批处理。
但我一直没有能解决如何判断A标签的class属性问题,因为我以前的代码是:
def start_a(self,attrs):
idText = [ v for k, v in attrs if k == 'class' ]
fileHref = [ v for k, v in attrs if k == 'href' ]
print fileHref
if idText == 'a': #这里判断class的属性,有问题的
self.inValid = True
self.fileHrefs.append( fileHref )
def end_a(self):
self.inValid = False
其中判断A标签的class属性那段是有问题的。原因是我没有区分Python中数组与字符串的关系。今天我重读Python帮助后才意识到这一点。我的新代码如下:
def start_a(self,attrs):
idText = [ v for k, v in attrs if k == 'class' ]
fileHref = [ v for k, v in attrs if k == 'href' ]
print fileHref
if idText == ['a'] : #用数组来判断
self.inValid = True
self.fileHrefs.append( fileHref [0]) #在序列数组中添加字符串而非子序列数组
def end_a(self):
self.inValid = False
这样就解决问题了。