python爬虫进阶(十二):自动摘要及正文抽取

一、文本长度分析


1、HTML中的换行


在HTML源码中,所有的换行都是依赖行级元素、块级元素以及<br>来实现的。

一般大量使用<p>标签来封装正文。


2、去除JavaScript及CSS


利用lxml的clean类,能删除HTML里所包含CSS及script


>>> from lxml.html import clean
>>> cleaner = clean.Cleaner(style=True, scripts=True, comments=True, javascript=True, page_structure=False, safe_attrs_only=False)
>>> content = cleaner.clean_html(content.decode('utf-8')).encode('utf-8')

style = True    去掉CSS

scripts = True    去掉js,插件等

comments = True   去掉注释

JavaScript = True   去掉js


3.去除所有HTML tag


利用下面的正则表达式,把HTML的tag和属性都去掉,最后只剩下正文部分:


reg = re.compile("<[^>]*>")
content = reg.sub('', content)

f = open('cleaned.txt', 'wb+')
f.write(content)
f.close()

如:


4、基于文本长度的分析方法


由上面可以得到每一行只有文本的文件,便可以统计每一行的字符长度。一般的,正文行的字符长度都比较大,而且比较集中,如下:



获取网页代码:

HtmlRetrival.py

import gzip
import re
import urllib.request

from io import StringIO

class HtmlRetrival:

    dir_name = 'files'

    def __init__(self, url):
        self.url = url

    def get_content(self):
        request_headers = {
            'connection': "keep-alive",
            'cache-control': "no-cache",
            'upgrade-insecure-requests': "1",
            'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36",
            'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
            'accept-language': "zh-CN,en-US;q=0.8,en;q=0.6",
            'accept-charset ': 'utf-8'
        }

        filename = self.dir_name + '/' + re.findall('/([^/]+)$', self.url)[0]

        try:
            f = open(filename, 'r+',encoding='utf8')
            content =
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值