# novel_downloader.py'''
从《笔趣看》网站下载小说:
1.定义一个下载类
2.调用类
'''from bs4 import BeautifulSoup
import requests, sysclass downloader:def __init__(self):self.server = 'http://www.biqukan.com/'             #网站urlself.target = 'http://www.biqukan.com/20_20952/'    #章节目录urlself.titles = []        #章节名self.urls = []          #每一章的网页urlself.nums = []          #下载的章数def get_download_url(self):req = requests.get(url=self.target)     #获得response对象html = req.text                         #获得html文件div_bf = BeautifulSoup(html)            #创建一个BeautifulSoup对象div = div_bf.find_all('div', class_ = 'listmain')   #筛选html文件内容,返回的是一个lista_bf = BeautifulSoup(str(div[0]))       #以list中的内容构建Beautiful对象a = a_bf.find_all('a')                  #进一步筛选,返回一个多元素listself.nums = len(a[12:])                 #设置要下载的章节for each in a[12:]:self.titles.append(each.string)     #将章节名存入一个列表self.urls.append(self.server + each.get('href'))#将每章的url存入一个列表def get_contents(self, chapter_url):req = requests.get(url=chapter_url)html = req.textbf = BeautifulSoup(html)contents = bf.find_all('div', class_ = 'showtxt')contents = contents[0].text.replace('\xa0'*8, '\n\n')#选筛选出文字内容,再从中替换掉空格return contentsdef save_in(self, filename, title, contents):with open(filename, 'a', encoding='utf-8') as f:f.write(title + '\n')f.writelines(contents)f.write('\n\n')if __name__ == '__main__':d=downloader()d.get_download_url()print('《牧云天下》开始下载:')for i in range(d.nums):d.save_in('《牧云天下》.txt', d.titles[i], d.get_contents(d.urls[i]))sys.stdout.write("已下载:%.3f%%" %  float(100*i/d.nums) + '\r')sys.stdout.flush()print('下载完成!')

涉及到的几个知识点:

使用的第三方库

第一步,抓取网页html信息:**
使用了requests库中的requests.get(url)函数。
其中url为Uniform Resource Locator,即通常我们所说的网址。该函数返回一个response对象,利用该对象可以获取网页的数据。
(http://docs.python-requests.org/zh_CN/latest/user/quickstart.html)
第二步,解析并筛选html信息:
使用了BeautifulSoup库。
首先构建一个BeautifulSoup对象,然后调用find_all函数进行筛选。
该函数的参数可查看帮助文档。
(http://beautifulsoup.readthedocs.io/zh_CN/latest/)

with … as … 语句进行文件操作

with open("/tmp/foo.txt") as file:  data = file.read() 

等价于:

file = open("/test.txt")
try:  data = file.read()
finally:  file.close()  

可以看到前者更为简洁。

open函数的使用:
open(filename, ‘a’, encoding=’utf-8’)
这里‘a’表示以追加模式打开(必要时新建文件),从尾部写入数据;
encoding用来表示写入的数据的编码方式,对非UTF-8编码需要注明。

Write和Writelines的区别:
file.write(str)的参数是一个字符串,就是你要写入文件的内容.
file.writelines(sequence)的参数是字符序列,比如列表,它会迭代帮你写入文件。

参考博文:
open函数:http://www.cnblogs.com/dkblog/archive/2011/02/24/1980651.html
with… as…:http://www.cnblogs.com/ymjyqsx/p/6554817.html

显示下载进度的方法

这里调用了sys模块中的两个函数:

sys.stdout.write("已下载:%.3f%%" %  float(100*i/d.nums) + '\r')
sys.stdout.flush() #用于缓冲

其中,
转义字符’\r’用来将光标返回本行行首。
write和print的区别是:print函数打印多行,而write打印单行。
编程中发现再windows命令行中可以实现,而再Python IDLE中’\r’被忽略了。不知道是什么原因。

Python网络爬虫(二):小说下载器相关推荐

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

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

  2. Python轻量级爬虫教程-网页下载器

    爬虫简介: 抓取自己想要的的类别网页上的数据. 爬虫架构: 爬虫调度端 爬虫:URL管理器, 网页下载器,网页解析器 数据: 爬虫运行流程: URL管理器: 管理待抓取URL集合和已抓取URL集合: ...

  3. Python网络爬虫笔记:下载、分析京东P20销售数据

    1. 翻页的时候,谷歌F12的Network页签可以看到下面的请求.(这里的翻页指商品评价中1.2.3页等) 从Preview页签可以看出,这个请求是获取评论信息的 2. 对比第一页.第二页.第三页- ...

  4. python网络爬虫--下载图片

    本项目将使用requests库.BeaurifulSoup库.selenium库实现下载百度图片的功能. 1.前言 首先,为什么要使用selenium库呢?因为在我们编写爬虫代码的过程中,可能会遇到一 ...

  5. python网络爬虫--网页登录

    1.前言 主要用到python的selenium库,通过模仿浏览器行为+定位登录所需的标签位置,实现网页登录功能.最后在码云(gitee)上测试自动登录功能. 2.selenium定位网页元素 关于s ...

  6. 基于Python实现的网络爬虫项目——多线程下载小说并保存为txt文件(包含完整代码及注释)

    基于Python实现的网络爬虫项目--多线程下载小说并保存为txt文件(包含完整代码及注释) 一.确立预期目标 二.完成项目所需工具 三.项目需要解决的问题 问题一 问题二 问题三 问题四 问题五 问 ...

  7. 【Python网络爬虫实战篇】使用selenium+requests爬取下载高清源视频:关于爬取m3u8文件链接解析为ts视频合并成mp4视频的分析实战

    这两天博主在摸鱼时,偶然间接触到了流媒体的概念,一时间来了兴致.再加上之前博主有着七.八年的视频制作经验,深知视频素材获取的不易.因此,打算利用自己所学的python网络爬虫的知识,通过编写代码实现获 ...

  8. Python网络爬虫实践(2):爬取小说网站小说

    Python网络爬虫实践(2) 一.需求分析 爬取某小说网站的一部小说 二.步骤 目标数据 网站 页面 分析数据加载流程 分析目标数据所对应的url 下载数据 清洗,处理数据 数据持久化 重点:分析目 ...

  9. python爬虫教程视频下载-利用Python网络爬虫获取电影天堂视频下载链接【详细教程】...

    相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来. [二.项目准备] ...

  10. Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...

最新文章

  1. Log4j2再发新版本2.16.0,完全删除Message Lookups的支持,加固漏洞防御!
  2. 台湾国立大学郭彦甫Matlab教程笔记(2)
  3. 用流收集数据Collectors的用法介绍分组groupingBy、分区partitioningBy(一)
  4. 我的第一个web开发框架
  5. clipboard 在 vue 中的使用
  6. 跨平台、多浏览器页面测试
  7. mysql权限相关操作
  8. Leetcode每日一题:860.lemonade-change(柠檬水找零)
  9. 《编译原理》学习笔记 ·001【第一章:总论】
  10. canvas简单实现动态时钟
  11. Spark调优 数据倾斜
  12. 最详细版本|UI2Code智能生成Flutter代码——版面分析篇...
  13. android x86 精简版,===Windows7 SP1原版超纯精简版X64X86===
  14. redhat linux防火墙状态,Redhat下配置iptables防火墙
  15. 计算机屏幕蓝光,电脑屏幕如何设置护眼色?让颜色柔和且减少屏幕蓝光?
  16. Processing 自动贪吃蛇脚本
  17. 七、vertical-align属性、透明度属性及兼容、ps常用工具、常见的图片格式、项目规范、命名参考、iconfont的使用...
  18. android 仿QQ音乐歌单效果
  19. 转载的一篇嵌入式大佬经验博文
  20. 稀疏矩阵的加法(用十字链表实现A=A+B)

热门文章

  1. 数字图像处理,相位相关算法解决图像的刚性平移问题
  2. 有效沟通沟通的9大技巧
  3. Mybatis(1)----------简介及第一开发程序
  4. 【经验分享】基于创龙AM5708多核间通信的IPC例程通用开发流程
  5. 提高前端生产效率(PxCook工具推荐)
  6. 嵌入式入门学习的必要步骤
  7. Wework的线上社交,能否支撑其169亿估值?
  8. WIN7 通过4G模块 拨号上网过程
  9. ESP8266/ESP32 +1.3“ or 0.96“ IIC OLED指针时钟+数字时钟显示
  10. matlab 矩阵分行标准化,matlab矩阵标准化