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操作mysql中文显示乱码的解决方法
Oct 11 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
python模块之time模块(实例讲解)
Sep 13 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
基于数据归一化以及Python实现方式
Jul 11 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
如何理解Python中包的引入
May 29 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
python编程的核心知识点总结
Feb 08 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 Python
Python学习开发之图形用户界面详解
Aug 23 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投票系统防刷票判断流程分析
2012/02/04 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
laravel学习教程之存取器
2016/07/30 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
Python 命令行参数sys.argv
2008/09/06 Python
python实现排序算法
2014/02/14 Python
python实现的重启关机程序实例
2014/08/21 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
从python读取sql的实例方法
2020/07/21 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
英国网上花店:Bunches
2016/11/29 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
后勤人员岗位职责
2013/12/17 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
淘宝活动策划方案
2014/02/06 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
故宫的导游词
2015/01/31 职场文书
学生逃课检讨书
2015/02/17 职场文书
加班费申请报告
2015/05/15 职场文书
工作收入证明模板
2015/06/12 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL