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

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

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


#!/usr/bin/python
#coding: utf-8

from bs4 import BeautifulSoup
import re, sys, urllib, urllib2

while 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-8

import urllib2, urllib, sys, re

class 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值