天天看點

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

前言

這次的是一個系列内容

給大家講解一下何一步一步實作一個完整的實戰項目案例系列之

小說下載下傳神器(三)(GUI界面化程式)

多線程采集小說下載下傳、采集排行榜所有小說

哈喽!大家上午好啦,我是愛看小說的栗子同學。

所有文章完整的素材+源碼都在👇👇

粉絲白嫖源碼福利,請移步至CSDN社群或文末公衆hao即可免費。

今天這一期就如開頭寫的内容一樣,接着來學習小說下載下傳,下一期就寫搜尋界面跟GUI界面

啦~下一期就是小說下載下傳器的最後一篇文章。

好啦,話不多說直接開始今天的正題吧!

主要内容:用Python代碼實作多線程方式采集小說以及采集排行榜所有小說内容。

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

正文

一、運作環境 

 本文用到的環境如下—— Python3、Pycharm社群版,第三方子產品:requests等

部分自帶的庫隻 要安裝完 Python就可 以直接使用了需要安裝 的庫的話看教程下🎐

一般安裝:pip install +子產品名 

 鏡像源安裝:pip install -i https://pypi.douban.com/simple/+子產品名 
           

二、多線程采集小說

代碼注釋的很清楚的,對家可以看着學習。

1)主程式

"""
# 導入資料請求子產品 --> 第三方子產品, 需要安裝
import requests
# 導入正規表達式子產品 --> 内置子產品, 不需要安裝
import re
# 導入資料解析子產品 --> 第三方子產品, 需要安裝
import parsel
# 導入檔案操作子產品 --> 内置子產品, 不需要安裝
import os
# 導入線程池
import concurrent.futures


def get_response(html_url):
    """
    發送請求函數
    :param html_url: 請求連結
    :return: response響應對象
    """
    # 模拟浏覽器 headers 請求頭
    headers = {
        # user-agent 使用者代理 表示浏覽器基本身份資訊
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    return response


def get_list_url(html_url):
    """
    擷取章節url/小說名
    :param html_url: 小說目錄頁
    :return:
    """
    # 調用發送請求函數
    html_data = get_response(html_url).text
    # 提取小說名字
    name = re.findall('<h1>(.*?)</h1>', html_data)[0]
    # 提取章節url
    url_list = re.findall('<dd> <a style="" href="(.*?)" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >', html_data)
    return name, url_list


def get_content(html_url):
    """
    擷取小說内容/小說标題
    :param html_url: 小說章節url
    :return:
    """
    # 調用發送請求函數
    html_data = get_response(html_url).text
    # 提取标題
    title = re.findall('<h1>(.*?)</h1>', html_data)[0]
    # 提取内容
    content = re.findall('<div id="content">(.*?)<p>', html_data, re.S)[0].replace('<br/><br/>', '\n')
    return title, content


def save(name, title, content):
    """
    儲存資料函數
    :param name: 小說名
    :param title: 章節名
    :param content: 内容
    :return:
    """
    # 自動建立一個檔案夾
    file = f'{name}\\'
    if not os.path.exists(file):
        os.mkdir(file)
    with open(file + title + '.txt', mode='a', encoding='utf-8') as f:
        """
        第一章 标題
            小說内容
        第二章 标題
            小說内容
        """
        # 寫入内容
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')
    print(title, '已經儲存')


def main(home_url):
    # index_url = 'https://www.biqudu.net' + url
    title, content = get_content(html_url=home_url)
    save(name, title, content)


if __name__ == '__main__':
    url = 'https://www.biqudu.net/1_1631/'
    name, url_list = get_list_url(html_url=url)
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=7)
    for url in url_list:
        index_url = 'https://www.biqudu.net' + url
        exe.submit(main, index_url)
    exe.shutdown()


# # 請求連結: 小說目錄頁
# list_url = 'https://www.biqudu.net/1_1631/'
# # 模拟浏覽器 headers 請求頭
# headers = {
#     # user-agent 使用者代理 表示浏覽器基本身份資訊
#     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
# }
# # 發送請求
# html_data = requests.get(url=list_url, headers=headers).text
# # 提取小說名字
# name = re.findall('<h1>(.*?)</h1>', html_data)[0]
# # 自動建立一個檔案夾
# file = f'{name}\\'
# if not os.path.exists(file):
#     os.mkdir(file)
#
# # 提取章節url
# url_list = re.findall('<dd> <a style="" href="(.*?)" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >', html_data)
# # for循環周遊
# for url in url_list:
#     index_url = 'https://www.biqudu.net' + url
#     print(index_url)
#     """
#     1. 發送請求, 模拟浏覽器對于url位址發送請求
#         請求連結: https://www.biqudu.net/1_1631/3047505.html
#         安裝子產品方法:
#             - win + R 輸入cmd, 輸入安裝指令 pip install requests
#             - 在pycharm終端, 輸入安裝指令
#         模拟浏覽器 headers 請求頭:
#             字典資料結構
#         AttributeError: 'set' object has no attribute 'items'
#             因為headers不是字典資料類型, 而是set集合
#     """
#     # # 請求連結
#     # url = 'https://www.biqudu.net/1_1631/3047506.html'
#     # 模拟浏覽器 headers 請求頭
#     headers = {
#         # user-agent 使用者代理 表示浏覽器基本身份資訊
#         'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
#     }
#     # 發送請求
#     response = requests.get(url=index_url, headers=headers)
#     # <Response [200]> 響應對象, 表示請求成功
#     print(response)
#     """
#     2. 擷取資料, 擷取伺服器傳回響應資料内容
#         開發者工具: response
#         response.text --> 擷取響應文本資料 <網頁源代碼/html字元串資料>
#     3. 解析資料, 提取我們想要的資料内容
#         标題/内容
#
#     re正規表達式: 是直接對于字元串資料進行解析
#         re.findall('什麼資料', '什麼地方') --> 從什麼地方, 去找什麼資料
#         .*? --> 可以比對任意資料, 除了\n換行符
#         # 提取标題
#         title = re.findall('<h1>(.*?)</h1>', response.text)[0]
#         # 提取内容
#         content = re.findall('<div id="content">(.*?)<p>', response.text, re.S)[0].replace('<br/><br/>', '\n')
#
#     css選擇器: 根據标簽屬性提取資料
#         .bookname h1::text
#             類名為bookname下面h1标簽裡面文本
#         get() --> 提取第一個标簽資料内容 傳回字元串
#         getall() --> 提取多個資料, 傳回清單
#         # 提取标題
#         title = selector.css('.bookname h1::text').get()
#         # 提取内容
#         content = '\n'.join(selector.css('#content::text').getall())
#
#     xpath節點提取: 提取标簽節點提取資料
#
#     """
#     # 擷取下來response.text <html字元串資料>, 轉成可解析對象
#     selector = parsel.Selector(response.text)
#     # 提取标題
#     title = selector.xpath('//*[@class="bookname"]/h1/text()').get()
#     # 提取内容
#     content = '\n'.join(selector.xpath('//*[@id="content"]/text()').getall())
#     print(title)
#     # print(content)
#     # title <檔案名> '.txt' 檔案格式  a 追加儲存 encoding 編碼格式 as 重命名
#     with open(file + title + '.txt', mode='a', encoding='utf-8') as f:
#         """
#         第一章 标題
#             小說内容
#         第二章 标題
#             小說内容
#         """
#         # 寫入内容
#         f.write(title)
#         f.write('\n')
#         f.write(content)
#         f.write('\n')
           

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結
2)效果展示

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

