鳥與蟲(二)代碼敲累了?來個(gè)段子

  • 哈羅又見面了呆躲,我就是那個(gè)菜鳥异逐。
  • 這次我看著知乎大佬爬嗅事百科的案例,自己爬了下挖段子網(wǎng)插掂,來分享一下应役。
  • 代碼敲累了?爬幾個(gè)段子了一下,段子五分鐘代碼兩小時(shí)箩祥。
'''
    根據(jù)知乎大神

    代碼作者:高佳樂

'''
import re                         ##導(dǎo)入re庫
import requests                   ##導(dǎo)入requests
import time                       ##導(dǎo)入time
#from bs4 import BeautifulSoup    ##導(dǎo)入bs4
##定義一個(gè)去空格的類
class Tool():                     ##定義一個(gè)類院崇,這個(gè)類是去除空格
    def replace(self,html):       ##方法,有兩個(gè)參數(shù)
        html = re.sub(re.compile('<br/>|<br />','',html))  ##html=re.sub是替換函數(shù)袍祖,re.compile是換成正則表達(dá)式底瓣。
        return html

class Spider(object):                                      ##定義一個(gè)類,名字叫爬蟲的類
    ##初始化方法
    def __init__(self):                                     ##初始化
        self.url = 'http://www.waduanzi.com/'               ##他的url是首頁蕉陋,因?yàn)楹筮叺亩际鞘醉摷訑?shù)字了
        self.tool = Tool()                                  ##他的tool是清理后空格

    ##定義一個(gè)發(fā)送請(qǐng)求的方法
    def Request(self,getUrl):                               ##定義request方法捐凭,參數(shù)是geturl
        html = requests.get(getUrl)                         ##html是請(qǐng)求參數(shù)的地址
        html_text = html.text                               ##html_text是html的text后
        return html_text                                    ##返回他的text格式

    ##定義一個(gè)獲取準(zhǔn)確字節(jié)的方法
    def Obtain(self,obtain):                                ##定義Obtain方法,有兩個(gè)參數(shù)
        html_text = self.Request(obtain)                    ##html_text是他的參數(shù)凳鬓,用上個(gè)方法返回來的text
        ##下邊是定義一個(gè)正則表達(dá)式可以這么說了茁肠,好吧我承認(rèn),我不熟練缩举,這個(gè)表達(dá)式我配了一陣垦梆,我看著谷歌配成功的,別的瀏覽器屬性會(huì)跑仅孩。
        regular = re.compile('<div.*?post-box.*?post-author.*?<img target.*?>.*?<a.*?_blank".*?>(.*?)</a>.*?item-detail.*?item-title.*?item-content">(.*?)</div>.*?item-toolbar.*?fleft.*?<a.*?>(.*?)</a>.*?fleft.*?<a.*?>(.*?)</a>.*?</li>',re.S)
        itmes = re.findall(regular,html_text)               ##items 獲取到findall所有符合到的冲呢,不過格式是一個(gè)列表础芍,每項(xiàng)是元組
        number = 1                                          ##number=1就是計(jì)數(shù)器
        for itme in itmes:                                  ##因?yàn)槭橇斜碡遗福檬裁淳ń迹瑢?duì)遍歷
            print('第%d個(gè)\n樓主:%s\n正文:%s\n點(diǎn)贊:%s\n踩:%s'%(number,itme[0],itme[1],itme[2],itme[3]))##輸出格式是這樣額
            print()                                         ##這個(gè)是換行輸出
            number+=1                                       ##計(jì)數(shù)器就要+1
        return itmes                                        ##返回那個(gè)集合

    ##保存文件
    def save(self,data,name):                               ##定義save方法兩個(gè)參數(shù)
        filName = 'page'+name+'.txt'                        ##定義一個(gè)名字
        f = open(filName,'wb')                              ##f = 定義的名字和能讀寫模式
        f.write(data.encode('utf-8'))                       ##寫入data的utf8模式
        f.close()                                           ##關(guān)閉文件,隨開隨關(guān)才是好孩子

    ##操作打開保存
    def onesave(self,url,save):                             ##定義一個(gè)方法溅蛉,就是打開后保存
        html = self.Obtain(url)                             ##html是運(yùn)用上一個(gè)方法獲取列表
        self.save(str(html),str(save))                      ##保存(str(html),str(save))第一個(gè)str是轉(zhuǎn)換成字符串公浪,第二個(gè)也是因?yàn)榈诙€(gè)要+連接的

    ##第幾頁
    def page(self,star,end):                                ##定義第幾頁的方法,兩個(gè)參數(shù)船侧,開始和結(jié)束
        if star == 1:                                       ##如果輸入的1
            print('正在讀取第1頁')                            ##正在讀取第一頁
            self.onesave(self.url,star)                     ##就是打開保存第一頁欠气,url是初始化的首頁
            print('第一頁獲取結(jié)束')                            ##第一頁獲取結(jié)束
            number = 2                                      ##然后number=2是要計(jì)數(shù),因?yàn)榈谝豁撘呀?jīng)開始的所以從第二個(gè)
            for i in range(number,end+1):                   ##然后循環(huán)勺爱,從第二個(gè)開始,到end+1結(jié)束讯检,為什么琐鲁,因?yàn)閒or取頭不取尾
                print('正在讀取%s頁'%i)                       ##正在讀取i
                page = self.url+'/page/'+str(i)             ##page是頁數(shù),因?yàn)樵诰W(wǎng)頁得知幾頁幾頁是人灼,主頁+/page/幾頁的
                self.onesave(page,i)                        ##然后打開保存
                print('%s頁結(jié)束'%i)                          ##輸出結(jié)束
                time.sleep(2)                               ##等待時(shí)間围段,爬蟲嘛,要有禮貌的爬
                number+=1                                   ##計(jì)數(shù)器
            if number == end+1:                             ##上邊循環(huán)完了判斷投放,計(jì)數(shù)器是不是=end+1了奈泪。不出意外就會(huì)
                print('加載結(jié)束')                             ##加載結(jié)束
                return False                                ##返回False
        elif star>1:                                        ##如果開始是大于一的
            number = star                                   ##就讓計(jì)數(shù)器=輸入的
            for i in range(star,end+1):                     ##循環(huán)從輸入的和結(jié)束+1循環(huán)
                print("正在讀取%s頁"%i)                       ##正在讀取
                page = self.url+'/page/'+str(i)             ##就是獲取網(wǎng)址的
                self.onesave(page,i)                        ##打開,保存
                print('%s讀取結(jié)束'%i)                         ##讀取結(jié)束
                time.sleep(2)                               ##禮貌,要禮貌涝桅,論爬蟲的素養(yǎng)
                number+=1                                   ##計(jì)數(shù)器不+1還有什么意義
            if number == end+1:                             ##循環(huán)結(jié)束了等于end+1
                print('加載已結(jié)束')                           ##循環(huán)結(jié)束
                return False                                ##返回False


