使用re模块获取糗事百科上的笑话

来源:互联网 发布:火烈鸟化妆品 知乎 编辑:程序博客网 时间:2024/06/06 15:20

获取的只有这个标签下面的内容,不包含图片格式,因为图片格式在编译器上面不显示

代码中为了消除空格还有换行的影响,直接把空格还有换行转化为啥都没有(空字符),注意网页的防爬虫,要记得伪装代码


#!/usr/bin/python#coding: utf-8from bs4 import BeautifulSoupimport re, sys, urllib, urllib2while True:    url = "http://www.qiushibaike.com/hot/page/"    try:        x = int(raw_input("请输入一个数字(输入0结束), 荤段子只有35页:"))    except Exception as e:        print e        print "请输入数字"        continue    if x == 0:        break    url = url + str(x) + "/"    headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}    try:        html = urllib2.Request(url, headers = headers)        html = urllib2.urlopen(html).read()    except Exception as e:        print e        print "出错了,无法链接糗事百科!"    html = html.decode("utf-8")    # 清除换行    html = "".join(html.split('\n'))    reg = re.compile('<div *class="content"><span>(.*?)</span>')    items = reg.findall(html, re.S)    print("第%d页" % x)    for x, item in zip(range(1, len(items)), items):        # 消除<br>相关的表签        item = "".join(item.split('<br/>'))        item = "".join(item.split('<br>'))        sys.stdout.write("第%d条" % x)        sys.stdout.write("\n")        sys.stdout.write(item)        sys.stdout.write("\n")        sys.stdout.write("\n")

运行结果如下所示:

请输入一个数字(输入0结束), 荤段子只有35页:1
第1页
第1条
说个高中的    那会天天上晚自习   有几天时间   老是在中途断电,就可以回寝室了        简直就是我们最开心的时候        直到星期五开大会的时候       一位隔壁班的同学在讲台上声泪俱下的朗读了一份刻苦铭心的检讨书        我才知道一直是他在无私的默默的奉献着      拉电闸!!!!!!!!!!


第2条
气温骤降,得了重感冒,发烧39°度,吃药后爬上床盖上被子昏睡过去。迷迷糊糊中感到老婆进来,怜惜摸摸我的额头。怕吵醒我轻手轻脚钻进被窝,我心想:还是老婆体贴我。突然老婆紧紧抱着我:“艾玛,外面冷死了,还是你暖和”。。这个臭婆娘,敢情把我当成热水袋了…

(内容太多,中间的省略了)


第19条
楼下面包店门口,遇到楼上阿姨溜狗。她问我:丫头干嘛去?我:买点面包,我喜欢吃这里的果酱面包。阿姨:哦,你也喜欢果酱的?我甜甜一笑:是啊阿姨,你也喜欢?阿姨摇头:不,我家的狗喜欢果酱面包!……空气凝固了,玛德我不想说话了!


请输入一个数字(输入0结束), 荤段子只有35页:0


Process finished with exit code 0




版本2:

使用类封装代码,同时代码用来爬取笑话内容,作者,好笑的数量以及评论数


#!/usr/bin/python#coding: utf-8import urllib2, urllib, sys, reclass Spider(object):    def __init__(self, url, x):        self.url = url + str(x) + "/"    def find(self):        headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}        url = urllib2.Request(self.url, headers = headers)        html = urllib2.urlopen(url).read()        # 匹配作者,内容,好笑数以及评论数量        st = r'<div class="article block untagged mb15" id=.*?>.*?<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?<span class="stats-vote">(.*?)</span>.*?<a href=.*?>(.*?)</a>'        regix = re.findall(st, html, re.S)        for reg in regix:            for x, r in zip(range(0, len(reg)), reg):                if x == 0:                    print u"作者:", r.strip()                elif x == 1:                    # 把中间可能出现的</br>标签都剔除出去                    r = r.replace("<br/>", "\n")                    print r.strip()                elif x == 2 or x == 3:                    # print r                    # <i class=.*?>(.*?)</i>(.*?)                    rex = re.findall("<i class=.*?>(.*?)</i>(.*)", r, re.S)                    # 输出rex可以知道是一个数组                    # print rex                    print rex[0][-1].strip(), rex[0][-2].strip()            sys.stdout.write("\n")            sys.stdout.write("\n")if __name__ == "__main__":    while True:        try:            url = "http://www.qiushibaike.com/text/page/"            x = int(raw_input(u"请输入要查找的页码:"))            s = Spider(url, x)            s.find()        except Exception as e:            print(u"出错了,请重新输入")            continue


0 0
原创粉丝点击