利用Python下载网络小说并保存到本地文件

最近在都应中刷到一本B站的漫画《我家娘子竟然是女帝》,它是根据小说《迎娶女帝之后》改编的,它目前只更新到68集,这本小说虽然不是我喜欢的类型,但是没啥事就看了一下,但是后面章节怎么找都找不到下载,于是用python把整本说下载下来了。

安装python

官方下载地址:https://www.python.org/downloads/
在这里插入图片描述
在这里插入图片描述
windows版本的安装比较简单,直接下载后,安装即可。

网站分析

获取小说目录

小说地址:https://www.81zw.com/book/60503/
在这里插入图片描述

就以第一张为例,点开链接,检查网页,找到这本小说所有章节的链接和名称。

在这里插入图片描述
章节目录,通过一个 idlistdiv 包裹,使用 dl > dd 制作列表

def get_urls():
    url = bookurl
    response = requests.get(url, headers=headers)
    response.encoding = 'utf-8'
    html = etree.HTML(response.text)

    # 所有章节的url列表
    url_list = [weburl + x for x in html.xpath('//div[@id="list"]/dl/dd/a/@href')]
    return url_list

以上代码,通过 etree 获取 HTML 内容,然后通过 xpath 查询 idlist 中每个章节的链接

获取小说内容

在这里插入图片描述

标题内容在 classbooknamediv 下面的 H1 标签中。
小说内容在 idcontentdiv 中。

def get_text(url):
    rep = requests.get(url, headers=headers)
    rep.encoding = 'utf-8'
    dom = etree.HTML(rep.text)
    name = dom.xpath('//div[@class="bookname"]/h1/text()')[0]
    text = dom.xpath('//div[@id="content"]/text()')
    with open(path + bookname + '.txt', 'a', encoding='utf-8') as f:
        f.write(name)
        for con in text:
           f.write(con)
    
    print(f'{name}  ===> 下载完成')

使用 etreexpath 获取小说内容,然后通过 for 循环写入文件。

完整代码

import requests
from lxml import etree
import time
import random

path = r"D:/Download/books/"
bookname = "迎娶女帝之后"
weburl = "https://www.81zw.com/"
bookurl = "https://www.81zw.com/book/60503/"
headers = {
    "Referer": bookurl,
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"
}

def get_urls():
    url = bookurl
    response = requests.get(url, headers=headers)
    response.encoding = 'utf-8'
    html = etree.HTML(response.text)

    # 所有章节的url列表
    url_list = [weburl + x for x in html.xpath('//div[@id="list"]/dl/dd/a/@href')]
    return url_list
  
def get_text(url):
    rep = requests.get(url, headers=headers)
    rep.encoding = 'utf-8'
    dom = etree.HTML(rep.text)
    name = dom.xpath('//div[@class="bookname"]/h1/text()')[0]
    text = dom.xpath('//div[@id="content"]/text()')
    with open(path + bookname + '.txt', 'a', encoding='utf-8') as f:
        f.write(name)
        for con in text:
           f.write(con)
    
    print(f'{name}  ===> 下载完成')

def main():
    urls = get_urls()

    for url in urls:
        get_text(url)
        time.sleep(random.randint(1, 3))

if __name__ == '__main__':
    main()

path :存放小说文件的路径
bookname:小说文件名称
weburl:小说网站域名
bookurl:小说URL

脚本保存为 .py 后缀的文件,可双击直接运行,也可以在命令窗口或者 idea 中运行。

在这里插入图片描述
在这里插入图片描述

出现上图输出内容,说明脚本是有效果的。

### 回答1: 你好!要利用url获取超文本文件保存至本地,可以使用Python中的requests库和文件操作相关函数。具体操作如下: 1. 导入requests库:在Python代码中使用import语句导入requests库,例如:`import requests` 2. 发送请求获取超文本文件:使用requests库发送HTTP请求获取超文本文件,例如:`response = requests.get(url)`。其中,url是要获取的超文本文件的URL地址,response是服务器返回的响应对象。 3. 保存文件:使用Python文件操作相关函数将获取到的超文本文件保存至本地,例如:`with open('filename.html', 'wb') as f: f.write(response.content)`。其中,'filename.html'是要保存文件名,response.content是响应对象的二进制内容,以二进制模式('wb')打开文件并将内容写入文件。 完成以上操作后,超文本文件就被保存到了本地,可以在指定的文件夹中找到它。 ### 回答2: 在程序中获取超文本文件是一项常见的操作。对于需要在本地保存该文档的情况,需要使用Python中的requests模块和文件操作模块。以下是实现该过程的详细步骤: 1.导入requests和os模块 首先需要导入需要使用的模块,即requests和os。requests是Python中用于发送HTTP请求的模块,而os模块则是Python中用于管理操作系统功能,包括文件和目录操作等。 import requests import os 2.定义获取URL中的文档内容的函数 接下来需要定义一个函数,该函数接收一个URL作为输入参数,并返回该URL中的文档内容。使用requests库发送get请求获取文档内容,并使用text属性获取文档中的文本内容。 def download(url): response = requests.get(url) content = response.text return content 3.定义保存文档的函数 定义一个函数,该函数接受文档内容和保存位置两个参数,并在本地保存文件。打开文件时需要将文件保存的路径和文件名进行合并。 def save_to_file(content, path): with open(path, 'w', encoding='utf-8') as f: f.write(content) 4.调用函数并传入URL和保存位置 在程序中调用定义的函数,获取文档内容,并将其保存至指定位置。需要先调用获取文档的函数,然后再使用保存文档的函数将其保存至本地。 url = 'https://www.example.com/document.html' content = download(url) file_path = os.path.join(os.getcwd(), 'document.html') save_to_file(content, file_path) 以上就是利用URL获取超文本文件保存至本地的方法。通过requests库获取文档内容,然后使用文件操作模块将其保存至本地。这一过程在Python中十分简单,并且易于理解和使用。 ### 回答3: 使用 Python 编程语言可以很容易地利用 URL 地址获取超文本文件保存至本地。以下是具体步骤: 第一步:导入 urllib.request 库 通过在 Python 解释器中输入“import urllib.request”即可导入 urllib.request 库,这个库是 Python 中用来进行 URL 相关操作的标准库之一。 第二步:打开 URL 并读取数据 使用 urllib.request 库中的 urlopen() 函数可以顺利地打开指定的 URL 地址,并将获取到的数据存储在内存中。例如,可以使用以下代码获取 Python 的官方网站的 HTML 文件: ``` import urllib.request response = urllib.request.urlopen('https://www.python.org/') html = response.read() ``` 在上述代码中,首先使用 urllib.request.urlopen() 函数打开了 https://www.python.org/ 这个 URL 地址,并将获取到的数据存储在 response 变量中。然后,使用 response.read() 函数将读取的 HTML 数据存储在 html 变量中。 第三步:将数据写入本地文件 使用 Python 中的内置函数 open() 和 write() 可以将一个字符串写入指定的文件。例如,可以使用以下代码将上述获取到的 Python 官网 HTML 文件写入到本地文件中: ``` with open('python.html', 'wb') as f: f.write(html) ``` 在上述代码中: 1. `'python.html'` 表示将要写入到的本地文件名; 2. `'wb'` 表示写入文件时使用二进制模式(可以避免因编码格式不同而导致的问题); 3. `f.write(html)` 表示将 html 变量中的数据写入到文件中。 在以上三个步骤都做完后,只需要执行 Python 程序(例如将上述代码存储到文件 `save_html.py` 中,并在控制台输入 `python save_html.py`)即可实现获取超文本文件保存至本地。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值