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 ( '《正道潜龙》下载完成' ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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的设计差异