duqu = Spider()                                             ##實(shí)例化
duqu.page(star=(int(input('請(qǐng)輸入你要獲取的開始'))),end=int(input('請(qǐng)輸入結(jié)束頁數(shù)')))  ##實(shí)例的page獲取的開始拜姿,結(jié)束

  • 我怕縮進(jìn)出問題我就復(fù)制粘貼了我的代碼。就是這么懶冯遂,打我啊蕊肥。
  • 代碼完成是這樣子滴。


    搜狗截圖20180527151549.png
  • 好了我的代碼就是這些蛤肌。我類也是剛剛學(xué)的壁却,所以就用了類
  • 可能是我總是試一試,網(wǎng)站好像emmm裸准,把我攔截了展东,我沒有用代理,不太熟就沒做炒俱。
  • 爬蟲嘛盐肃,要禮貌,禮貌向胡。
好了又該下次見了恼蓬,等我學(xué)了新知識(shí),做下一個(gè)案例僵芹,砸門处硬,下一次見,拜拜拇派。!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荷辕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子件豌,更是在濱河造成了極大的恐慌疮方,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茧彤,死亡現(xiàn)場(chǎng)離奇詭異骡显,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)曾掂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門惫谤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人珠洗,你說我怎么就攤上這事溜歪。” “怎么了许蓖?”我有些...
    開封第一講書人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蝴猪,是天一觀的道長调衰。 經(jīng)常有香客問我,道長自阱,這世上最難降的妖魔是什么嚎莉? 我笑而不...
    開封第一講書人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮动壤,結(jié)果婚禮上萝喘,老公的妹妹穿的比我還像新娘。我一直安慰自己琼懊,他們只是感情好阁簸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哼丈,像睡著了一般启妹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醉旦,一...
    開封第一講書人閱讀 49,906評(píng)論 1 290
  • 那天饶米,我揣著相機(jī)與錄音,去河邊找鬼车胡。 笑死檬输,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匈棘。 我是一名探鬼主播丧慈,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼主卫!你這毒婦竟也來了逃默?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤簇搅,失蹤者是張志新(化名)和其女友劉穎完域,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘩将,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吟税,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姿现。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肠仪。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖建钥,靈堂內(nèi)的尸體忽然破棺而出藤韵,到底是詐尸還是另有隱情虐沥,我是刑警寧澤熊经,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布泽艘,位于F島的核電站,受9級(jí)特大地震影響镐依,放射性物質(zhì)發(fā)生泄漏匹涮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一槐壳、第九天 我趴在偏房一處隱蔽的房頂上張望然低。 院中可真熱鬧,春花似錦务唐、人聲如沸雳攘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吨灭。三九已至,卻和暖如春刑巧,著一層夾襖步出監(jiān)牢的瞬間喧兄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來泰國打工啊楚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吠冤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓恭理,卻偏偏與公主長得像拯辙,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚯斯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容