这个程序解析百度文库的一个网页,提取其中的一个ID 值, 参考了网上的一些资料,才写成。
我理解这个HTMLParser类是这样工作的: 遍历每个遇到的标签。 主要是三个函数,
handle_starttag
handle_data
handle_endtag
这个三个函数,分别处理,你看到这个标签 开始,中间,结尾的时间点, 你可以做一些自己想要的处理,比如像我,我会把符合我想要的特征的 ID 存下来。 所以需要 在html源文件中,寻找你要找的数据的特点。
写这个程序的另个碰到的问题是 gbk编码的问题。
我一般都是用的utf8的编码 ,但是,百度这个页面的输出是gb2312的编码,这样Python程序就解析不了html了, 也是在网上查了资料,看到
reload(sys)
sys.setdefaultencoding(‘GBK’)
用这两句解决了编码的问题。
下面是源文件,欢迎交流学习。
#-*- encoding: gbk -*-
from HTMLParser import HTMLParser
import urllib
import sys
import sys
#sys.setdefaultencoding('utf8')
reload(sys)
sys.setdefaultencoding('GBK')
class parselinks(HTMLParser):
def __init__(self):
self.data=[]
self.href=0
self.href_value=''
self.target_value=''
HTMLParser.__init__(self)
def handle_starttag(self,tag,attrs):
if tag =='a':
for name,value in attrs:
if name == 'href':
self.href=1
self.href_value = value
if name == 'target':
self.target_value = value
def handle_data(self,data):
pass
def handle_endtag(self,tag):
if tag=='a' and self.target_value == '_blank':
if self.href_value.find('view') != -1:
self.data.append(self.href_value)
self.href=0
self.href_value=''
self.target_value=''
def getresult(self):
self.data = set(self.data)
for value in self.data:
print value
if __name__=="__main__":
IParser = parselinks()
webcontent = urllib.urlopen("http://wenku.baidu.com/o/koolearn?tab=1&od=1&view=0&pay=0&cid=0&pn=1").read()
IParser.feed(webcontent)
IParser.getresult()
IParser.close()