python 实现爬取指定小说实时下载(附源码)

import requests
import re
import time
import randomdef download(book_name):# 下载小说search_real_url = 'https://www.biquge5200.cc/modules/article/search.php?searchkey=' + book_nametry:novel_source = requests.get(search_real_url).textreg1 = r'<td class="odd"><a href="(.*?)">(.*?)</a></td>.*?<td class="odd">(.*?)</td>'# 所有搜索到的结果(包括小说网址、名称、作者姓名)novel_list = re.findall(reg1, novel_source, re.S)# 判断是否有结果返回if len(novel_list) == 0:print('你要找的小说不存在,请检查后重新输入')except Exception as e:print(e)for novel_url, novel_name, novel_author in novel_list:if novel_name == book_name:print('你即将下载的小说:%s 作者:%s' % (novel_name, novel_author))return novel_url, novel_namedef get_chapter(url):# 获取章节页面try:# 章节页面源代码chapter_page_source = requests.get(url).textreg2 = r'<dd><a href="(.*?)">(.*?)</a></dd>'chapter_list = re.findall(reg2, chapter_page_source)# print(chapter_list)except Exception as e:print(e)return chapter_listdef get_content(chapter_list, novel_name):""":param chapter_list::param novel_name:"""count = 0length = len(chapter_list)for chapter_url, chapter_name in chapter_list:try:time.sleep(1 + random.random())content_source = requests.get(chapter_url).text# print(content_source)reg = r'<div id="content">(.*?)</div>'content = re.findall(reg, content_source, re.S)[0]stsdw = re.sub('<p>(.*?)\(《》\)</p>', ' ', str(content))print(stsdw)contents = stsdw.replace('</p><p class="">', '\n').replace('  ', '\n\t\t').replace('<p>', '').replace('</p>', '')print('contents:')print(contents)count += 1with open(novel_name + '.txt', 'a', encoding='utf-8') as f:f.write(chapter_name + '\n' + contents + '\n' * 2)print('正在写入: ' + chapter_name)print('进度:%0.2f' % (count / length) + '%')except Exception as e:print(e)if __name__ == '__main__':book_name = input('请输入小说名:')#'圣墟' 凡人修仙传novel_url, novel_name = download(book_name)chapter_list = get_chapter(novel_url)get_content(chapter_list, novel_name)##以上内容仅供学习使用
实现效果图
爬取 笔趣阁 的《凡人修仙传》,请勿过度爬取他人网站,后果自负。

实现效果二:
利用爬虫xpath 进行爬取笔趣阁 的《凡人修仙传仙界篇》,该代码更容易理解:
说明:该网站搜索功能崩溃,无法使用 输入搜索功能
可自行打开网站进行,选取后修改类中URL
如下:
         self.server = 'http://www.biquge.info/书号id/'self.target = 'http://www.biquge.info/书号id/'
当然你不想爬取这个网站也行,可执行修改爬取网站,xpath 的总体实现思路以提供
当然绝大部分网站是有反爬策略的,注意合理配置,访问即可
import requests, sys
from lxml import etree
import io
import re"""
类说明:下载《笔趣阁》网小说《凡人修仙传仙界篇》
Parameters:无
Returns:无
Modify:2019-12-24
"""class downloader(object):def __init__(self):self.server = 'http://www.biquge.info/22_22533/'self.target = 'http://www.biquge.info/22_22533/'self.names = []  # 存放章节名self.urls = []  # 存放章节链接self.nums = 0  # 章节数self.books = 0  #书名"""函数说明:获取下载链接  Parameters:无Returns:无Modify:2019-12-24"""def get_download_url(self):req = requests.get(url=self.target)# print(req.status_code)html = req.content.decode()element = etree.HTML(html)trs = element.xpath('//*[@id="list"]/dl/dd/a/@href')trns = element.xpath('//*[@id="list"]/dl/dd/a/text()')name = element.xpath('//*[@id="info"]/h1')[0]self.books = name# self.author = namefor tr in trs:self.urls.append(self.server + tr)for tr in trns:self.names.append(tr)self.nums = self.urls.__len__()"""函数说明:获取章节内容Parameters:target - 下载连接(string)Returns:texts - 章节内容(string)Modify:2019-12-24"""def get_contents(self, target):req = requests.get(url=target)contens = req.content.decode('utf-8')#设置编码格式trs = etree.HTML(contens)text = trs.xpath('//*[@id="content"]/text()')stale = io.StringIO()for tr in text:stale.write('\n\t' + tr)#添加个格式,让文本更合理展示re.time(1)#休眠1秒后执行return stale.getvalue()"""函数说明:将爬取的文章内容写入文件Parameters:name - 章节名称(string)path - 当前路径下,小说保存名称(string)text - 章节内容(string)Returns:无Modify:2017-09-13"""def writer(self, name, path, text):with open(path, 'a', encoding='utf-8') as f:f.write(name + '\n')f.writelines(text)f.write('\n\n')if __name__ == "__main__":dl = downloader()dl.get_download_url()print('《'+dl.books.text+'》开始下载:')for i in range(dl.nums):dl.writer(dl.names[i], dl.books.text+'.txt', dl.get_contents(dl.urls[i]))sys.stdout.write("  已下载:%.3f%%" % float(i / dl.nums) + '\r')sys.stdout.flush()print(dl.books.text+'下载完成')


