python实现爬虫抓取小说功能示例【抓取金庸小说】


Posted in Python onAugust 09, 2019

本文实例讲述了python实现爬虫抓取小说功能。分享给大家供大家参考,具体如下:

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
from urllib import request
import re
import os,time
#访问url,返回html页面
def get_html(url):
  req = request.Request(url)
  req.add_header('User-Agent','Mozilla/5.0')
  response = request.urlopen(url)
  html = response.read()
  return html
#从列表页获取小说书名和链接
def get_books(url):#根据列表页,返回此页的{书名:链接}的字典
  html = get_html(url)
  soup = BeautifulSoup(html,'lxml')
  fixed_html = soup.prettify()
  books = soup.find_all('div',attrs={'class':'bbox'})
  book_dict = {}
  for book in books:
    book_name = book.h3.a.string
    book_url = book.h3.a.get('href')
    book_dict[book_name] = book_url
  return book_dict
#根据书名链接,获取具体的章节{名称:链接} 的字典
def get_parts(url):
  html = get_html(url)
  soup = BeautifulSoup(html,'lxml')
  fixed_html = soup.prettify()
  part_urls = soup.find_all('a')
  host = "http://www.xiaoshuotxt.org"
  part_dict = {}
  for p in part_urls:
    p_url = str(p.get('href'))
    if re.search(r'\d{5}.html',p_url) and ("xiaoshuotxt" not in p_url):
      part_dict[p.string] = host + p_url
  return part_dict
#根据章节的url获取具体的章节内容
def get_txt(url):
  html = get_html(url)
  soup = BeautifulSoup(html,'lxml')
  fixed_html = soup.prettify()
  title = soup.h1.string #获取文章标题
  content = soup.find('div',attrs={'class':'zw'})
  txt = BeautifulSoup.get_text(content) #正文内容
  return txt
if __name__ == "__main__":
  root_dir= r'e:\books'
  #url = 'http://www.xiaoshuotxt.org/mingzhu/index_2.html' #第2页的小说
  url = "http://www.xiaoshuotxt.org/writer/58" #金庸的小说
  books = get_books(url)
  for book_name,book_url in books.items():
    os.mkdir(os.path.join(root_dir,book_name))
    part_dict = get_parts(book_url)
    print(book_name,"共:",len(part_dict),"章节")
    for part_name,part_url in part_dict.items():
      print("正在保存:",part_name)
      f1 = open(r'e:\books\%s\%s.txt'%(book_name,part_name),'w',encoding='utf-8')#以utf-8编码创建文件
      part_txt = get_txt(part_url)
      f1.write(str(part_txt))
      f1.close()
      time.sleep(2)

运行效果:

python实现爬虫抓取小说功能示例【抓取金庸小说】

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
Python 实现一行输入多个值的方法
Apr 21 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
简单了解python的一些位运算技巧
Jul 13 Python
Django框架 querySet功能解析
Sep 04 Python
Python 实现顺序高斯消元法示例
Dec 09 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
django中嵌套的try-except实例
May 21 Python
什么是Python变量作用域
Jun 03 Python
python实现BP神经网络回归预测模型
Aug 09 #Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 #Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 #Python
详解Python中的正斜杠与反斜杠
Aug 09 #Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 #Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 #Python
Django使用Jinja2模板引擎的示例代码
Aug 09 #Python
You might like
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
Python 深入理解yield
2008/09/06 Python
Python Queue模块详解
2014/11/30 Python
浅析Python中的多条件排序实现
2016/06/07 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
自荐书封面下载
2013/11/29 职场文书
主题团日活动总结
2014/06/25 职场文书
民事授权委托书范文
2014/08/02 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
还款承诺书范本
2015/01/20 职场文书