三、采集排行榜所有小說

下面我們采集玄幻榜單所有小說具體看是怎麼操作的呢?🤔

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

主要是要擷取所有小說id——

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

1)主程式

環境安裝都是一樣的方式,看最上面安裝就可以,第三方庫這裡隻是多了parsel庫。

import requests
import re
import parsel
import os


def get_response(html_url):
    """
    發送請求函數
    :param html_url: 請求連結
    :return: response響應對象
    """
    # 模拟浏覽器 headers 請求頭
    headers = {
        # user-agent 使用者代理 表示浏覽器基本身份資訊
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    return response


def get_list_url(html_url):
    """
    擷取章節url/小說名
    :param html_url: 小說目錄頁
    :return:
    """
    # 調用發送請求函數
    html_data = get_response(html_url).text
    # 提取小說名字
    name = re.findall('<h1>(.*?)</h1>', html_data)[0]
    # 提取章節url
    url_list = re.findall('<dd> <a style="" href="(.*?)" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >', html_data)
    return name, url_list


def get_content(html_url):
    """
    擷取小說内容/小說标題
    :param html_url: 小說章節url
    :return:
    """
    # 調用發送請求函數
    html_data = get_response(html_url).text
    # 提取标題
    title = re.findall('<h1>(.*?)</h1>', html_data)[0]
    # 提取内容
    content = re.findall('<div id="content">(.*?)<p>', html_data, re.S)[0].replace('<br/><br/>', '\n')
    return title, content


def save(name, title, content):
    """
    儲存資料函數
    :param name: 小說名
    :param title: 章節名
    :param content: 内容
    :return:
    """
    # 自動建立一個檔案夾
    file = f'{name}\\'
    if not os.path.exists(file):
        os.mkdir(file)
    with open(file + title + '.txt', mode='a', encoding='utf-8') as f:
        """
        第一章 标題
            小說内容
        第二章 标題
            小說内容
        """
        # 寫入内容
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')
    print(title, '已經儲存')

def get_novel_id(html_url):
    """
    擷取小說ID
    :param html_url: 某分類的連結
    :return:
    """
    # 調用發送請求函數
    novel_data = get_response(html_url=html_url).text
    selector = parsel.Selector(novel_data)
    href = selector.css('.l .s2 a::attr(href)').getall()
    href = [i.replace('/', '') for i in href]
    return href


def main(home_url):
    href = get_novel_id(html_url=home_url)
    for novel_id in href:
        novel_url = f'https://www.biqudu.net/{novel_id}/'
        name, url_list = get_list_url(html_url=novel_url)
        print(name, url_list)
        for url in url_list:
            index_url = 'https://www.biqudu.net' + url
            title, content = get_content(html_url=index_url)
            save(name, title, content)
        break


if __name__ == '__main__':
    html_url = 'https://www.biqudu.net/biquge_1/'
    main(html_url)
           

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結
2)效果展示

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結

