爬虫并做文本预处理的注意事项

关于爬虫

选了知乎做来源, 在未知的情况下选了一个硬骨头。知乎的反扒机制并不是不了解前端 开发的人可以自主编码突破的(详见x-zes-96加密)。直接使用八爪鱼爬回答内容,评论api还能调用就自己写request了。

下载图片的时候需要注意图片格式,常见是jpg,而gif、webp等不是直接可以使用ocr的格式,需要使用正则排除或格式转换。

文本预处理

中文编码使用utf-8。python中字符串加载格式是Unicode,必须通过Unicode编码删除特殊字符,以防后期分句分词出现bug。Unicode编码删除特殊字符前必须先正则删除链接和html标签。

def illegal_char(s):
    s = re \
        .compile( \
        u"[^"
        u"\u4e00-\u9fa5"
        u"\u0041-\u005A"
        u"\u0061-\u007A"
        u"\u0030-\u0039"
        u"\u3002\uFF1F\uFF01\uFF0C\u3001\uFF1B\uFF1A\u300C\u300D\u300E\u300F\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\u3010\u3011\u2014\u2026\u2013\uFF0E\u300A\u300B\u3008\u3009"
        u"\!\@\#\$\%\^\&\*\(\)\-\=\[\]\{\}\\\|\;\'\:\"\,\.\/\<\>\?\/\*\+"
        u"]+") \
        .sub('', s)
    return s

动态正则匹配使用re.escape()

过长的文本需要截断:

// An highlighted block
def sent_split(text):
    sts = ['']
    allsentences = ['']
    sigments = re.findall('.{300}', text)
    for i in sigments:
        i = sts[-1] + i
        sts = StnSplit().split(i) //调用分句模型
        allsentences.pop(-1)
        allsentences.extend(sts)
    allsentences = list(filter(None, allsentences))
    return allsentences

句子太多(列表太长)需要make batch:

BATCH_SIZE = 32 
def makebatch(list):
    batchlist = []
    numbatch = len(list) // BATCH_SIZE
    for p in range(numbatch):
        batchlist.append(list[BATCH_SIZE * p:BATCH_SIZE * p + BATCH_SIZE])
    batchlist.append(list[numbatch * BATCH_SIZE:len(list)])
    return batchlist

删除列表元素使用filter()不要使用remove、del等,索引会乱

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值