• 使用SGMLParser抓取html里标签<td>内的数据


    之前做好抓过好几次网页数据,一般都用了以下方法。

    1.最简单的find + split

    2.正则表达式,我仍然只会用点findall什么的。

    后来咨询过大牛。大牛回了个

    1         r = re.compile(r'(?s)<span class="(count|grade)">(?P<data>[^<]+)</span>')
    2         for m in r.finditer(content):
    3             v = m.group("data")
    4             print v.strip().replace(',', '')        

    用于抓取如下数据:

     1 <ul class="use-state">
     2                     <li>
     3                 <span class="label-like">有效评价:</span>
     4                 <span class="count">
     5                                             2,112 次
     6                                     </span>
     7             </li>
     8                 <li><span class="label-like">付费使用:</span><span class="count">1.5万人</span></li>
     9                 <li><span class="label-like">免费使用:</span><span class="count">132人</span></li>
    10                 <li><span class="label-like">浏览数:</span><span class="count">9.0万次/30天</span></li>
    11     </ul>

    大牛不愧是大牛,还说了可以了解了解 BeautifulSoup什么的

    3.后来碰到数据放到<td>data</td>里的

    1 <p>60  元/月</p>                        
    2                             </td>
    3                             <td> 2179 </td>
    4                             <td>18871</td>

    最后用SGMLParser 实现了

     1 from sgmllib import SGMLParser
     2 
     3 class MySgmlParser(SGMLParser):
     4 
     5     def __init__(self):
     6         SGMLParser.__init__(self)
     7         self.label = False
     8         self.num_list = []
     9 
    10     def start_td(self, attrs):
    11         self.label = True
    12 
    13     def end_td(self):
    14         self.label = False
    15 
    16     def handle_data(self, data):
    17         if self.label:
    18             data = data.strip()
    19             if data.isdigit():
    20                 self.num_list.append(int(data))

    这期间有两个小插曲

    一是第一次用SGMLParser的时候 失败了,就是抓到的data没有包含我要的数据,不知道为什么。隔了几周后,就行了。

    二是中间用过HTMLParser,但是抛异常。

    参考:http://hi.baidu.com/jfojfo/item/734283397d682e21b3c0c54d

  • 相关阅读:
    日志记录
    python进程基础
    堆和栈的区别
    Mysql数据类型(一)
    JS超链接动态显示图片
    WPF Button控件模板
    js table鼠标点击时变色
    JS表格各行变色
    js动态创建表格
    Codeforces 659G Fence Divercity dp
  • 原文地址:https://www.cnblogs.com/2010Freeze/p/3049277.html
Copyright © 2020-2023  润新知