數(shù)據(jù)挖掘_通過字典列表批量抓取網(wǎng)頁數(shù)據(jù)

在進(jìn)行網(wǎng)頁數(shù)據(jù)抓取時(shí)我們要先安裝一個(gè)模塊

requests

通過終端安裝如下圖

安裝示意圖

因?yàn)槲抑鞍惭b過了达吞,所以不會(huì)顯示安裝進(jìn)度條导狡,安裝也非常簡(jiǎn)單舀透,如果你配置好環(huán)境變量的話轧飞,你只需要執(zhí)行以下命令

pip install requests

如果提示要升級(jí)蛹含,就按下面升級(jí)pip

pip install --upgrade pip

安裝完模塊后我們正式開始進(jìn)行數(shù)據(jù)爬取

先說一下requests的用法毅厚,導(dǎo)入這個(gè)模塊后,你只需要調(diào)用一下get方法浦箱,就能獲取網(wǎng)頁的內(nèi)容了

例如吸耿,爬取我的博客首頁,這個(gè)單網(wǎng)頁

In [1]: import requests

In [2]: resp = requests.get("http://www.susmote.com")

In [3]: resp.encoding = "utf-8"

In [4]: type(resp.text)

Out[4]: str

In [5]: content = resp.text[0:100]

In [6]: print(content)

首先導(dǎo)入憎茂,然后調(diào)用get方法珍语,里面接你要爬取的網(wǎng)頁

注意:必須要加http:頭,不然會(huì)報(bào)錯(cuò)

然后在第三步竖幔,我們更改了默認(rèn)編碼板乙,這個(gè)取決于你要爬取網(wǎng)頁的編碼格式,如果不更改拳氢,極大可能會(huì)出行亂碼募逞,或是一些沒有看過的字符

在第五步,我們把爬取網(wǎng)頁內(nèi)容的前50個(gè)字符賦值給了content馋评,以便之后查看放接,因?yàn)榫W(wǎng)頁內(nèi)容太多,不能一次全部打印出來留特,所以我們決定切片輸出一部分內(nèi)容

最后一步纠脾,我們打印出剛才保存的一部分內(nèi)容

前面只是提前熟悉一下爬取數(shù)據(jù)的步驟,接下來我們通過列表字典批量獲取數(shù)據(jù)蜕青,然后把它保存為一個(gè)文件

首先定義一個(gè)字典苟蹈,存儲(chǔ)我們要抓取頁面的網(wǎng)址


urls_dict = {

    '特克斯博客': 'http://www.susmote.com/',

    '百度': 'http://www.baidu.com',

    'xyz': 'www.susmote.com',

    '特克斯博客歌單區(qū)1': 'https://www.susmote.com/?cate=13',

    '特克斯博客歌單區(qū)2': 'https://www.susmote.com/?cate=13'

}

然后我們?cè)诙x一個(gè)列表,也是存儲(chǔ)抓取頁面的網(wǎng)址

urls_lst = [

    ('特克斯博客', 'http://www.susmote.com/'),

    ('百度', 'http://www.baidu.com'),

    ('xyz', 'www.susmote.com'),

    ('特克斯博客歌單區(qū)1', 'https://www.susmote.com/?cate=13'),

    ('特克斯博客歌單區(qū)2', 'https://www.susmote.com/?cate=13')

]

然后我們先利用字典來抓取

代碼如下:

利用字典抓取


crawled_urls_for_dict = set()

for ind, name in enumerate(urls_dict.keys()):

    name_url = urls_dict[name]

    if name_url in crawled_urls_for_dict:

        print(ind, name, "已經(jīng)抓取過了.")

    else:

        try:

            resp = requests.get(name_url)

        except Exception as e:

            print(ind, name, ":", str(e)[0:50])

            continue

        resp.encoding = "utf8"

        content = resp.text

        crawled_urls_for_dict.add(name_url)

        with open("bydict_" + name + ".html", 'w', encoding='utf8') as f:

            f.write(content)

            print("抓取完成 : {} {}, 內(nèi)容長(zhǎng)度為{}".format(ind, name, len(content)))

首先定義一個(gè)空集合右核,以保存我們抓取完數(shù)據(jù)的網(wǎng)址慧脱,以避免重復(fù)抓取

后面我們通過for循環(huán)和枚舉,遍歷每一個(gè)字典的鍵和值贺喝,把每一抓取的網(wǎng)址存進(jìn)開始定義的集合crawled_urls_for_dict

然后我們判斷要抓取的網(wǎng)址菱鸥,是否已經(jīng)保存在集合中,如果存在躏鱼,就輸出已經(jīng)抓取過了

如果沒有氮采,再進(jìn)行后面的操作,在這里我們?yōu)榱朔乐钩绦虺鲥e(cuò)染苛,影響程序的整體運(yùn)行扳抽,我們?cè)谶@里使用了try except 語句來打印出錯(cuò)的異常,這樣能保證程序能完整運(yùn)行

