python抓取正文的方法
这篇文章将为大家详细讲解有关python抓取正文的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
python抓取正文的方法:
步骤:
首先清除网页中CSS,Javascript,注释,Meta,Ins这些标签里面的内容,清除空白行。
计算每一个行的经过处理的数值(1)
计算上面得出的每行文本数的最大正子串的开始结束位置
其中第二步需要说明一下:
对于每一行,我们需要计算一个数值,这个数值的计算如下:
一个图片标签img,相当于出现长度为50字符的文本 (给予的权重),x1,
一个视频标签embed,相当于出现长度为1000字符的文本, x2
一行内所有链接的标签 a 的文本长度 x3 ,
其他标签的文本长度 x4
每行的数值 = 50 * x1其出现次数 + 1000 * x2其出现次数 + x4 – 8
实现代码:
#coding:utf-8importredefremove_js_css(content):"""removethethejavascriptandthestylesheetandthecommentcontent(<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)returnsdefremove_empty_line(content):"""removemultispace"""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)returnsdefremove_any_tag(s):s=re.sub(r'''<[^>]+>''','',s)returns.strip()defremove_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)returnlen(''.join(text)),len(text_b)defremove_image(s,n=50):image='a'*nr=re.compile(r'''<img.*?>''',re.I|re.M|re.S)s=r.sub(image,s)returnsdefremove_video(s,n=1000):video='a'*nr=re.compile(r'''<embed.*?>''',re.I|re.M|re.S)s=r.sub(video,s)returnsdefsum_max(values):cur_max=values[0]glo_max=-999999left,right=0,0forindex,valueinenumerate(values):cur_max+=valueif(cur_max>glo_max):glo_max=cur_maxright=indexelif(cur_max<0):cur_max=0foriinrange(right,-1,-1):glo_max-=values[i]ifabs(glo_max<0.00001):left=ibreakreturnleft,right+1defmethod_1(content,k=1):ifnotcontent:returnNone,None,None,Nonetmp=content.split('\n')group_value=[]foriinrange(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)-8group_value.append(temp)left,right=sum_max(group_value)returnleft,right,len('\n'.join(tmp[:left])),len('\n'.join(tmp[:right]))defextract(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抓取正文的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。