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中条件选择和循环语句使用方法介绍
Mar 13 Python
Python代码调试的几种方法总结
Apr 15 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
python爬虫使用cookie登录详解
Dec 27 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
Python的高阶函数用法实例分析
Apr 11 Python
详解python中的模块及包导入
Aug 30 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
php中转义mysql语句的实现代码
2011/06/24 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
js post提交调用方法
2014/02/12 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
老生常谈javascript中逻辑运算符&&和||的返回值问题
2017/04/13 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python3生成随机数实例
2014/10/20 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
python实现TCP文件传输
2020/03/20 Python
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
个人事迹材料范文
2014/12/29 职场文书
市场部岗位职责
2015/02/12 职场文书
军训新闻稿范文
2015/07/17 职场文书
导游词之西安骊山
2019/12/20 职场文书