python爬虫入门:在命令行搜索并下载小说

文章目录

前言

一、生成小说章节目录

1.具体流程

2、效果演示

二、小说下载

1、具体流程

2、效果演示

总结


前言

本篇文章以笔趣阁为例,链接: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爬虫小说下载

总结

以上就是本篇文章的所有内容,如有错误请指正,谢谢。

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级大魔王li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值