使用Python3爬蟲抓取網頁來下載小說


很多時候想看小說但是在網頁上找不到資源,即使找到了資源也沒有提供下載,小說當然是下載下來用手機看才爽快啦!

於是程序員的思維出來了,不能下載我就直接用爬蟲把各個章節爬下來,存入一個txt文件中,這樣,一部小說就爬下來啦。

這一次我爬的書為《黑客》,一本網絡小說,相信很多人都看過吧,看看他的代碼吧。

代碼見如下:

import re
import urllib.request
import time

#
root = 'http://www.biquge.com.tw/3_3542/'
# 偽造瀏覽器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ' \
                         'AppleWebKit/537.36 (KHTML, like Gecko)'
                         ' Chrome/62.0.3202.62 Safari/537.36'}

req = urllib.request.Request(url=root, headers=headers)

with urllib.request.urlopen(req, timeout=1) as response:
    # 大部分的涉及小說的網頁都有charset='gbk',所以使用gbk編碼
    htmls = response.read().decode('gbk')

# 匹配所有目錄<a href="/3_3542/2020025.html">HK002 上天給了一個做好人的機會</a>
dir_req = re.compile(r'<a href="/3_3542/(\d+?.html)">')
dirs = dir_req.findall(htmls)

# 創建文件流,將各個章節讀入內存
with open('黑客.txt', 'w') as f:
    for dir in dirs:
        # 組合鏈接地址,即各個章節的地址
        url = root + dir
        # 有的時候訪問某個網頁會一直得不到響應,程序就會卡到那里,我讓他0.6秒后自動超時而拋出異常
        while True:
            try:
                request = urllib.request.Request(url=url, headers=headers)
                with urllib.request.urlopen(request, timeout=0.6) as response:
                    html = response.read().decode('gbk')
                    break
            except:
                # 對於抓取到的異常,我讓程序停止1.1秒,再循環重新訪問這個鏈接,一旦訪問成功,退出循環
                time.sleep(1.1)
                
        # 匹配文章標題
        title_req = re.compile(r'<h1>(.+?)</h1>')
        # 匹配文章內容,內容中有換行,所以使flags=re.S
        content_req = re.compile(r'<div id="content">(.+?)</div>',re.S,)
        # 拿到標題
        title = title_req.findall(html)[0]
        # 拿到內容
        content_test = content_req.findall(html)[0]
        # 對內容中的html元素雜質進行替換
        strc = content_test.replace('&nbsp;', ' ')
        content = strc.replace('<br />', '\n')
        print('抓取章節>' + title)
        f.write(title + '\n')
        f.write(content + '\n\n')

就這樣,一本小說就下載下來啦!!!

運行情況見圖:

 

有的時候服務器會因為大量訪問而認為你是個機器人就封了你的IP,可以加個隨機數,讓程序隨機停止不同的時間。

如果下載太慢,可以使用多線程,一起下載多個章節

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM