爬蟲作業(yè)三之爬百度百科數(shù)據(jù)(痛苦的查bug歷程)

這個(gè)作業(yè)主要就是跟著視頻教學(xué)《Python開發(fā)簡(jiǎn)單爬蟲》霎俩,學(xué)著自己寫了一個(gè)簡(jiǎn)單的爬百度百科的爬蟲上陕。

一開始的代碼都是跟著視頻里寫的桂对,自己編譯運(yùn)行的時(shí)候就出了一堆錯(cuò)脆栋。

首先是打錯(cuò)字倦卖,比如utf寫成uft,init寫成int椿争,改完后編譯通過怕膛,但是爬蟲只爬了輸入的第一個(gè)網(wǎng)頁就報(bào)craw failed,不再繼續(xù)爬了秦踪;

繼續(xù)檢查發(fā)現(xiàn)是有些模塊的函數(shù)的return語句被我再查錯(cuò)的時(shí)候不小心注釋掉了褐捻,改后仍然只能爬取第一個(gè)網(wǎng)頁;

打印獲得的第二個(gè)網(wǎng)頁椅邓,復(fù)制網(wǎng)頁地址到crome里打開柠逞,發(fā)現(xiàn)顯示的是“鎖定詞條”,該頁面沒有其他可以連接的url景馁,于是爬蟲只能停止工作板壮。為什么我爬蟲獲取的第二個(gè)url是這個(gè)呢?我打開第一個(gè)url也就是百度百科python詞條的頁面裁僧,右鍵審查元素个束,查到了第二個(gè)url的html語句如下:

<a class="lock-lemma" target="_blank" href="/view/10812319.htm" title="鎖定">

而老師視頻里我抄下來的抓取url的正則表達(dá)式正好是:

links = soup.find_all('a', href=re.compile(r"/item/\d*+.html"))

可以看到,上面的語句是滿足下面的正則表達(dá)式的聊疲,所以python把這個(gè)url加入到url管理器中茬底,作為下一條代爬取的url,導(dǎo)致程序的終止获洲。那么證明由于百度又更新了編碼阱表,所以之前的正則表達(dá)式不適用于現(xiàn)在的頁面了。重新分析頁面贡珊,右鍵審查原色最爬,得到可鏈接的其它頁面的語句如下:

<a target="_blank" href="/item/Guido%20van%20Rossum">Guido van Rossum</a>

可以發(fā)現(xiàn),這些語句都是標(biāo)題為a门岔,href格式為/item開頭加上后面一系列字符串組成爱致,所以我講正則表達(dá)式改為:

links = soup.find_all('a', href=re.compile(r"/item/\w*"))

重新運(yùn)行,python爬取1000個(gè)頁面寒随,成功打印出頁面url糠悯、標(biāo)題、內(nèi)容妻往。
不過很快我發(fā)現(xiàn)新的問題互艾,輸出的標(biāo)題和內(nèi)容,凡是有中文的都是亂碼讯泣,而我按照老師的教學(xué)纫普,在輸入標(biāo)題時(shí)進(jìn)行了轉(zhuǎn)碼,代碼如下:

fout.write("<td>%s</td>"  % data['title'].encode('utf-8'))

但是仍然輸出的是亂碼好渠,我在網(wǎng)上搜了很多辦法昨稼,到現(xiàn)在依然沒有解決,希望有搞定這個(gè)問題的兄弟姐妹們告訴我是這么回事呢拳锚?悦昵?(我把打印輸出的代碼貼出來給大家看看,環(huán)境是python2.7 OSX系統(tǒng))

# coding=utf-8

class HtmlOutputer(object):
    def __init__(self):
        self.datas=[]


    def collect_data(self,data):
        if data is None:
            return
        self.datas.append(data)

    def output_html(self):
        fout = open('output.html','w')
        fout.write("<html>")
        fout.write("<body>")
        fout.write("<table>")
        for data in self.datas:
            fout.write("<tr>")
            fout.write("<td>%s</td>" % data['url'])
            fout.write("<td>%s</td>"  % data['title'].encode('utf-8'))
            fout.write("<td>%s</td>" % data['summary'].encode('utf-8'))
            fout.write("</tr>")

        fout.write("</table>")
        fout.write("</body>")
        fout.write("</html>")

