0
点赞
收藏
分享

微信扫一扫

Python 抓取解析HTML

7dcac6528821 2022-10-09 阅读 152


这个程序解析百度文库的一个网页,提取其中的一个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()


举报

相关推荐

0 条评论