• 【py分析】使用SGMLParser分析淘宝html


    SGMLParser

    Python 默认自带 HTMLParser 以及 SGMLParser 等等解析器,前者实在是太难用了,我就用 SGMLParser 写了一个示例程序:

    import urllib2
    from sgmllib import SGMLParser
     
    class ListName(SGMLParser):
    	def __init__(self):
    		SGMLParser.__init__(self)
    		self.is_h4 = ""
    		self.name = []
    	def start_h4(self, attrs):
    		self.is_h4 = 1
    	def end_h4(self):
    		self.is_h4 = ""
    	def handle_data(self, text):
    		if self.is_h4 == 1:
    			self.name.append(text)
     
    content = urllib2.urlopen('http://list.taobao.com/browse/cat-0.htm').read()
    listname = ListName()
    listname.feed(content)
    for item in listname.name:
    	print item.decode('gbk').encode('utf8')

    很简单,这里定义了一个叫做 ListName 的类,继承 SGMLParser 里面的方法。使用一个变量 is_h4 做标记判定 html 文件中的 h4 标签,如果遇到 h4 标签,则将标签内的内容加入到 List 变量 name 中。解释一下 start_h4()  end_h4() 函数,他们原型是 SGMLParser 中的

    start_tagname(self, attrs)
    end_tagname(self)

    tagname 就是标签名称,比如当遇到 <pre>,就会调用 start_pre,遇到 </pre>,就会调用end_preattrs 为标签的参数,以 [(attribute, value), (attribute, value), ...] 的形式传回。

    输出:

    虚拟票务
    数码市场
    家电市场
    女装市场
    男装市场
    童装童鞋
    女鞋市场
    男鞋市场
    内衣市场
    箱包市场
    服饰配件
    珠宝饰品
    美容市场
    母婴市场
    家居市场
    日用市场
    食品/保健
    运动鞋服
    运动户外
    汽车用品
    玩具市场
    文化用品市场
    爱好市场
    生活服务

    如果有乱码,可能是与网页编码不一致,需要替换最后一句 deconde() 的参数,我在香港淘宝默认用的是繁体编码。各位可以 copy 上面的代码自己试试,把淘宝的商品目录抓下来,就是这么简单。稍微改改,就可以抽取二级分类等其他信息

  • 相关阅读:
    Python爬虫重写。
    python threading
    问题8:手机端实现点击按钮时更换颜色(解决IOS不显示背景)
    问题7:JavaScript 常用正则示例
    常见问题6:控制台报错整理——报错
    常见问题5:图片与文字垂直居中
    bootstrap学习总结
    常见问题4:文本不能选择 效果
    常见问题3:自适应大小高度与宽度
    javascript——10章 DOM
  • 原文地址:https://www.cnblogs.com/lizunicon/p/3511498.html
Copyright © 2020-2023  润新知