这篇文章将为大家详细讲解有关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抓取正文的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。