爬取小說(步驟五)python

假設(shè)各位老哥已經(jīng)安裝好了bs4 requests這些庫了
這個(gè)小說是隨便挑的,各位也就不用太介意(僅供各位學(xué)習(xí))
python3 實(shí)現(xiàn),網(wǎng)上用python2做爬蟲的太多了,但用python3的還是比較少

  • 通過步驟四中 尋找到的那些url來對(duì)逐步訪問,獲取txt并寫入(這個(gè)在之前也都講過了)

  • 沒有看過 步驟一 的朋友們可以點(diǎn)擊下面的鏈接看看步驟一先
    點(diǎn)擊查看步驟一

  • 沒有看過 步驟二 的朋友們可以點(diǎn)擊下面的鏈接看看步驟二先
    點(diǎn)擊查看步驟二

  • 沒有看過 步驟三 的朋友們可以點(diǎn)擊下面的鏈接看看步驟三先
    點(diǎn)擊查看步驟三

  • 沒有看過 步驟四 的朋友們可以點(diǎn)擊下面的鏈接看看步驟四先
    點(diǎn)擊查看步驟四

  • 本來代碼是會(huì)很簡(jiǎn)單的,但為了不被禁什么的。就加了模擬人的休息(sleep)

  • 代碼會(huì)自動(dòng)下載到E:/txt/這個(gè)文件夾中(沒有的話,會(huì)自動(dòng)添加這個(gè)文件夾)

  • 會(huì)自動(dòng)尋找到這個(gè)小說的名字(并存儲(chǔ)下來,以這個(gè)名字作為文件名)

  • 通過步驟四的篩選使得這些鏈接都是包括有小說內(nèi)容的(一般會(huì)有作者發(fā)一些公告的章節(jié),對(duì)于這個(gè)進(jìn)行了一定的篩選)

下載過程的效果
import requests
from bs4 import BeautifulSoup
import os
import time
import random
urls = []
title = []
content_url = "http://www.biquge.com.tw/4_4038"
kv = {'user_agent': 'Mozilla/5.0'}  # 表示是一個(gè)瀏覽器
root = 'E:/txt/'     # 設(shè)置根目錄,將會(huì)把txt文件放到這個(gè)文件夾中的
book_name = '1.txt'  # 設(shè)置一個(gè)Default書名(雖然在后來肯定是會(huì)找到一個(gè)名字的)
count = 0
try:
    r = requests.get(content_url, headers=kv)  # 表示自己是一個(gè)瀏覽器
    r.raise_for_status()   # 如果有問題就會(huì)raise一個(gè)問題
    r.encoding = r.apparent_encoding  # 根據(jù)網(wǎng)頁返回的編碼 進(jìn)行調(diào)整
    soup = BeautifulSoup(r.text, 'html.parser')
    content_list = soup.find(id='list')
    chapter_list = soup.find_all('dd')
    meta = soup.find('head').find(attrs={'property': "og:novel:book_name"})
    book_name = meta['content'] + '.txt'
    print(book_name[:book_name.index('.txt')] + '寫入中')
    for chapter in chapter_list:  # 整合得到所有跟內(nèi)容有關(guān)的鏈接(會(huì)有哪些跟內(nèi)容無關(guān)的章節(jié)的)
        if '第' in chapter.find('a').text and '章' in chapter.find('a').text:
            title.append(chapter.find('a').text)
            urls.append(content_url[:content_url.rindex('/')] + chapter.find('a')['href'])
    first = True
    for i, url in enumerate(urls):
        r = requests.get(url, headers=kv)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        soup = BeautifulSoup(r.text, 'html.parser')
        content = soup.find(id='content')
        string = content.text.replace('\u3000', '').replace('『', '“').replace('』', '”').replace('\ufffd', '').replace('\u30fb', '')  # 去除不相關(guān)字符
        string = string.split('\xa0')  # 編碼問題解決
        string = list(filter(lambda x: x, string))
        for ii in range(len(string)):
            string[ii] = '    ' + string[ii]
            if "本站重要通知" in string[ii]:  # 去除文末尾注
                t = string[ii].index('本站重要通知')
                string[ii] = string[ii][:t]
        string = '\n'.join(string)
        string = '\n' + title[i] + '\n' + string + '\n'
        string = string.replace('\ufffd', '').replace('\u30fb', '').replace('\u3000', '')
        if not os.path.exists(root):
            os.mkdir(root)  # 如果沒有這個(gè)文件夾,就會(huì)創(chuàng)建一個(gè)
        if first:  # 如果是第一次寫入的話,會(huì)將原來的內(nèi)容清空,然后再寫入
            first = False
            with open(root + book_name, 'w') as f:
                f.write(string)
                f.close()
        else:  # 反之,則直接在文章末尾處添加
            with open(root + book_name, 'a') as f:
                f.write(string)
                f.close()
        print(title[i].replace('\ufffd', ''), '寫入成功')  # 這是因?yàn)槲覔?dān)心這個(gè)字符是在title中的
        ti = random.randint(0, 2)
        if ti == 0:
            count += 1
        else:
            count = 0
        if count < 3:
            time.sleep(ti)
        else:
            time.sleep(30)
except:
    pass

爬取小說(步驟六)python

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容