欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深度剖析使用python抓取網頁正文的源碼

 更新時間:2014年06月11日 15:06:47   投稿:hebedich  
平時打開一個網頁,除了文章的正文內容,通常會有一大堆的導航,廣告和其他方面的信息。本文的目的,在于說明如何從一個網頁中提取出文章的正文內容,而過渡掉其他無關的的信息。

本方法是基于文本密度的方法,最初的想法來源于哈工大的《基于行塊分布函數的通用網頁正文抽取算法》,本文基于此進行一些小修改。

約定:
       本文基于網頁的不同行來進行統(tǒng)計,因此,假設網頁內容是沒有經過壓縮的,就是網頁有正常的換行的。

       有些新聞網頁,可能新聞的文本內容比較短,但其中嵌入一個視頻文件,因此,我會給予視頻較高的權重;這同樣適用于圖片,這里有一個不足,應該是要根據圖片顯示的大小來決定權重的,但本文的方法未能實現(xiàn)這一點。

       由于廣告,導航這些非正文內容通常以超鏈接的方式出現(xiàn),因此文本將給予超鏈接的文本權重為零。

       這里假設正文的內容是連續(xù)的,中間不包含非正文的內容,因此實際上,提取正文內容,就是找出正文內容的開始和結束的位置。     

步驟:

       首先清除網頁中CSS,Javascript,注釋,Meta,Ins這些標簽里面的內容,清除空白行。

       計算每一個行的經過處理的數值(1)

       計算上面得出的每行文本數的最大正子串的開始結束位置

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

       對于每一行,我們需要計算一個數值,這個數值的計算如下:

              一個圖片標簽img,相當于出現(xiàn)長度為50字符的文本 (給予的權重),x1,

              一個視頻標簽embed,相當于出現(xiàn)長度為1000字符的文本, x2

              一行內所有鏈接的標簽 a 的文本長度 x3 ,

              其他標簽的文本長度 x4

              每行的數值 = 50 * x1其出現(xiàn)次數 + 1000 * x2其出現(xiàn)次數 + x4 – 8

        //說明, -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實現(xiàn)計算且附帶進度條代碼實例

    基于python實現(xiàn)計算且附帶進度條代碼實例

    這篇文章主要介紹了基于python實現(xiàn)計算且附帶進度條代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 使用Python來開發(fā)微信功能

    使用Python來開發(fā)微信功能

    這篇文章主要介紹了使用Python來開發(fā)微信功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • PyTorch常用函數torch.cat()中dim參數使用說明

    PyTorch常用函數torch.cat()中dim參數使用說明

    這篇文章主要為大家介紹了PyTorch常用函數torch.cat()中dim參數使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Python函數中的全局變量詳解

    Python函數中的全局變量詳解

    大家好,本篇文章主要講的是Python函數中的全局變量詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Python利用正則表達式匹配并截取指定子串及去重的方法

    Python利用正則表達式匹配并截取指定子串及去重的方法

    這篇文章主要介紹了Python利用正則表達式匹配并截取指定子串及去重的方法,涉及Python正則表達式匹配及字符串截取操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 對Python2與Python3中__bool__方法的差異詳解

    對Python2與Python3中__bool__方法的差異詳解

    今天小編就為大家分享一篇對Python2與Python3中__bool__方法的差異詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 在VScode中引用自定義模塊問題

    在VScode中引用自定義模塊問題

    這篇文章主要介紹了在VScode中引用自定義模塊問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • Python使用defaultdict解決字典默認值

    Python使用defaultdict解決字典默認值

    本文主要介紹了Python使用defaultdict解決字典默認值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Python實現(xiàn)彈球小游戲的示例代碼

    Python實現(xiàn)彈球小游戲的示例代碼

    這篇文章主要為大家詳細介紹了Python如何實現(xiàn)簡單的彈球小游戲,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2022-11-11
  • Python?web框架實現(xiàn)增加BasicAuth認證詳解

    Python?web框架實現(xiàn)增加BasicAuth認證詳解

    這篇文章主要為大家詳細介紹了Python如何在web框架中實現(xiàn)增加BasicAuth認證,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05

最新評論