剛剛折騰了一個(gè)中午晌畅,大概發(fā)現(xiàn)了問題所在但指,應(yīng)該是瀏覽器編碼問題。一開始我試著直接打印輸出data['title'].抗楔,發(fā)現(xiàn)即使是中文也不會(huì)亂碼棋凳,于是我將output。html改為用pycharm打開连躏,發(fā)現(xiàn)里面的中文都能正常顯示剩岳。最后,我講output_html函數(shù)改寫為output_txt函數(shù)入热,將要打印的內(nèi)容改寫到txt文件拍棕,寫完打開發(fā)現(xiàn)晓铆,中文都能正常顯示了。我猜绰播,瀏覽器的編碼可能不是UTF8骄噪,所以它反而將中文識(shí)別稱為亂碼了。
總之蠢箩,終于把所有bug解決完畢了链蕊,噓一口氣啦~~
--------------我是不依不饒的分割線------------
仔細(xì)想了下,剛剛還不算是完全解決亂碼問題谬泌,因?yàn)槲覍懙絟tml文件里面還是亂碼滔韵。用crome隨便打開一個(gè)網(wǎng)頁,右鍵查看源碼掌实,發(fā)現(xiàn)如下顯示陪蜻;

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">

里面的 <meta charset="utf-8">,就是 html 編碼的約束 贱鼻。
所以在 html_outputer.py 中囱皿,write之前加入一句話:

fout.write("<meta charset='utf-8'>")

再運(yùn)行,用crome打開output.html忱嘹,就會(huì)發(fā)現(xiàn)整整齊齊的中文啦嘱腥。
這回真正的完結(jié)撒花,折騰了一整天了可以噓一口氣了拘悦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末齿兔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子础米,更是在濱河造成了極大的恐慌分苇,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屁桑,死亡現(xiàn)場(chǎng)離奇詭異医寿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蘑斧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門靖秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竖瘾,你說我怎么就攤上這事沟突。” “怎么了捕传?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵惠拭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我庸论,道長(zhǎng)职辅,這世上最難降的妖魔是什么棒呛? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮域携,結(jié)果婚禮上簇秒,老公的妹妹穿的比我還像新娘。我一直安慰自己涵亏,他們只是感情好宰睡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布蒲凶。 她就那樣靜靜地躺著气筋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旋圆。 梳的紋絲不亂的頭發(fā)上宠默,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音灵巧,去河邊找鬼搀矫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刻肄,可吹牛的內(nèi)容都是我干的瓤球。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼敏弃,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼卦羡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起麦到,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤绿饵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瓶颠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拟赊,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年粹淋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吸祟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桃移,死狀恐怖欢搜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谴轮,我是刑警寧澤炒瘟,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站第步,受9級(jí)特大地震影響疮装,放射性物質(zhì)發(fā)生泄漏缘琅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一廓推、第九天 我趴在偏房一處隱蔽的房頂上張望刷袍。 院中可真熱鬧,春花似錦樊展、人聲如沸呻纹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雷酪。三九已至,卻和暖如春涝婉,著一層夾襖步出監(jiān)牢的瞬間哥力,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工墩弯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吩跋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓渔工,卻偏偏與公主長(zhǎng)得像锌钮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子引矩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理梁丘,服務(wù)發(fā)現(xiàn),斷路器脓魏,智...
    卡卡羅2017閱讀 134,713評(píng)論 18 139
  • 1 前言 作為一名合格的數(shù)據(jù)分析師兰吟,其完整的技術(shù)知識(shí)體系必須貫穿數(shù)據(jù)獲取、數(shù)據(jù)存儲(chǔ)茂翔、數(shù)據(jù)提取混蔼、數(shù)據(jù)分析、數(shù)據(jù)挖掘珊燎、...
    whenif閱讀 18,083評(píng)論 45 523
  • 利用python寫一個(gè)爬蟲惭嚣,爬取百度百科的某一個(gè)詞條下面的全部鏈接和每一個(gè)鏈接內(nèi)部的詞條主題和摘要。利用reque...
    DayDayUpppppp閱讀 3,993評(píng)論 0 1
  • 33款可用來抓數(shù)據(jù)的開源爬蟲軟件工具 要玩大數(shù)據(jù)悔政,沒有數(shù)據(jù)怎么玩晚吞?這里推薦一些33款開源爬蟲軟件給大家。 爬蟲谋国,即...
    visiontry閱讀 7,341評(píng)論 1 99
  • 小時(shí)候槽地,也許是管理不善,也許是電力資源的缺乏,家里常常停電捌蚊,還記得集畅,媽媽常常在家里備上蠟燭,一旦停電缅糟,點(diǎn)起長(zhǎng)長(zhǎng)的白...
    蘿卜英閱讀 428評(píng)論 0 2