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编码问题汇总
Sep 06 Python
Python如何快速实现分布式任务
Jul 06 Python
python密码错误三次锁定(实例讲解)
Nov 14 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
解决python opencv无法显示图片的问题
Oct 28 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
Python获取指定网段正在使用的IP
Dec 14 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 Python
Python学习之包与模块详解
Mar 19 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
Python中Random和Math模块学习笔记
2015/05/18 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
使用numba对Python运算加速的方法
2018/10/15 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
python issubclass 和 isinstance函数
2019/07/25 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
各营销点岗位职责范本
2014/03/05 职场文书
大学英语专业求职信
2014/06/21 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
员工试用期工作总结
2019/06/20 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书