(python2.7)實現(xiàn)糗百爬蟲

先貼代碼赚瘦,文章以后有空再寫苔悦,注釋也以后再寫介时,bug也以后再調(diào),參考文獻也以后在貼吧蒜埋,就這樣了(葛優(yōu)躺)

文件1:main.py

# -*- coding:utf-8 -*-
import urllib
import qsbk

spider = qsbk.QsbkSpider()
spider.section='8hr'
spider.loadSomePages(10)
while True:
    article = spider.getRandomArticle()
    if not article:
        break
    print '[ page',article['pageIndex'],'artical',article['articleIndex'],']\n',\
        '< Article by', article['author'], '>\n', article['text'],'\n< God Comment >\n',\
        article['cmtMan'], article['cmt']
    print 'pause enter to get next article'
    input = raw_input()
    if(input in ['q','Q']):
        break

文件2:qsbk.py

__author__ = 'ssins'
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
import random
from bs4 import BeautifulSoup

class QsbkSpider:
    def __init__(self):
        self._pageIndex = 1
        self.maxPageIndex = 35
        self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        self._qsbkUrl = 'http://www.qiushibaike.com/'
        self.section = '8hr'
        self._sections = ['8hr','hot','imgrank','text','history','pic','textnew']

        self._headers = {'User-Agent' : self.user_agent}
        self._stories = []
        self.enable = False

    def getPageUrl(self,section,pageIndex):
        if section not in self._sections or pageIndex < 1 or pageIndex > self.maxPageIndex:
            return None
        url = self._qsbkUrl + section + '/page/' + str(pageIndex)
        return url

    def getPageInfo(self, url):
        try:
            request = urllib2.Request(url, headers = self._headers)
            response = urllib2.urlopen(request)
            html = response.read()
            return html
        except:
            return None

    def find_article_span(self,tag):
        if tag.name != 'span':
            return False
        children = tag.children
        for child in children:
            if (child.name in ['img', 'h2']):
                return False
        return True

    def getPageArticles(self,section,pageIndex):
        pageCode = self.getPageInfo(self.getPageUrl(section,pageIndex))
        if not pageCode:
            return None
        pageCode = str(pageCode)
        soup = BeautifulSoup(pageCode, 'lxml')
        #soup = BeautifulSoup(pageCode, 'html.parser')
        articles = soup.find_all('div', class_='article block untagged mb15')
        articlesDictionaryList = []
        try:
            for tmpArt in articles:
                article = str(tmpArt)
                if re.search('class="thumb"', article):
                    continue
                replaceBr = re.compile('<br/>')
                article = re.sub(replaceBr, "\n", article)
                soupArticle = BeautifulSoup(article, 'lxml')
                #soupArticle = BeautifulSoup(article, 'html.parser')
                author = soupArticle.h2.string
                text = soupArticle.find(self.find_article_span).string
                cmtMan = 'no God Comment'
                cmt = ''
                try:
                    cmtMan = soupArticle.find('span', class_='cmt-name').string
                    cmt = soupArticle.find('div', class_='main-text').string
                except:
                    pass
                articlesDictionary = {}
                articlesDictionary['author'] = author
                articlesDictionary['text'] = text
                articlesDictionary['cmtMan'] = cmtMan
                articlesDictionary['cmt'] = cmt
                articlesDictionaryList.append(articlesDictionary)
            self._stories.append(articlesDictionaryList)
        except:
            return False
        return True

    def loadNextPage(self):
        if(self._pageIndex > self.maxPageIndex):
            return False
        if(self.getPageArticles(self.section,self._pageIndex)):
            self._pageIndex += 1
            return True
        return False

    def loadSomePages(self, pageNums):
        for i in range(pageNums):
            self.loadNextPage();

    def getRandomArticle(self):
        if(len(self._stories)<1):
            return None
        pageIndex = random.randint(0, len(self._stories) - 1)
        articleIndex = random.randint(0, len(self._stories[pageIndex]) - 1)
        article = self._stories[pageIndex][articleIndex]
        article['pageIndex'] = pageIndex + 1
        article['articleIndex'] = articleIndex + 1
        return article
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淫痰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子整份,更是在濱河造成了極大的恐慌待错,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皂林,死亡現(xiàn)場離奇詭異朗鸠,居然都是意外死亡,警方通過查閱死者的電腦和手機础倍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門烛占,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事忆家∮坦剑” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵芽卿,是天一觀的道長揭芍。 經(jīng)常有香客問我,道長卸例,這世上最難降的妖魔是什么称杨? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮筷转,結果婚禮上姑原,老公的妹妹穿的比我還像新娘。我一直安慰自己呜舒,他們只是感情好锭汛,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袭蝗,像睡著了一般唤殴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上到腥,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天朵逝,我揣著相機與錄音,去河邊找鬼左电。 笑死廉侧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的篓足。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼闰蚕,長吁一口氣:“原來是場噩夢啊……” “哼栈拖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起没陡,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤涩哟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盼玄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贴彼,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年埃儿,在試婚紗的時候發(fā)現(xiàn)自己被綠了器仗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖精钮,靈堂內(nèi)的尸體忽然破棺而出威鹿,到底是詐尸還是另有隱情,我是刑警寧澤轨香,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布忽你,位于F島的核電站,受9級特大地震影響臂容,放射性物質(zhì)發(fā)生泄漏科雳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一脓杉、第九天 我趴在偏房一處隱蔽的房頂上張望糟秘。 院中可真熱鬧,春花似錦丽已、人聲如沸蚌堵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼畏。三九已至,卻和暖如春嘁灯,著一層夾襖步出監(jiān)牢的瞬間泻蚊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工丑婿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留性雄,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓羹奉,卻偏偏與公主長得像震鹉,于是被迫代替她去往敵國和親尸饺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 黑云又來了! 伴哦岳瞭!黑云又來了搔驼! 熬槌埂!筒占!黑云贪庙! 繚繞著塵滓, 彌漫著瘴毒翰苫, 向著我的頭頂壓過來止邮。 我看到, 地獄之門...
    石逸軒閱讀 206評論 0 2
  • 鄭毅聽到賈老師在衛(wèi)生間踢水盆的聲音,略一停頓农尖,張了張嘴析恋,可還是把到了嘴邊的怒火壓了下去。算了盛卡,一大清早助隧,不惹氣了。...
    樵砥閱讀 173評論 2 3
  • 那啥綜合癥又犯了滑沧,為什么都不理解并村,一定要問個為什么呢?
    _獨家記憶閱讀 257評論 0 1
  • 一滓技、 孤獨就像人說的那樣 最后走的人關門最輕 ——網(wǎng)易云熱評 二哩牍、 小時候 畫在手上的表沒有動 卻帶走了我們最好的...
    一條芒狗閱讀 190評論 0 3