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实现CET查分的方法
Mar 10 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
六个窍门助你提高Python运行效率
Jun 09 Python
python中的字典使用分享
Jul 31 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
mac 安装python网络请求包requests方法
Jun 13 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
pandas 选取行和列数据的方法详解
Aug 08 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
yii实现级联下拉菜单的方法
2014/07/31 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
Visual Studio code 配置Python开发环境
2020/09/11 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
财务会计专业推荐信
2013/11/30 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
学生偷窃检讨书
2014/09/25 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
单位委托书
2014/10/15 职场文书
信用卡工作证明范本
2015/06/19 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python