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判断、获取一张图片主色调的2个实例
Apr 10 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
python调用百度语音REST API
Aug 30 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
python定义类self用法实例解析
Jan 22 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
使用python创建股票的时间序列可视化分析
Mar 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
2019十大人气国漫
2020/03/13 国漫
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
JS中min函数实例讲解
2019/02/18 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
javascript实现简单页面倒计时
2021/03/02 Javascript
python和opencv实现抠图
2018/07/18 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python3 re返回形式总结
2020/11/20 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
大学生村官演讲稿
2014/04/25 职场文书
电工技术比武方案
2014/05/11 职场文书
杨善洲电影观后感
2015/06/04 职场文书