最后:本人实现了许多代理池的免费 ip 爬取 网站尽20余个,需要xpth 实现脚本的@该账号

python 实现爬取指定小说(两种实现方案 .附源码)相关推荐

  1. 读取xml文件转成ListT对象的两种方法(附源码)

    读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...

  2. Python爬虫爬取肯德基餐厅信息案例实现(含源码及详细解释)

    1. 需求: 爬取肯德基某一地区的餐厅数量以及其具体信息 (以下代码我仅仅展示出餐厅的店名信息,并将其用列表方式保存在.txt文件中) 2.学习python爬虫的好课推荐: b站上的路飞学城IT,提醒 ...

  3. Python爬取天气数据及可视化分析(附源码)

    大家好,我是辰哥(文末送书) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本次使用python中requests和Be ...

  4. python爬虫爬取王者荣耀官网全部英雄头像(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests import json from bs4 i ...

  5. python爬虫爬取某网站全站图片案列(源码全给可白漂,仅供学习使用,切勿用作非法用途)

    爬取后保存的图片效果图 步骤入下(三步): 先去要爬取的目标网站(https://pixabay.com/)去注册一个账号. 2.注册后登录,浏览器右键鼠标,打开检查,找到登录后的cookies值. ...

  6. python爬虫爬取王者荣耀官网全部装备图片(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests from bs4 import Beauti ...

  7. mongodb java crud_MongoDB用Java,简单的CRUD操作,两种方法,附源码下载。

    两种不同的连接数据库的方式来操作. MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); 方法1: D ...

  8. 关于js渲染网页时爬取数据的思路和全过程(附源码)

    于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...

  9. 【013】基于Vue的酒店客房管理系统(含管理员、普通用户两种身份(附源码数据库、课设报告)

    这里写目录标题 一.系统详细介绍 二.系统部分设计思路 三.项目获取 一.系统详细介绍 前言: 这次带来的是基于Nodejs+Vue+Mysql的酒店客房管理系统,含非常非常详细的课设报告,觉得物超所 ...

最新文章

  1. linux下彻底杀死ngnix进程方法
  2. linux shell scp 远程拷贝 上传下载
  3. linux 设置变量在脚本之外可用,linux – 在ssh上运行脚本时,环境变量不可用
  4. TensorFlow调试常见问题(pycharm)
  5. GitHub:为什么我们最终选择放弃了 jQuery
  6. flink知识点总结
  7. 自己应该如何不断学习呢?
  8. BZOJ 2431: [HAOI2009]逆序对数列( dp )
  9. C语言学生成绩管理系统
  10. 深入浅出Python的抽象基类
  11. flt文件matlab,FLT文件扩展名 - 什么是.flt以及如何打开? - ReviverSoft
  12. 流程图里的形状符号的代表意义
  13. 【科普】数字货币的基石--区块链
  14. 女孩,请把第一胎留给丈夫!!!
  15. 第二章 马尔可夫决策过程及表格型方法
  16. 创建Python Pyramid 单文件 Web 应用程序
  17. OpenCV技巧 | 二值图孔洞填充方法与实现(附Python/C++源码)
  18. C. Anu Has a Function(位运算思维)
  19. ctf(vip限免)WP
  20. win7修复计算机消失,win7旗舰版系统重装后本地连接不见的恢复方法

热门文章

  1. sql 排名前十_全国人口净流入前十排名,珠三角占据4席!
  2. 反编译工具jad下载、安装及使用(无需集成环境一键使用)
  3. 利用高权重网站借力操作关键词快速排名!
  4. ajax接收后台传来的图片
  5. 优盘linux怎么安装软件,u盘linux系统应该怎么安装?
  6. 如何快速的学好英语(Aprial)
  7. MFC之Button按键控件
  8. [zz]ERP排产详细介绍
  9. 为什么要用翻译管理系统(TMS)?memoQ TMS剖析翻译管理的“铁三角”
  10. 气象学和计算机专业,没毕业就被签走的铁饭碗专业 气象学