捧腹网短笑话正则匹配-如何剔除网页源码的制表符

以捧腹网的短笑话为例,我们可以通过requests方法提取出网页的源代码,然后通过正则匹配来得到相关的短笑话

第一步,得到网页源码,使用requests的get方法,需要注意的是,网页默认编码是utf-8,我们需要指定编码格式为utf-8,才能正确显示出网页的文本信息

#-*- coding:utf-8 -*-
import requests
import re

respon=requests.get('https://www.pengfu.com/xiaohua_1.html?qq-pf-to=pcqq.c2c')
respon.encoding='uft-8'
a=respon.text

print(a)

可以查看出网页的信息,截取其中部分片段如下,这里面包含我们所需要的各种信息

<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825126_1.html" target="_blank">为师对你们的期望</a>
</h1>
<div class="content-img clearfix pt10 relative">
堂中,大师正在对弟子讲话:“为师为你们所起之名并非随随便便,而是为师对你们的期望,你们懂了吗?”<br />
众弟子都回答懂了,只有一名弟子默然不语,大师见状,问那名弟子道:“圆寂,你为什么不说话了?” </div>
</dd>

我们在整个网页的源码中,查找与我们目标文本临近的关键字段,这里,我们选择<div class="content-img clearfix pt10 relative">作为我们的关键字段,在其前后分别有我们所需的标题和正文

可以分析出,其前后存在许多的空格,换行和缩进,[\s\S],这里有以下解释:

\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S
匹配任何非空白字符。等价于[^ \f\n\r\t\v]。

那么我们就可以制定正则的表达式

pattern = re.compile(r'" target="_blank">(.+?)</a>([\s\S]*?)</h1>([\s\S]*?)<div class="content-img clearfix pt10 relative">(.+?).+?(.+?)</div>',re.S)
cont = re.findall(pattern,a)

第一个括号代表我们得到的标题,(.+?)代表以非贪婪模式匹配任意字符,([\s\S]*?)代表我们以非贪婪模式匹配多个制表符,至于后面的我们采用任意字符匹配处理

可以得到匹配的列表

之后可以输出cont的格式

print(cont)

得到结果如下:

[('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825137)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825137_1.html" target="_blank">康师傅?</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t一名开公交车的师傅,姓康,有个妹子经常坐他开的公交车上下班。有天妹子害羞的说,康师傅。我可以泡你嘛?康师傅一愣,随后说道,看你有没有那么多水了。\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825136)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825136_1.html" target="_blank">好像有哪里不对啊</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t去同事家串门,他们小两口在吵架,我劝了几句,总算缓和了,我就打算离去,同事媳妇拿了好大一包香蕉给我带走,我客气道:别都给我啊,给王兄留点。她媳妇说到:哼,就是给畜生吃也不给他吃。我说了声谢谢就走了,现在想想怎么那么不对劲!\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825133)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825133_1.html" target="_blank">陈独秀,你来讲课吧</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t某天王思聪找到禅师,问到:“大师,好多人喊我老公,好苦恼,怎么办?”<br />\r\n禅师什么也没说,递给他一盒套套。王思聪拿着套套若有所思说:“我懂了,大师的意思是既然无法避免,就做好安全措施?”<br />\r\n禅师摇摇头,说:“老公,操我!”\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825132)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825132_1.html" target="_blank">洋葱:???</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t女朋友向我提出分手,我问她为什么?<br />\r\n她没有说话,拿出一颗洋葱,一层一层的剥开,眼中充满泪水。<br />\r\n看到这里我也很不好受:“你的意思是,相处这么久我都没有懂你层层包裹下的内心世界吗?”<br />\r\n她哽咽着说道:“不,我的意思是,我爱撕葱!!”\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825131)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825131_1.html" target="_blank">小太子奶</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t兴奋的发现,老公把我的备注名称改成了“小太子奶”。<br />\r\n晚上撒娇的说:老公,是不是想像电视里宠妃子一样爱我。<br />\r\n那货居然说:老婆,你倒着念。<br />\r\n我:。。。\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825130)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825130_1.html" target="_blank">今晚不杀鱼了杀你</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t老婆:让你杀个鱼这么费劲!你跟笨蛋什么关系?<br />\r\n老公:夫妻关系……\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825129)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825129_1.html" target="_blank">令人窒息的操作</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t老公:我伸手扯下她薄如蝉翼的衣服,伸出舌头舔了舔她嫩出水的脸颊,顺势吻上了她的嘴唇,用力吮吸着...<br />\r\n媳妇伸手就是一掌:MD,吃个葡萄你至于说的这么销魂吗?\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825128)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825128_1.html" target="_blank">最后三天让你知道我的厉害</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t作业妩媚地躺在我的床上,娇媚的唇角轻启:“官人,这可都一个月了,你怎么还不来碰碰人家。”<br />\r\n这作业也不愧是美人,声音微颤最后声线上扬了三度,像羽毛似的撩的人心痒痒,我一巴掌糊它脸上。“最后三天让你知道我的厉害。”\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825127)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825127_1.html" target="_blank">我要小解</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t某日连续上三堂枯燥的国文课,老师一直不肯下课,<br />\r\n同桌终于忍不住大喊:“我要小解。”<br />\r\n老师大怒:“上我的课竟敢不知羞耻的要小姐。”\t\t\t\t\t\t\t\t\t'), ('水能载舟亦可赛艇', '</p>\n\t\t\t\t\t\t\t\t<div class="addbtnwraps">\n\t\t\t\t\t\t\t\t\t\t<div class="redBag" onclick="postRedBag(1825126)"></div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="plus" href="javascript:void(0);" onclick="add($(this))"  userid="9762557" style="color: #ffffff;">+ 关注</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<h1 class="dp-b"><a href="https://www.pengfu.com/content_1825126_1.html" target="_blank">为师对你们的期望</a>\n                    ', '\n\t\t\t\t', '\n', '\t\t\t\t\t\t\t\t\t堂中,大师正在对弟子讲话:“为师为你们所起之名并非随随便便,而是为师对你们的期望,你们懂了吗?”<br />\r\n众弟子都回答懂了,只有一名弟子默然不语,大师见状,问那名弟子道:“圆寂,你为什么不说话了?”\t\t\t\t\t\t\t\t\t')]

