Python爬虫-爬取17K小说

 随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

 这是一个爬取用户17k小说网站爬虫。

#------------------------------------------------我是可耻的分割线-------------------------------------------

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# !/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = 'Mr.Li'
 
from bs4 import BeautifulSoup
import requests, sys
 
 
"""
类说明:下载《17K》网小说
Parameters:
    
Returns:
    
Modify:
    2019-05-13
"""
class downloader(object):
    def __init__(self):
        """
 
        :rtype: object
        """
        self.server = 'http://www.17k.com'  # 网站地址
        self.target = 'http://www.17k.com/list/2731559.html'  # 目录URL地址
        self.names = []            #存放章节名
        self.urls = []            #存放章节链接
        self.nums = 0            #章节数
 
    """
    函数说明:获取下载链接
    Parameters:
        
    Returns:
        
    Modify:
        2017-09-13
    """
    def get_downloader_url(self):
        req = requests.get(self.target)  # 获取URL地址内容
        req.encoding = 'utf-8'  # 转码
        html = req.text  # 保存get到的内容
        div_bf = BeautifulSoup(html, 'html.parser'# 使用BeautifulSoup进行解析
        div = div_bf.find_all('div', class_='Main List'# 查询符合条件的内容
 
        a_bf = BeautifulSoup(str(div[0]),'html.parser')#重新解析
        a = a_bf.find_all('a')#查找元素为'a'的内容
 
        self.nums = len(a[11:])
        for each in a[11:]:
            self.names.append(each.string)#把章节名称添加到变量
            self.urls.append(self.server + each.get('href'))#把章节URL地址添加到变量
 
    """
        函数说明:获取章节内容
        Parameters:
            target - 下载连接(string)
        Returns:
            texts - 章节内容(string)
        Modify:
            2019-05-13
        """
 
    def get_contents(self,target):
        req = requests.get(target)#获取URL地址内容
        req.encoding = 'utf-8'#解码
        html = req.text
        bf = BeautifulSoup(html, 'html.parser')#解析
        texts = bf.find_all('div', class_='readAreaBox content')#使用查找章节正文
        texts = texts[0].text.replace('\xa0' * 8, '\n\n')#使用replace方法,剔除空格,替换为回车进行分段
        return texts
 
    """
    函数说明:将爬取的文章内容写入文件
    Parameters:
        name - 章节名称(string)
        path - 当前路径下,小说保存名称(string)
        text - 章节内容(string)
    Returns:
        
    Modify:
        2019-05-13
    """
    def writer(self, name, path, text):
        write_flag = True
        with open(path, 'a', encoding='utf-8') as f:
            f.write(name + '\n')
            f.writelines(text)
            f.write('\n\n')
 
if __name__ == "__main__":
    dl = downloader()
    dl.get_downloader_url()
    print('《正道潜龙》开始下载:')
    for i in range(dl.nums):
        dl.writer(str(dl.names[i]), '正道潜龙.txt', dl.get_contents(dl.urls[i]))
        sys.stdout.write("  已下载:%.3f%%" %  float(i/dl.nums) + '\r')
        sys.stdout.flush()
    print('《正道潜龙》下载完成')

  

posted @   李荣洋  阅读(1090)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示