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 判断一个进程是否存在
Apr 09 Python
python 解析XML python模块xml.dom解析xml实例代码
Feb 07 Python
使用python统计文件行数示例分享
Feb 21 Python
python中from module import * 的一个坑
Jul 20 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
python实现屏保计时器的示例代码
Aug 08 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
python绘制玫瑰的实现代码
Mar 02 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
python中的django是做什么的
Jul 31 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 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中使用curl_init函数的说明
2010/11/02 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
书单|人生苦短,你还不用python!
2017/12/29 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
详解python的super()的作用和原理
2020/10/29 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
网络工程师的自我评价
2013/10/02 职场文书
行政前台岗位职责
2013/12/04 职场文书
大学军训自我鉴定
2013/12/15 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
《手指教学》反思
2014/02/14 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
怀念母亲教学反思
2014/04/28 职场文书
职工小家建设活动方案
2014/08/25 职场文书