文章目录
前言
本篇文章以笔趣阁为例,链接:https://www.biquge7.com,实现在命令行搜索并下载小说。
以下为本篇文章的正文内容。
一、生成小说章节目录
1.具体流程
打开笔趣阁的搜索界面,搜索小说后可以看到网页链接由请输入小说关健字_笔趣阁和我们的搜索内容构成。因此可通过以下代码确定搜索页面的url。
sswyqian = 'https://www.biquge7.com/s?q='
print('请输入小说名字():')
xiaoshuomz = input()
sswy = sswyqian + xiaoshuomz #https://www.biquge7.com/s?q=小说名
首先要在cmd中安装相应的库requests和BeautifulSoup:
pip install requests
pip install beautifulsoup4
在小说搜索页面点击鼠标右键,点击检查,可看到右侧有一大堆的代码,这些就是该页面的HTML。HTML通过标记符号来标记要显示的网页中的各个部分,与页面内容是一一对应的。如下图所示,可以看到右侧中的红圈对应着页面中的斗罗大陆。
先导入要使用的模块。
import requests
from bs4 import BeautifulSoup
然后我们可以通过requests发送网络请求并获得该页面HTML的文本。
txt = requests.get('https://www.biquge7.com/s?q=斗罗大陆') #get请求('网址')
t = txt.text #获取搜索后网址的文本编码
再使用BeautifulSoup对该文本进行美化,提取我们所要的数据。BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库 。
soup = BeautifulSoup(t,features="lxml") #使用BeautifulSoup解析文档t,并得到对象soup
text = soup.find_all('h4','bookname') #使用find_all找到包含'h4'、'bookname'的标签
可再次对text文档使用BeautifulSoup并找到'a'标签 。
z = []
text = str(text) ##将text转换成字符串形式
soupa = BeautifulSoup(text,features="lxml")
t = soupa.find_all('a') #找到'a'标签
for q in t:
z.append(q.get('href')) #提取出href
通过以上代码可得到该搜索页面首页小说的后半截网址,如下图所示。再将小说名字按顺序列出在,即可按序号选择想要下载的小说。
小说选择章节页面链接:斗罗大陆最新章节_斗罗大陆全文免费阅读-笔趣阁,如下图所示。
以下为生成小说章节目录的完整代码,先要创建一个文件夹(小说)与生成小说章节目录.py、小说下载.py并列。其中BeautifulSoup如果不加features后的内容会有警告。
生成小说章节目录具体代码如下:
import requests
from bs4 import BeautifulSoup
sswyqian = 'https://www.biquge7.com/s?q='
sy = 'https://www.biquge7.com'
zjmz = [] #存放小说章节名称
xiaoshuolj = [] #存放小说链接
p = 0
print('请输入小说名字():')
xiaoshuomz = input()
sswy = sswyqian + xiaoshuomz #https://www.biquge7.com/s?q=小说名
ta = requests.get(sswy) #get请求('网址')
taa = ta.text #获取搜索后网址的文本编码
soupa = BeautifulSoup(taa,features="lxml")
'''
使用BeautifulSoup解析taa文档,得到对象soupa
此处不加features="lxml"会有警告
'''
taaa = soupa.find_all('h4','bookname') #使用find_all找到包含'h4''bookname'的标签
taaa = str(taaa)
soupb = BeautifulSoup(taaa,features="lxml")
tb = soupb.find_all('a') #找到'a'标签
for q in tb:
xiaoshuolj.append(q.get('href')) #提取出href
for w in tb:
xiaoshuom = w.text
print('%d'%(p) + xiaoshuom + '\n') #打印出所有搜索结果供用户选择
p = p + 1
print('以上为小说的所有搜索结果,请选择小说对应的序号:')
xiaoshuoxuhao = int(input())
xiaoshuoljhou = xiaoshuolj[xiaoshuoxuhao]
xiaoshuowy = sy + xiaoshuoljhou
t0 = requests.get(xiaoshuowy) #get请求('网址')
t1 = t0.text #获取该网址的文本编码
soup0 = BeautifulSoup(t1,features="lxml") #使用BeautifuiSoup解析t1文档,得到一个BeautifuiSoup对象soup0
text0 = soup0.find_all('div','listmain') #找到所有包含div和listmain的标签
t2 = str(text0) #将text0转换成字符串形式
soup1 = BeautifulSoup(t2,features="lxml")
text1 = soup1.find_all('a') #找到所有a标签
for a in text1: #去除不要的1-12最新章节
zjmz.append(a.text) #此处也可使用.string
zjmulufile = open('小说/章节目录.txt','w' , encoding='utf-8') #新建或覆盖文档章节目录.txt
for b in range(len(zjmz)): #设置zjmz[]的长度为for循环次数
c = (b , zjmz[b]) #将章节序号和章节名字放在同一个元组中
mulu = str(c)
zjmulufile = open('小说/章节目录.txt','a' , encoding='utf-8') #打开章节目录.txt追加内容
zjmulufile.write(mulu+'\n') #写入mulu在章节目录.txt中
zjmulufile.close() #关闭并刷新zjmulufile
2、效果演示
Python爬虫生成小说章节目录
二、小说下载
1、具体流程
以斗罗大陆第一章页面为例,和上述方法一样,找到其对应的标签后,使用BeautifulSoup的find_all对其进行查找。
具体小说下载代码如下所示,与上方生成小说章节目录用的方法大同小异。其中使用replace的方法将文本中的空格转换成回车。
小说下载代码如下:
import requests
from bs4 import BeautifulSoup
sswyqian = 'https://www.biquge7.com/s?q='
sy = 'https://www.biquge7.com'
n = 0
q = 1
p = 0
zjwylj = [] #存放小说章节链接
zjmz = [] #存放小说名字
xiaoshuolj = [] #存放小说链接
print('请输入小说名字():')
xiaoshuomz = input()
sswy = sswyqian + xiaoshuomz #https://www.biquge7.com/s?q=小说名
ta = requests.get(sswy) #get请求('网址')
taa = ta.text #获取搜索后网址的文本编码
soupa = BeautifulSoup(taa,features="lxml") #使用BeautifulSoup解析taa文档,得到对象soupa
taaa = soupa.find_all('h4','bookname') #使用find_all找到包含'h4''bookname'的标签
taaa = str(taaa)
soupb = BeautifulSoup(taaa,features="lxml")
tb = soupb.find_all('a') #找到'a'标签
for q in tb:
xiaoshuolj.append(q.get('href'))
for w in tb:
xiaoshuom = w.text
print('%d'%(p) + xiaoshuom + '\n')
p = p + 1
print('以上为小说的所有搜索结果,请选择小说对应的序号:')
xiaoshuoxuhao = int(input())
xiaoshuoljhou = xiaoshuolj[xiaoshuoxuhao]
xiaoshuowy = sy + xiaoshuoljhou
t0 = requests.get(xiaoshuowy) #get请求
t1 = t0.text #获取文本编码
soup0 = BeautifulSoup(t1,features="html.parser") #使用BeautifuiSoup解析t1文档,得到一个BeautifuiSoup对象soup0
text0 = soup0.find_all('div','listmain') #找到'div''listmain'标签
t2 = str(text0)
soup1 = BeautifulSoup(t2,features="html.parser")
text1 = soup1.find_all('a')
for a in text1:
zjwylj.append(a.get('href')) #提取出href
zjmz.append(a.text) #提取文本,此处也可用.string
print('请输入起始下载章节对应序号:')
qi = input()
print('请输入结束下载章节对应序号:')
jie = input()
for b in zjwylj[int(qi):int(jie)+1]: #对应要下载的章节后半段链接(前半段为sy)
zjljhou = b
zjlj = sy + b #合并两段链接成完整的章节链接
x0 = requests.get(zjlj) #get请求
x1 = x0.text #获取文本编码
soupx0 = BeautifulSoup(x1,features="html.parser") #解析x1文档,得到对象soupx0
tex0t = soupx0.find_all('div','showtxt') #找到'div'、'showtxt'标签
textzhong = tex0t[0].text.replace(' ' , '\n') #使用replace将' '替换成回车'\n' #print(textzhong)
txt = str(textzhong)
name = zjmz[int(qi)+n] #对应章节的名字
n = n + 1
word = open('小说/' + name + '.doc' , 'w' , encoding='utf-8') #在小说/下新建name.doc
word.write(txt) #写入txt在每个name.doc中
2、效果演示
Python爬虫小说下载
总结
以上就是本篇文章的所有内容,如有错误请指正,谢谢。