网络爬虫——爬取糗事百科笑料段子

        这两天在看python,抱着一本python学习手册看了好几天了,感觉没有什么长进。听说python写网络爬虫挺好,就在网上搜了一下教程,跟着看来看,一知半解自己也模仿着写了一个小项目:爬取糗事百科笑料段子

      或许是页面代码重写了吧,教程的代码不怎么好用,我模仿的该了一下正则表达式,修改了一下功能,感觉还能使,昨天晚上实现了。队友说:你这学爬虫心理就是爬黄段子啊==明明是糗事好不!

功能:爬取代码运行时糗事百科前6页的笑料段子,保存到当前文件夹的“1.txt”文件中。

参考教程:http://blog.csdn.net/pleasecallmewhy/article/details/8932310

糗事百科主页:http://www.qiushibaike.com

代码:

#coding=utf-8  
import urllib2  
import urllib  
import re  
import sys  
reload(sys)  
sys.setdefaultencoding("utf-8")  
  
#---加载----  
class Spider_Model:  
  
    def __init__(self,x):  
        self.page = x  
  
    #---将所有的段子都扣出来并且加到一个字符串中  
    def GetPage(self,page):  
        myUrl = "http://www.qiushibaike.com/hot/page/" + page      
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'     
        headers = { 'User-Agent' : user_agent }     
        req = urllib2.Request(myUrl,headers = headers)  
        myResponse = urllib2.urlopen(req)  
        myPage = myResponse.read()  
        unicodePage = myPage.decode("utf-8")  
        #re.S是任意匹配模式,也就是说.可以匹配换行符  
        myItems = re.findall('<div class="content">(.*?)<!',unicodePage,re.S)  
        s=""  
        i=0  
        for items in myItems:  
            x=items.replace('<br/>','\n')  
            i=i+1  
            s=s+'\n第%d条:' % i + x  
        return s  
    def Start(self):  
        page=self.page  
        try:  
            mypage=self.GetPage(str(page))  
        except:  
            print u'无法链接糗事百科'  
        return mypage  
  
#-----主程序入口处------  
print u'加载http://www.qiushibaike.com 前2页的段子'  
try:  
    myfile=open('./1.txt','w')  
    for x in range(1,3):  
        print u'正在加载第%d页......' % x  
        myModel = Spider_Model(x)  
        s=myModel.Start()  
        myfile.write('\n\n=============糗事百科第%d页=============\n' % x + s)  
    myfile.close()  
    print u'加载完毕!'  
    raw_input(u'按任意键退出...');
except:  
    print u'加载失败!' 


补充python没有大括号分块,因此对缩进有严格的要求,注意[Tab]和[space]虽然都可用单个前者代替几个后者,但是在编译时是不一样的,如果你编辑器中对齐了还是有错!要注意一下是不是这两个键混用时不对。另为向文件中输入中文字符要注意编码,在代码前加上如下代码,否则会有乱码
import sys
reload(sys)
sys.setdefaultencoding("utf-8")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值