zoukankan      html  css  js  c++  java
  • 【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 上面的代码自己试试,把淘宝的商品目录抓下来,就是这么简单。稍微改改,就可以抽取二级分类等其他信息

  • 相关阅读:
    MYSQL
    spider
    git命令
    just_connect.py
    3sql
    4sql
    2sql
    springMVC3学习(六)--SimpleFormController
    springMVC3学习(五)--MultiActionController
    springMVC3学习(四)--访问静态文件如js,jpg,css
  • 原文地址:https://www.cnblogs.com/lizunicon/p/3511498.html
Copyright © 2011-2022 走看看