python提取html当中的信息_第1页
python提取html当中的信息_第2页
python提取html当中的信息_第3页
python提取html当中的信息_第4页
python提取html当中的信息_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SGMLParserPython 默认自带 HTMLParser 以及 SGMLParser 等等解析器,前者实在是太难用了,我就用 SGMLParser 写了一个示例程序:import urllib2from sgmllib import SGMLParserclass ListName(SGMLParser):def _init_(self):SGMLParser._init_(self)self.is_h4 = = def start_h4(self, attrs):self.is_h4 = 1def end_h4(self):self.is_h4 = def han

2、dle_data(self, text):if self.is_h4 = 1:.append(text)content = urllib2.urlopen(/browse/cat-0.htm).read()listname = ListName()listname.feed(content)for item in :print item.decode(gbk).encode(utf8)很简单,这里定义了一个叫做ListName的类,继承SGMLParser里面的方法。使用一个变量is_h4做标记判定 html

3、 文件中的h4标签,如果遇到h4标签,则将标签内的内容加入到List变量name中。解释一下start_h4()和end_h4()函数,他们原型是 SGMLParser 中的start_tagname(self, attrs)end_tagname(self)tagname就是标签名称,比如当遇到,就会调用start_pre,遇到,就会调用end_pre。attrs为标签的参数,以(attribute, value), (attribute, value), .的形式传回。输出:虚拟票务数码市场家电市场女装市场男装市场童装童鞋女鞋市场男鞋市场内衣市场箱包市场服饰配件珠宝饰品美容市场母婴市场家居

4、市场日用市场食品/保健运动鞋服运动户外汽车用品玩具市场文化用品市场爱好市场生活服务如果有乱码,可能是与网页编码不一致,需要替换最后一句deconde()的参数,我在香港淘宝默认用的是繁体编码。各位可以 copy 上面的代码自己试试,把淘宝的商品目录抓下来,就是这么简单。稍微改改,就可以抽取二级分类等其他信息python的SGMLParser模块处理html解析非常的方便,它是处理网页解析的好帮手,能够将HTML 处理分成三步:将 HTML 分解成它的组成片段,对片段进行加工,接着将片段再重新合成 HTML。第一步是通过 sgmllib.py 来完成的,它是标准 Python 库的一部分。理解本

5、章的关键是要知道 HTML 不只是文本,更是结构化文本。这种结构来源于开始与结束标记的或多或少分级序列。通常您并不以这种方式处理 HTML ,而是以文本方式 在一个文本编辑中对其进行处理,或以可视的方式 在一个浏览器中进行浏览或页面编辑工具中进行编辑。sgmllib.py 表现出了 HTML 的结构。sgmllib.py 包含一个重要的类:SGMLParser。SGMLParser 将 HTML 分解成有用的片段,比如开始标记和结束标记。在它成功地分解出某个数据为一个有用的片段后,它会根据所发现的数据,调用一个自身内部的方法。为了使用这个分析器,您需要子类化 SGMLParser 类,并且覆盖

6、这些方法。这就是当我说它表示了 HTML 结构 的意思:HTML 的结构决定了方法调用的次序和传给每个方法的参数。SGMLParser 将 HTML 分析成 8 类数据,然后对每一类调用单独的方法:开始标记 (Start tag)是开始一个块的 HTML 标记,像 、 或 等,或是一个独一的标记,像 或 等。当它找到一个开始标记 tagname,SGMLParser 将查找名为 start_tagname 或 do_tagname 的方法。例如,当它找到一个 标记,它将查找一个 start_pre 或 do_pre 的方法。如果找到了,SGMLParser 会使用这个标记的属性列表来调用这个方

7、法;否则,它用这个标记的名字和属性列表来调用 unknown_starttag 方法。 结束标记 (End tag) 是结束一个块的 HTML 标记,像 、 或 等。当找到一个结束标记时,SGMLParser 将查找名为 end_tagname 的方法。如果找到,SGMLParser 调用这个方法,否则它使用标记的名字来调用 unknown_endtag 。 字符引用 (Character reference) 用字符的十进制或等同的十六进制来表示的转义字符,像 。当找到,SGMLParser 使用十进制或等同的十六进制字符文本来调用 handle_charref 。 实体引用 (Entity

8、 reference) HTML 实体,像 。当找到,SGMLParser 使用 HTML 实体的名字来调用 handle_entityref 。 注释 (Comment) HTML 注释,包括在 之间。当找到,SGMLParser 用注释内容来调用 handle_comment。 处理指令 (Processing instruction) HTML 处理指令,包括在 之间。当找到,SGMLParser 用处理指令内容来调用 handle_pi。 声明 (Declaration) HTML 声明,如 DOCTYPE,包括在 之间。当找到,SGMLParser 用声明内容来调用 handle_d

9、ecl。 文本数据 (Text data) 文本块。不满足其它 7 种类别的任何东西。当找到,SGMLParser 用文本来调用 handle_data。 重要Python 2.0 存在一个 bug,即 SGMLParser 完全不能识别声明 (handle_decl 永远不会调用),这就意味着 DOCTYPE 被静静地忽略掉了。这个错误在 Python 2.1 中改正了。sgmllib.py 所附带的一个测试套件举例说明了这一点。您可以运行 sgmllib.py,在命令行下传入一个 HTML 文件的名字,然后它会在分析标记和其它元素的同时将它们打印出来。它的实现是通过子类化 SGMLPars

10、er 类,然后定义 unknown_starttag,unknown_endtag,handle_data 和其它方法来实现的。这些方法简单地打印出它们的参数。如果要详细的了解python SGMLParser的用法的话,可以看看python SGMLParser的文档,下面放上个我用python SGMLParsr写的例子,希望对大家有帮助:#encoding=utf-8#description:baidutiba contentimport sysimport reimport httplibimport urllibfrom sgmllib import SGMLParserclass

11、BaidutiebaParser(SGMLParser): 在百度贴吧里采集相应的关键字的标题 def reset(self): SGMLParser.reset(self) = # self.q_check = 0 self.num = 0 self.strcontent = def start_td(self, tag): 匹配 标签 if len(tag)!=0 and tag01 = s: self.num = self.num + 1 self.q_check = 1 def handle_data(self, text): 处理文本 txt = text.str

12、ip() if txt and self.q_check: for i in checklist: pipei = r%s % str(i)#在要匹配的信息里找到和关键字匹配 check_pan = pile(pipei) if check_pan.search(txt) is not None: .append(txt) else: continue self.strcontent = $|$.join() def end_td(self): 匹配 self.q_check = 0#配置信息# keylist = 旅游#贴吧名称checklist = 张家界,韩国#要查询的关键字content = #采集内容for m in keylist: page = 0 keyword = urllib.quote(m.decode(utf-8).encode(gbk) for i in xrange(10): url = /f?z=0&ct=&lm=11&sc=0&rn=50&tn=baiduKeywordSearch&rs3=0&rs4=0&word=%s&pn=%s % (str(keyword),str(page) data = urll

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论