requests+正則表達式(三)- 抓取 不思姐動態(tài)圖 以及 全書網(wǎng)小說并保存為html文件

今天我們來抓取不思得其姐的動態(tài)圖以及進入全書網(wǎng)下載全部小說名及內(nèi)容并保存到本地html文件當(dāng)中扼劈,接下來我們直接上案例(具體注釋在代碼中已經(jīng)標明)

案例一:爬取不思姐的動態(tài)圖

源碼效果圖分析:
8.png
經(jīng)過觀察源代碼,我們可以編寫請求方式和正則表達式了:
import requests
import re
import urllib.request
import os

#模擬成瀏覽器
headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" }

#爬取不思姐的動態(tài)圖
def req_busijie_gif(page):
    url = "http://www.budejie.com/video/"+ str(page)#拼接請求鏈接
    html = requests.get(url, headers=headers)#請求網(wǎng)頁源碼
    html.encoding = "utf-8" #設(shè)置編碼
    response = html.text #轉(zhuǎn)換成文本
    #編寫獲取gif格式的整整則表達式
    # . 除了換行符和制表符以外的其他任何單個字符
    # * 前面的表達式出現(xiàn)任意次
    # ? 非貪婪模式
    # () 建立索引:取出來就家小括號
    reg = r'<img .*? data-original="(http://[^\s)";]+\.(gif))"' #.*? 匹配除了換行符和制表符以外的其他任意多個字符
    gif_list = re.compile(reg, re.S).findall(response)#獲取動態(tài)圖鏈接

    x = 1 #用于標記寫入了第幾張圖片
    for gif in gif_list:
        print("正在下載第 "+ str(page) +" 頁的第 "+str(x)+" 張動態(tài)圖...")
        urllib.request.urlretrieve(gif[0],'video/%s' %gif[0].split('/')[-1])#寫入本地,如果是mp4也是一樣的操作
        x += 1


#調(diào)用
for i in range(1, 7):
    req_busijie_gif(i)


執(zhí)行完之后效果圖如下:
9.png
其實上面這個例子和前面爬取靜態(tài)圖片的方式是一模一樣的暇咆,這里要注意一下嫁审,如果是 mp4 的話也是一樣的特笋,嘿嘿则剃,接下來我們就寫一個比較深入一點的案例,爬取全書網(wǎng)的小說章節(jié):
首先觀察軍事類全書網(wǎng)的分類列表效果圖:
10.png
找到規(guī)律之后我們接下來先獲取 小說名 和 對應(yīng)的鏈接:
#定義抓取分類列表函數(shù)
def request_type_list():
    url = "http://www.quanshuwang.com/list/7_1.html" #如果全部爬取的話可以拼接 url
    response = requests.get(url, headers=headers)#請求
    response.encoding = "GBK" #設(shè)置編碼
    html = response.text #轉(zhuǎn)換成文本格式
    #編寫正則表達式獲取標題和鏈接
    reg = r'<a target="_blank" title="(.*?)" href="(.*?)" class="clearfix stitle">'
    return re.compile(reg, re.S).findall(html) #編譯獲取并以列表的形式返回


接下來我們點擊任意小說的鏈接來到介紹界面虚循,效果圖如下:
11.png
點擊“開始閱讀”按鈕來到章節(jié)列表頁面由桌,效果圖如下:
12.png
通過觀察以上的兩個效果圖,我們可以定義我們的函數(shù)和編寫我們的正則表達式了:
#根據(jù)分類列表獲取“開始閱讀”鏈接邮丰,再獲取章節(jié)標題和鏈接
def request_beginurl_zhangjie_list(url):
    response = requests.get(url, headers=headers)
    response.encoding = "GBK"
    html = response.text
    reg = r'<div class="b-oper".*?<a href="(.*?)" class="reader"' #獲取“開始閱讀”按鈕鏈接
    data1 = re.compile(reg, re.S).findall(html)[0]

    response = requests.get(data1, headers=headers) #請求"開始閱讀"鏈接
    response.encoding = "GBK"
    html = response.text
    reg = r'<li><a href="(.*?)" title="(.*?)">.*?</a></li>' #獲取章節(jié)標題和對應(yīng)的內(nèi)容鏈接
    data2 = re.compile(reg, re.S).findall(html)
    return data2