總結

好啦!今天的内容到這裡就結束了哈,想看的60多本小說全部爬下來了,大家可以自己慢慢看

很久了~下一期這個系列内容就完結了,希望大家好好學一下哦!

✨完整的素材源碼等:可以滴滴我吖!或者點選文末hao自取免費拿的哈~

 🔨推薦往期文章——

 🔨推薦往期文章——

項目1.0 小說下載下傳神器(GUI界面)系列内容

Python實戰之小說下載下傳神器(一)看小說怎麼能少了這款寶藏神器呢?全網小說書籍随便下,随便看,爆贊(你準備好了嗎?)

項目1.1  小說下載下傳神器(GUI界面)系列内容 Python實戰之小說下載下傳神器(二)整本小說下載下傳:看小說不用這個程式,我實在替你感到可惜*(小說愛好者必備)

項目1.6  【Python實戰】聽書就用它了:海量資源随便聽,内含幾w書源,絕對精品哦~

項目1.8 【Python實戰】海量表情包炫酷來襲,快來pick鬥圖新姿勢吧~(超好玩兒)

🎁文章彙總——

Python文章合集 | (入門到實戰、遊戲、Turtle、案例等)

(文章彙總還有更多你案例等你來學習啦~源碼找我即可免費!)    

Python實戰之小說下載下傳神器(三)排行榜所有小說:最全熱門小說合集,總有一款适合你,好多好多好多超贊的小說...(源碼分享學習)前言正文總結