分类: Python开发

PySpider 抓取结果数据预处理

抓取后的数据内容处理,基本处理分以下几种规则:

  • 删除无用的结点,例如 script style 等
  • 原样保留的结点,例如 table img 等
  • 删除带指定 class 的结点

到这一个完整的处理方法也就出来了:

def custom_text(self, doc):
    # 无用的标签结点
    ignore_tags = ['script', 'style']
    # 原样输出的标签结点
    raw_tags = ['table', 'img']
    # 带指定 class 的标签结点
    ignore_class = ['pstatus']

    for tag in ignore_tags:
        doc.find(tag).remove()
    for clazz in ignore_class:
        doc.find('.' + clazz).remove()
    doc.find('a').remove_attr('href')

    text = []
    def add_text(tag, no_tail=False):
        if not isinstance(tag, _Comment):
            if tag.tag in raw_tags:
                text.append(etree.tostring(tag, with_tail=False))
            elif tag.text:
                text.append(tag.text)
        for child in tag.getchildren():
            add_text(child)
        if not no_tail and tag.tail:
            text.append(tag.tail)

    for tag in doc:
        add_text(tag, no_tail=True)
    result = ''
    for t in text:
        result += t.strip()
        if len(t.strip()) > 1:
            result += "<br/>"
    return result

Recent Posts

Docker 容器非 root 用户监听 80 端口

起因是基于 CentOS 的 …

2 年 之前

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

3 年 之前

Java 运行时反射获取来自继承的泛型

背景 正常情况下 Java 的…

3 年 之前

Java 基于 ByteBuddy 重写系统当前时间

背景 一般单元测试时总会有些代…

3 年 之前

华硕 B450F-Gaming 主板 I211-AT 网卡驱动安装

事情起因是买了块华硕的 ROG…

3 年 之前

PHP 安装 Memcached 扩展

登录服务器挨步执行: # su…

4 年 之前