最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python怎么抓取正文?

    正文概述    2020-08-08   299

    python怎么抓取正文?

    python抓取正文的方法:

    步骤:

    首先清除网页中CSS,Javascript,注释,Meta,Ins这些标签里面的内容,清除空白行。

    计算每一个行的经过处理的数值(1)

    计算上面得出的每行文本数的最大正子串的开始结束位置 

    其中第二步需要说明一下:

    对于每一行,我们需要计算一个数值,这个数值的计算如下:

    一个图片标签img,相当于出现长度为50字符的文本 (给予的权重),x1,

    一个视频标签embed,相当于出现长度为1000字符的文本, x2

    一行内所有链接的标签 a 的文本长度 x3 ,

    其他标签的文本长度 x4

    每行的数值 = 50 * x1其出现次数 + 1000 * x2其出现次数 + x4 – 8

    实现代码:

    #coding:utf-8
    import re
    
    def remove_js_css (content):
        """ remove the the javascript and the stylesheet and the comment content (<script>....</script> and <style>....</style> <!-- xxx -->) """
        r = re.compile(r'''<script.*?</script>''',re.I|re.M|re.S)
        s = r.sub ('',content)
        r = re.compile(r'''<style.*?</style>''',re.I|re.M|re.S)
        s = r.sub ('', s)
        r = re.compile(r'''<!--.*?-->''', re.I|re.M|re.S)
        s = r.sub('',s)
        r = re.compile(r'''<meta.*?>''', re.I|re.M|re.S)
        s = r.sub('',s)
        r = re.compile(r'''<ins.*?</ins>''', re.I|re.M|re.S)
        s = r.sub('',s)
        return s
    
    def remove_empty_line (content):
        """remove multi space """
        r = re.compile(r'''^\s+$''', re.M|re.S)
        s = r.sub ('', content)
        r = re.compile(r'''\n+''',re.M|re.S)
        s = r.sub('\n',s)
        return s
    
    def remove_any_tag (s):
        s = re.sub(r'''<[^>]+>''','',s)
        return s.strip()
    
    def remove_any_tag_but_a (s):
        text = re.findall (r'''<a[^r][^>]*>(.*?)</a>''',s,re.I|re.S|re.S)
        text_b = remove_any_tag (s)
        return len(''.join(text)),len(text_b)
    
    def remove_image (s,n=50):
        image = 'a' * n
        r = re.compile (r'''<img.*?>''',re.I|re.M|re.S)
        s = r.sub(image,s)
        return s
    
    def remove_video (s,n=1000):
        video = 'a' * n
        r = re.compile (r'''<embed.*?>''',re.I|re.M|re.S)
        s = r.sub(video,s)
        return s
    
    def sum_max (values):
        cur_max = values[0]
        glo_max = -999999
        left,right = 0,0
        for index,value in enumerate (values):
            cur_max += value
            if (cur_max > glo_max) :
                glo_max = cur_max
                right = index
            elif (cur_max < 0):
                cur_max = 0
    
        for i in range(right, -1, -1):
            glo_max -= values[i]
            if abs(glo_max < 0.00001):
                left = i
                break
        return left,right+1
    
    def method_1 (content, k=1):
        if not content:
            return None,None,None,None
        tmp = content.split('\n')
        group_value = []
        for i in range(0,len(tmp),k):
            group = '\n'.join(tmp[i:i+k])
            group = remove_image (group)
            group = remove_video (group)
            text_a,text_b= remove_any_tag_but_a (group)
            temp = (text_b - text_a) - 8 
            group_value.append (temp)
        left,right = sum_max (group_value)
        return left,right, len('\n'.join(tmp[:left])), len ('\n'.join(tmp[:right]))
    
    def extract (content):
        content = remove_empty_line(remove_js_css(content))
        left,right,x,y = method_1 (content)
        return '\n'.join(content.split('\n')[left:right])

    更多Python知识请关注Python自学网


    起源地下载网 » python怎么抓取正文?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元