自动高亮显示位置
通过上面的操作,我们能轻松的找到小说文本在网页里的位置,并能知道两个参数,标签:'div';id:'content',然后通过这两个参数提取出小说文本。
import requests
from bs4 import BeautifulSoup
......
......
for i in range(len(dd)):
if i == 2: # 临时设置只看第3篇文章的打印效果,用于调试
title = dd[i].find('a').text
chap_url = dd[i].find('a')['href']
response1 = requests.get('https://www.biquge.com.cn' chap_url) #访问链接
soup1 = BeautifulSoup(response1.content, 'lxml') # 获得网页
text = soup1.find('div', id='content').text #解析网页获得小说正文
print(text) # 试打印看效果
图8,打印第3篇正文成功
6、保存结果
f = open(path '/' title '.txt', 'a ', encoding='utf-8') # 设置章节标题为文件名
f.write(text) # 写入小说正文
至此,代码完成,能放心下载了。
7、运行效果
我们在完整代码里,设置一次性下载100章节的代码,来看看下载的效果。完整代码:
import requests, os
from bs4 import BeautifulSoup
url = 'https://www.biquge.com.cn/book/23341/'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
booktitle = soup.find('h1').text
if not os.path.isdir(booktitle): # 判断当前文件夹下是否存在和小说名同名的文件夹
os.makedirs(booktitle) # 若不存在,则创建小说同名文件夹
dd = soup.find_all('dd')
for i in range(len(dd)):
if i < 100:
title = dd[i].find('a').text
chap_url = dd[i].find('a')['href']
response1 = requests.get('https://www.biquge.com.cn' chap_url)
soup1 = BeautifulSoup(response1.content, 'lxml')
text = soup1.find('div', id='content').text
f = open(booktitle '/' title '.txt', 'a ', encoding='utf-8')
f.write(text)
print("正在下载《 {} 》...... {} / {} ".format(title, i 1, len(dd)))
else:
break
print('本次共下载 {} 章, 保存地址:{}'.format(i, os.getcwd() '\\' booktitle '\\'))
运行效果: