既然我们之前已经讲了BeautifulSoup的使用,那么我们今天就来实战下,用BeautifulSoup解析小说网站,做一个小说下载器;

首先,先分析一下网站:

  1. 我们的目标是一个叫全小说的网站:https://qxs.la/

    我们可以看见右上角的位置有一个搜索框,我们可以将想要搜索的关键词键入,然后搜索我们想要的内容,我们来分析下这个网站的结构;
  2. 我们在搜索框输入“唐家三少”,看看网页会发生怎么样的变化:

    网页把站内所有唐三的小说都搜索出来了,最新的小说都有,看来这个网站还是更新挺勤的;回过头来分析下页面,没有打开新的网页,但是打开了一个新的页面:我们发现变化的是在原网址后面加上了 "/s_***"
    我们搜索另外一个,看看这个发现成不成立:
    我们发现这个想法貌似是对的,搜索的内容页面就是在原址的基础上加上了 "/s_***"
  3. 我们随便点开一个,看看对应的页面内容是怎么样的:

    我们发现小说的所有章节都在这里面了,我们来检查一下源码,看下网页的结构是怎么设计的:

    发现所有的章节都在 <div class="chapters"> 标签下面,但是客气的是竟然有几章凑数的章节,这个我们先不管,我们打开第一章,看看里面的分布;
  4. 小说的内容已经有了,我们可以看见最下面有下一章,那么我们是不是可以通过这个下一章链接进行翻页,这样就不用获取所有页面的网址了

好了,我们现在已经分析好了,接下来就是开始来写代码了,既然是小说下载器,那么肯定要有一个界面是不是:

  1. 有一个输入框,接收我们想要搜索的关键字
  2. 要有一个列表框,显示我们搜索出来的结果
  3. 当我们选择小说,单击下载按钮的时候,就开始下载这本小说,生成txt文档

设计小说下载器界面:

from tkinter import *window = Tk()
window.geometry('300x500')
window.title('小说下载器')Label(window,text='请输入你想搜索的内容:',font=('楷体',12)).place(x=10,y=10)
# 输入框
key_word = Entry(window,font=('楷体',16),width=25)
key_word.place(x=10,y=35)# 显示列表
show = Listbox(window,width=25,height=15,font=('楷体',16))
show.place(x=10,y=80)# 搜索按钮
def seek():print('')
Button(window,text='搜索',font=('楷体',16),command=seek).place(x=10,y=430)# 下载按钮
def download():print('')
Button(window,text='下载',font=('楷体',16),command=download).place(x=120,y=430)# 退出按钮
Button(window,text='退出',font=('楷体',16),command=quit).place(x=228,y=430)window.mainloop()

第二步,实现小说搜索的功能

def seek():global infobook = []author = []add = []word = key_word.get()    # 获取输入框的内容url = 'https://qxs.la/s_' + word    # 拼接搜索地址bs = get_html_bs(url)    # 获取源码并返回bs对象data_all = bs.find_all('ul',class_='list_content')    # 搜索所有的小说for data in data_all:    # 遍历提取信息book.append(data.find_all('a')[0].string)        # 提取小说名字add.append(data.find_all('a')[0]['href'])        # 提取小说地址author.append(data.find_all('a')[2].string)      # 提取小说作者info = list(zip(book,author,add))    # 将提取出来的信息打包for i in range(show.size()):    # 清空所有的列表项show.delete(0)for data in info:    # 将信息插入到列表中,显示内容show.insert('end','{}({})'.format(data[0],data[1]))
Button(window,text='搜索',font=('楷体',16),command=seek).place(x=10,y=430)

第三步,实现小说下载功能:

def download():global info    # 导入全局变量txt = ''       # 存放小说内容index = show.curselection()[0]    # 获取选中列表项的下标book_name = info[index][0]        # 提取书名url = 'https://qxs.la' + info[index][2]    # 合成小说详情页面地址bs = get_html_bs(url)        # 获取源码并返回bs对象first = bs.find('div',class_="chapter")    # 提取出第一篇小说的地址url = 'https://qxs.la' + first.find('a')['href']    # 合成地址while True:try:bs = get_html_bs(url)    # 获取小说内容页面txt = txt + bs.find('div',class_="text t_c").h1.text + '\n'    # 保存章节题目data = bs.find('div', id="content")    # 提取小说内容data = data.find_all(text=True)        # 因为这个页面比较特殊,大标签内包括小标签和文本内容# 所以要经过进一步的处理,先获取全部文本内容for d in data:    # 遍历所有获取到的内容if d[0:2] == u'\u3000\u3000':      # 发现小说内容都有两个空格开头txt = txt + d.strip() + '\n'   # 将小说内容拼起来print('{}下载完毕!'.format(url))       # 输出下载结果next_url = bs.find('a', id="nextLink")['href']    # 获取下一章的地址if next_url[0:5] == '//qxs':    # 发现最后一张还是有下一章的,但是下一章的地址是以“//qxs”开头print('下载完毕!')breakurl = 'https://qxs.la' + next_url    # 拼接下一章的地址except:print('下载错误!')txt.encode('utf-8')    # 设置文字编码with open('{}.txt'.format(book_name),'w') as f:    # 保存小说,生成txt文档f.write(txt)
Button(window,text='下载',font=('楷体',16),command=download).place(x=120,y=430)

Python爬虫(四)——小说下载器相关推荐

  1. 用python爬虫制作图片下载器(超有趣!)

    这几天小菌给大家分享的大部分都是关于大数据,linux方面的"干货".有粉丝私聊小菌,希望能分享一些有趣的爬虫小程序.O(∩_∩)O哈哈,是时候露一手了.今天给大家分享的是一个适合 ...

  2. Python爬虫之网页下载器网页解析器

    一.网页下载器 -- urllib2的三种网页下载方法 import cookielib import urllib2url = "http://www.baidu.com" pr ...

  3. python小说下载器_【Python】DouBiNovel小说下载器V0.1.1(源码+成品)【失效待修复】...

    简单说明 之前在论坛发现一个很好的小说阅读站,可惜只能在线阅读,无法下载到本地,导出到电子书设备上.恰好最近在学python,于是就有了写一个下载器的想法. 但,对于初学菜鸟.又是初三学子的我,这又谈 ...

  4. 【Python】实现一个小说下载器,可以打包成exe(附原码)

    前言 闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐) 朋友都在看小说,那我就来用Python搞一个小说下载器吧 顺便打包一下 实现步骤 爬虫基本四个步骤: 采集一章小说内容 发送请求, 模拟 ...

  5. Python实现小说下载器,可以打包exe

    前言 闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐) 朋友都在看小说,那我就来用Python搞一个小说下载器吧 顺便打包一下 实现步骤 爬虫基本四个步骤: 采集一章小说内容 发送请求, 模拟 ...

  6. python 小说下载工具_python 制作网站小说下载器

    基本开发环境 ・ Python 3.6 ・ Pycharm 相关模块使用 目标网页分析 输入想看的小说内容,点击搜索 这里会返回很多结果,我只选择第一个 网页数据是静态数据,但是要搜索,是post请求 ...

  7. python编程免费小说_使用Python开发小说下载器,不再为下载小说而发愁

    有点荒废 这几天有点荒废,之前弃坑的网文<伏天氏>,这几天又给捡起来了.然后一发不可收拾的只想看小说,荒废了我的学习.在这里我要检讨啊..... 像我这样的穷人,看小说肯定是找免费的网站, ...

  8. Python爬虫:URL管理器及其实现方式、网页下载器、网页解析器原理及其实现原理!

    Python爬虫之URL管理器: Python爬虫:URL管理器实现方式: Python爬虫之网页下载器: urllib2实现网页下载器的三种方法: 具体代码:                    ...

  9. python小说下载器_python 制作网站小说下载器

    基本开发环境 · Python 3.6 · Pycharm 相关模块使用 目标网页分析 输入想看的小说内容,点击搜索 这里会返回很多结果,我只选择第一个 网页数据是静态数据,但是要搜索,是post请求 ...

  10. python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

最新文章

  1. javascript调试_如何提高JavaScript调试技能
  2. 系统架构设计_系统工程师--系统架构设计
  3. php Hash Table(四) Hash Table添加和更新元素
  4. word-break 对一个字符串根据给出的字典判断是否可以根据字典切分(DP问题)
  5. Linux内核--基于Netfilter的内核级包过滤防火墙实现
  6. k8s核心技术-资源编排(yaml)的介绍---K8S_Google工作笔记0018
  7. 头条搜索已经全面上线,会不会成为下一个流量风口
  8. STL标准模版库--vector的操作集合
  9. 这12个GIS软件一个比一个好用
  10. 修改Oracle GoldenGate(ogg)各个进程的读检查点和写检查点
  11. kettle执行结果面板步骤度量(一)——转换
  12. 一招教你解决Win10屏幕模糊问题
  13. wso2_WSO2注册表安装简介
  14. Linux7 修改网卡名eth0
  15. 新手做SEO迷茫时应该做什么
  16. CTF Series Forensics
  17. titan rtx怎么样
  18. 修改服务器端口后防火墙要设置吗,服务器设置完防火墙需要重启吗
  19. 》技术应用:大数据产品体系
  20. CentOs7怎么查看系统版本

热门文章

  1. 经济基础知识(中级)【9】
  2. 一位前端新人的面试经验
  3. cmd安装pip以及第三方库的最简单的安装方法
  4. IMX6学习记录(8)-更换linux配置,加速启动
  5. Mybatis(1)----------简介及第一开发程序
  6. Lion Disk Maker让你一键制作Lion系统安装U盘
  7. 其于js的五笔输入法!
  8. SoftIce,IDA pro强强联合!从SOFTICE中打开IDA Pro输出的map信息文件
  9. 苹果和华为如何隔空传照片
  10. 用matlab绘制挠度图,如何绘制载荷挠度曲线图