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深入学习之装饰器
Aug 31 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
彻底理解Python中的yield关键字
Apr 01 Python
python基于Selenium的web自动化框架
Jul 14 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
浅析Python 多行匹配模式
Jul 24 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之第五天
2006/10/09 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
python实现简单温度转换的方法
2015/03/13 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
python实现串口通信的示例代码
2020/02/10 Python
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
公积金单位接收函
2014/01/11 职场文书
消防安全汇报材料
2014/02/08 职场文书
校长寄语大全
2014/04/09 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
军训结束新闻稿
2015/07/17 职场文书
党员公开承诺书2016
2016/03/24 职场文书
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