python 下载小说

本文介绍了一个使用Python Selenium和PhantomJS实现的小说爬虫项目,该爬虫能够从指定网站抓取《官场风月》小说的章节链接及内容,并记录到本地文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  以下载官场风月小说为例:

  

 

  具体代码:

# coding=utf-8
import os
import re
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
import selenium.webdriver.support.ui as ui
import time
from datetime import datetime
from selenium.webdriver.common.action_chains import ActionChains

# from threading import Thread
from pyquery import PyQuery as pq
import LogFile

import urllib
class downfile(object):
    def __init__(self,websearch_url,novelname):
        self.driver = webdriver.PhantomJS()
        # self.driver.set_page_load_timeout(10)
        self.driver.maximize_window()
        novel_name = unicode(novelname,'utf8')
        logfile = os.path.join(os.getcwd(), 'novel\\' + novel_name + '.txt')
        self.log = LogFile.LogFile(logfile)
        self.websearch_url = websearch_url

    def scroll_foot(self):
        '''
                滚动条拉到底部
                :return:
                '''
        js = ""
        # 如何利用chrome驱动或phantomjs抓取
        if self.driver.name == "chrome" or self.driver.name == 'phantomjs':
            js = "var q=document.body.scrollTop=10000"
        # 如何利用IE驱动抓取
        elif self.driver.name == 'internet explorer':
            js = "var q=document.documentElement.scrollTop=10000"
        return self.driver.execute_script(js)

    def scrapy_date(self):
        self.driver.get( self.websearch_url)
        htext = self.driver.execute_script("return document.documentElement.outerHTML")
        dochtml = pq(htext)
        Elements = dochtml('div[class="novel_list"]').find('ul').find('li').find('a')

        for e in Elements.items():
            url = 'http://www.shanxixsa.com/sxtvi/21/21051/'+e.attr('href')
            txt = e.text().encode('utf8').strip()
            print txt
            self.log.WriteLog(txt)
            self.driver.get(url)
            shtext = self.driver.execute_script("return document.documentElement.outerHTML")
            sdochtml = pq(shtext)

            sElements = sdochtml('div[ID="novel_content"]')
            for se in sElements.items():
                stxt = se.text().encode('utf8').strip()
                self.log.WriteLog(stxt)



obj = downfile('http://www.shanxixsa.com/sxtvi/21/21051/index.html','官场风月')
obj.scrapy_date()








# -*- coding: utf-8 -*-

import os
import codecs
import datetime
import time
import logging

#封装logging日志
class LogFile:
    # def __init__(self,fileName):
    #     self.fileName = os.path.join(os.getcwd(), fileName)
    # def WriteLog(self,message):
    #     strMessage = '\r\n%s: %s' % (time.strftime('%Y-%m-%d_%H-%M-%S'), message)
    #     with open(self.fileName, 'a') as f:
    #         f.write(strMessage)
    #构造函数 fileName:文件名
    def __init__(self,fileName,level=logging.INFO):
        fh = logging.FileHandler(fileName)
        self.logger = logging.getLogger()
        self.logger.setLevel(level)
        # formatter = logging.Formatter('%(asctime)s : %(message)s','%Y-%m-%d %H:%M:%S')
        formatter = logging.Formatter('%(message)s', '%Y-%m-%d %H:%M:%S')
        fh.setFormatter(formatter)
        self.logger.addHandler(fh)

    def WriteLog(self,message):
        self.logger.info(message)

    def WriteErrorLog(self,message):
        self.logger.setLevel(logging.ERROR)
        self.logger.error(message)

 

<think>嗯,用户想了解Python小说下载器。首先,我需要确定用户的具体需求。他们可能想下载网络小说,但不知道如何用Python实现。可能需要解释基本原理、技术栈、步骤,以及注意事项。 用户可能是编程新手,所以需要结构清晰,分步骤说明。要确保回答准确,但也要易懂。可能需要提到网络请求库如requests,解析库如BeautifulSoup,还有数据存储部分,比如保存为txt文件。 同时,用户可能关心法律问题,得提醒遵守版权法规,不能侵犯作者权益。还要注意反爬机制,比如设置请求头,控制请求频率,避免被封IP。 可能需要给出一个简单的代码示例,展示整个流程,从发送请求到保存文件。但代码要正确,并且加上注释,方便理解。另外,要指出实际项目可能需要更复杂的处理,比如登录、验证码、分页下载等。 还要考虑用户可能的扩展需求,比如多线程加速,或者支持不同的网站结构。但作为介绍,保持基础内容,不过可以提到这些高级功能供进一步学习。 总之,回答要涵盖原理、技术选型、实现步骤、代码示例、注意事项,以及可能的扩展方向。确保信息准确,结构清晰,帮助用户逐步理解如何构建一个简单的Python小说下载器。</think>我为您介绍Python小说下载器的实现原理和开发要点: 一、核心原理 1. 网络请求:通过HTTP请求获取小说网站页面内容 2. 数据解析:从HTML中提取标题、章节、正文等信息 3. 数据存储:将解析内容保存为txt/电子书格式 二、技术栈 ```python # 常用工具库 import requests # 网络请求 from bs4 import BeautifulSoup # HTML解析 import re # 正则表达式 import time # 请求间隔控制 ``` 三、实现步骤 1. 获取目录页 ```python def get_chapter_list(url): headers = {'User-Agent': 'Mozilla/5.0'} # 模拟浏览器访问 response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 提取章节链接(示例选择器需根据具体网站调整) return [a['href'] for a in soup.select('.chapter-list a')] ``` 2. 下载单章内容 ```python def download_chapter(chapter_url): response = requests.get(chapter_url) soup = BeautifulSoup(response.text, 'html.parser') # 提取章节标题和正文(示例选择器需调整) title = soup.find('h1').text.strip() content = soup.find('div', class_='content').text.strip() return title, content ``` 3. 数据存储 ```python def save_to_txt(book_name, chapters): with open(f"{book_name}.txt", "w", encoding="utf-8") as f: for title, content in chapters: f.write(f"{title}\n\n{content}\n\n") ``` 四、注意事项 1. 法律合规性 - 仅下载授权资源 - 遵守网站robots.txt协议 - 不得用于商业用途 2. 反爬对策 ```python # 建议配置 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Referer': 'https://www.example.com' } # 设置请求间隔 time.sleep(random.uniform(1, 3)) # 随机延时1-3秒 ``` 五、扩展功能建议 1. 多线程/异步下载加速 2. 自动识别网站结构 3. 异常重试机制 4. 进度显示功能 5. 格式转换(EPUB/MOBI等) 实际开发时需要根据目标网站的具体HTML结构调整选择器,建议先使用开发者工具分析网页结构。请注意遵守相关法律法规,尊重作者版权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值