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 相关文章推荐
python中关于日期时间处理的问答集锦
Mar 08 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
python ---lambda匿名函数介绍
Mar 13 Python
Python中字符串List按照长度排序
Jul 01 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
python给list排序的简单方法
Dec 10 Python
python 基于opencv操作摄像头
Dec 24 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
基于Python实现一个春节倒计时脚本
Jan 22 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
多个iframe自动调整大小的问题
2006/09/18 Javascript
页面使用密码保护代码
2013/04/10 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
python 实现的车牌识别项目
2021/01/25 Python
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
眼镜促销方案
2014/03/15 职场文书
销售主管竞聘书
2014/03/31 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
留学推荐信中文范文
2015/03/26 职场文书
英语导游欢迎词
2015/09/30 职场文书