观察出,列表中的每个元素都是一个元组,每个元组中都含有若个字符串,第一个字符串是作者,第二个字符串中包含我们所需的标题,使用正则进一步提取,

pattern = re.compile('target="_blank">(.+?)</a>',re.S)
title=re.search(pattern,item[1]).group(1)

正文处于第五个字符串中,包含正文,正文中,包含很多空格和换行,可以通过strip()函数处理,但输出之后发现,仍存在一些<br/>,这个属于html的特殊用法,用作换行,可以使用replace函数处理

content=item[4].replace('<br />','')
print('正文:%s'%content.strip())

最后得到所有的处理代码如下(注意缩进):
#-*- coding:utf-8 -*-
import requests
import re

respon=requests.get('https://www.pengfu.com/xiaohua_1.html?qq-pf-to=pcqq.c2c')
respon.encoding='uft-8'
a=respon.text
pattern = re.compile(r'" target="_blank">(.+?)</a>([\s\S]*?)</h1>([\s\S]*?)<div class="content-img clearfix pt10 relative">(.+?).+?(.+?)</div>',re.S)
cont = re.findall(pattern,a)
for item in cont:
print('*'*100)
print('作者:%s'%item[0])
pattern = re.compile('target="_blank">(.+?)</a>',re.S)
title=re.search(pattern,item[1]).group(1)
print('标题:%s'%title)
content=item[4].replace('<br />','')
print('正文:%s'%content.strip())

运行输出的结果如下:

****************************************************************************************************
作者:水能载舟亦可赛艇
标题:康师傅?
正文:一名开公交车的师傅,姓康,有个妹子经常坐他开的公交车上下班。有天妹子害羞的说,康师傅。我可以泡你嘛?康师傅一愣,随后说道,看你有没有那么多水了。
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:好像有哪里不对啊
正文:去同事家串门,他们小两口在吵架,我劝了几句,总算缓和了,我就打算离去,同事媳妇拿了好大一包香蕉给我带走,我客气道:别都给我啊,给王兄留点。她媳妇说到:哼,就是给畜生吃也不给他吃。我说了声谢谢就走了,现在想想怎么那么不对劲!
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:陈独秀,你来讲课吧
正文:某天王思聪找到禅师,问到:“大师,好多人喊我老公,好苦恼,怎么办?”

禅师什么也没说,递给他一盒套套。王思聪拿着套套若有所思说:“我懂了,大师的意思是既然无法避免,就做好安全措施?”

禅师摇摇头,说:“老公,操我!”
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:洋葱:???
正文:女朋友向我提出分手,我问她为什么?

她没有说话,拿出一颗洋葱,一层一层的剥开,眼中充满泪水。

看到这里我也很不好受:“你的意思是,相处这么久我都没有懂你层层包裹下的内心世界吗?”

她哽咽着说道:“不,我的意思是,我爱撕葱!!”
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:小太子奶
正文:兴奋的发现,老公把我的备注名称改成了“小太子奶”。

晚上撒娇的说:老公,是不是想像电视里宠妃子一样爱我。

那货居然说:老婆,你倒着念。

我:。。。
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:今晚不杀鱼了杀你
正文:老婆:让你杀个鱼这么费劲!你跟笨蛋什么关系?

老公:夫妻关系……
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:令人窒息的操作
正文:老公:我伸手扯下她薄如蝉翼的衣服,伸出舌头舔了舔她嫩出水的脸颊,顺势吻上了她的嘴唇,用力吮吸着...

媳妇伸手就是一掌:MD,吃个葡萄你至于说的这么销魂吗?
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:最后三天让你知道我的厉害
正文:作业妩媚地躺在我的床上,娇媚的唇角轻启:“官人,这可都一个月了,你怎么还不来碰碰人家。”

这作业也不愧是美人,声音微颤最后声线上扬了三度,像羽毛似的撩的人心痒痒,我一巴掌糊它脸上。“最后三天让你知道我的厉害。”
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:我要小解
正文:某日连续上三堂枯燥的国文课,老师一直不肯下课,

同桌终于忍不住大喊:“我要小解。”

老师大怒:“上我的课竟敢不知羞耻的要小姐。”
****************************************************************************************************
作者:水能载舟亦可赛艇
标题:为师对你们的期望
正文:堂中,大师正在对弟子讲话:“为师为你们所起之名并非随随便便,而是为师对你们的期望,你们懂了吗?”

众弟子都回答懂了,只有一名弟子默然不语,大师见状,问那名弟子道:“圆寂,你为什么不说话了?”
[Finished in 0.9s]

猜你喜欢

转载自www.cnblogs.com/aaron2932/p/9044986.html