然后無非和我之前說的一樣,改編碼格式贸呢,暫時(shí)保存內(nèi)容

只是最后我們通過創(chuàng)建一個(gè)文件來保存爬取下來的網(wǎng)頁文件镰烧,這個(gè)我就不詳細(xì)解釋了,無非就是加了個(gè)后綴

在后面我們打印抓取的網(wǎng)頁地址

for u in crawled_urls_for_dict:

    print(u)

然后我們利用列表來抓取數(shù)據(jù)

代碼如下

# 利用列表抓取

crawled_urls_for_list = set()

for ind, tup in enumerate(urls_lst):

    name = tup[0]

    name_url = tup[1]

    if name_url in crawled_urls_for_list:

        print(ind, name, "已經(jīng)抓取過了.")

    else:

        try:

            resp = requests.get(name_url)

        except Exception as e:

            print(ind, name, ":", str(e)[0:50])

            continue

        resp.encoding = "utf8"

        content = resp.text

        crawled_urls_for_list.add(name_url)

        with open('bylist_' + name + ".html", "w", encoding='utf8') as f:

            f.write(content)

            print("抓取完成:{} {}, 內(nèi)容長(zhǎng)度為{}".format(ind, name, len(content)))

原理上跟前面的字典一樣楞陷,我就不做過多解釋了

只是要注意這是一個(gè)嵌套的列表怔鳖,遍歷的時(shí)候要注意一下

最后也是一樣

for u in crawled_urls_for_list:

    print(u)

打印抓取過的數(shù)據(jù)

運(yùn)行結(jié)果如下圖

susmotedeMacBook-Air:FirstDatamining susmote$ python main.py

抓取完成 : 0 特克斯博客, 內(nèi)容長(zhǎng)度為26793

抓取完成 : 1 百度, 內(nèi)容長(zhǎng)度為2287

2 xyz : Invalid URL 'www.susmote.com': No schema supplied.

抓取完成 : 3 特克斯博客歌單區(qū)1, 內(nèi)容長(zhǎng)度為21728

4 特克斯博客歌單區(qū)2 已經(jīng)抓取過了.

http://www.susmote.com/

http://www.baidu.com

https://www.susmote.com/?cate=13

------------------------------------------------------------

抓取完成:0 特克斯博客, 內(nèi)容長(zhǎng)度為26793

抓取完成:1 百度, 內(nèi)容長(zhǎng)度為2287

2 xyz : Invalid URL 'www.susmote.com': No schema supplied.

抓取完成:3 特克斯博客歌單區(qū)1, 內(nèi)容長(zhǎng)度為21728

4 特克斯博客歌單區(qū)2 已經(jīng)抓取過了.

http://www.susmote.com/

http://www.baidu.com

https://www.susmote.com/?cate=13

文件目錄變化如下

目錄結(jié)構(gòu)

用瀏覽器打開如下圖

特克斯博客 www.susmote.com

特克斯博客

百度網(wǎng)站 www.baidu..com

百度首頁

到這里,簡(jiǎn)單的數(shù)據(jù)抓取就講完了

歡迎訪問我的官網(wǎng)

www.susmote.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末固蛾,一起剝皮案震驚了整個(gè)濱河市结执,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艾凯,老刑警劉巖献幔,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異趾诗,居然都是意外死亡蜡感,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門恃泪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郑兴,“玉大人,你說我怎么就攤上這事贝乎∏榱” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵览效,是天一觀的道長(zhǎng)却舀。 經(jīng)常有香客問我,道長(zhǎng)锤灿,這世上最難降的妖魔是什么挽拔? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮衡招,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘每强。我一直安慰自己始腾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布空执。 她就那樣靜靜地躺著浪箭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辨绊。 梳的紋絲不亂的頭發(fā)上奶栖,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼宣鄙。 笑死袍镀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冻晤。 我是一名探鬼主播苇羡,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鼻弧!你這毒婦竟也來了设江?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤攘轩,失蹤者是張志新(化名)和其女友劉穎叉存,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體度帮,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歼捏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了够傍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甫菠。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冕屯,靈堂內(nèi)的尸體忽然破棺而出寂诱,到底是詐尸還是另有隱情,我是刑警寧澤安聘,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布痰洒,位于F島的核電站,受9級(jí)特大地震影響浴韭,放射性物質(zhì)發(fā)生泄漏丘喻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一念颈、第九天 我趴在偏房一處隱蔽的房頂上張望泉粉。 院中可真熱鬧,春花似錦榴芳、人聲如沸嗡靡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讨彼。三九已至,卻和暖如春柿祈,著一層夾襖步出監(jiān)牢的瞬間哈误,已是汗流浹背哩至。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜜自,地道東北人菩貌。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袁辈,于是被迫代替她去往敵國(guó)和親菜谣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359