然后我們在觀察下各章節(jié)的內(nèi)容頁面效果圖:
13.png
根據(jù)效果圖編寫獲取章節(jié)內(nèi)容的函數(shù)和正則:
#獲取章節(jié)內(nèi)容
def request_content(url):
    response = requests.get(url, headers=headers)#獲取源代碼
    response.encoding = "GBK" #設(shè)置編碼
    html = response.text #轉(zhuǎn)換成文本
    reg = r'<script type="text/javascript">style5\(\);</script>(.*?)<script type="text/javascript">style6' #獲取章節(jié)內(nèi)容正則表達式
    return re.compile(reg, re.S).findall(html)


函數(shù)都定義好了冠摄,最后我們可以調(diào)用他們了:
#函數(shù)調(diào)用
for name, url in request_type_list():
    path = os.path.join("novel", name) #拼接
    if not os.path.exists(path): #判斷文件是否存在
        os.mkdir(path) #創(chuàng)建文件夾
        print('創(chuàng)建文件夾成功')

    else:
        print("文件夾已經(jīng)存在译秦,跳過。。耸黑。")
        continue

    for href, title in request_beginurl_zhangjie_list(url):
        t = title.split('吁系,')[0]
        print(t, href)
        content = request_content(href)
        #print(content)
        #將內(nèi)容寫入本地的html文件中
        try:
            with open(os.path.join(path, t +".html"), "w") as f:
                f.write(content[0])

        except requests.exceptions.ConnectionError as e:
            print(e)
        except Exception as e:
            print(e)

    break#去掉退出的話就爬取整個分類列表中的小說

最后的效果圖如下:
14.png
好了煤惩,經(jīng)過那么那么多案例的講解,相信同學(xué)們也掌握了爬取靜態(tài)網(wǎng)頁中的數(shù)據(jù)了笛质,至于動態(tài)的網(wǎng)頁數(shù)據(jù)以及如何入庫會在接下來整理 Scrapy 框架的時候會寫到,請同學(xué)們多多給建議哦捞蚂,嘿嘿妇押!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姓迅,隨后出現(xiàn)的幾起案子敲霍,更是在濱河造成了極大的恐慌,老刑警劉巖丁存,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩杈,死亡現(xiàn)場離奇詭異,居然都是意外死亡解寝,警方通過查閱死者的電腦和手機扩然,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聋伦,“玉大人夫偶,你說我怎么就攤上這事【踉觯” “怎么了兵拢?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抑片。 經(jīng)常有香客問我卵佛,道長杨赤,這世上最難降的妖魔是什么敞斋? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮疾牲,結(jié)果婚禮上植捎,老公的妹妹穿的比我還像新娘。我一直安慰自己阳柔,他們只是感情好焰枢,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舌剂,像睡著了一般济锄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霍转,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天荐绝,我揣著相機與錄音,去河邊找鬼避消。 笑死低滩,一個胖子當(dāng)著我的面吹牛召夹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恕沫,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼监憎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了婶溯?” 一聲冷哼從身側(cè)響起鲸阔,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爬虱,沒想到半個月后隶债,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡跑筝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年死讹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曲梗。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡赞警,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虏两,到底是詐尸還是另有隱情愧旦,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布定罢,位于F島的核電站笤虫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祖凫。R本人自食惡果不足惜琼蚯,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惠况。 院中可真熱鬧遭庶,春花似錦、人聲如沸稠屠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽权埠。三九已至榨了,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攘蔽,已是汗流浹背龙屉。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秩彤,地道東北人叔扼。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓事哭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓜富。 傳聞我的和親對象是個殘疾皇子鳍咱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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