网络知识 娱乐 python爬取《天才基本法》原著小说

python爬取《天才基本法》原著小说

《天才基本法》看完了,听说对原著改编很大,准备找原著看看。

以前学过一点儿python,《天才基本法》剧里多次推崇python让我又燃起热情复习了一下,正好就有了这个任务:python爬取《天才基本法》原著小说,然后导入到kindle等电纸书设备阅读。

由于长时间不用有些生疏,捣鼓了两小时才成功,python真是简练的语言,算上空行代码也没有50行!

首先搜索“天才基本法在线阅读”找到某个网站,你也可以直接使用我下面代码里那个网址。然后下载目录页的章节列表,最后逐个下载章节合并成一个txt文本文件。

先写一个根据网址获取html源码的通用函数。

def 获取网页源码(url): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" } try: r = requests.get(url=url, headers=headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text # 返回网页源码 except: print('网页地址访问失败') return '获取失败'

看到一篇文章说python支持中文函数和变量名称,这样写真棒!几乎不用注释了。

# 开始爬取目录目录地址 = 'https://www.janpn.com/book/tiancaijibenfa.html'目录源码 = 获取网页源码(目录地址)章节地址和名称列表 = []源码解析器 = BeautifulSoup(目录源码, 'lxml')目录代码 = 源码解析器.select('div > ul> li') # 层级选择for 章节 in 目录代码: if 章节.text=='': continue 章节地址 = 章节.find('a').attrs['href'] 章节名称 = 章节.a.string 章节地址和名称列表.append([章节地址, 章节名称])print('章节列表下载成功!')

# 按照章节顺序下载章节内容并保存到文件电子书文件 = open('天才基本法.txt', 'a', encoding="utf-8")for 章节 in 章节地址和名称列表: 章节地址 = 章节[0] 章节名称 = 章节[1] 章节源码解析器 = BeautifulSoup(获取网页源码(章节地址), 'lxml') 本章内容代码 = 章节源码解析器.find('div', id='htmlContent') 本章内容文本 = 本章内容代码.text 电子书文件.write(章节名称 + 本章内容文本 + "n") print(章节名称 + ' 下载成功。')电子书文件.close()print('大功告成!')

因为有200多页,运行了大约5分钟才结束。

用多线程可以加速,但我还不会,会的请指教一下。

另外有个小问题没有解决,在这里请教一下。小说源码中有许多空格和网页换行,如:

“ 想到这里,林朝夕的手机铃声响了。<br><br> 她硬着头皮,赶忙接起”

,我使用 “本章内容代码.text” 忽略过去,但是这样就没有换行了,想进行替换:

本章内容文本 = 本章内容代码.replace("<br>","n")

但又提示 “TypeError: 'NoneType' object is not callable”,请问怎么办?