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 04 Python
python连接mysql并提交mysql事务示例
Mar 05 Python
Python中input和raw_input的一点区别
Oct 21 Python
Python import用法以及与from...import的区别
May 28 Python
详解Python中的from..import绝对导入语句
Jun 21 Python
python使用tensorflow深度学习识别验证码
Apr 03 Python
TensorFlow实现随机训练和批量训练的方法
Apr 28 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
Python的collections模块真的很好用
Mar 01 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
May 25 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
php文件缓存方法总结
2016/03/16 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
深入研究React中setState源码
2017/11/17 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
ubuntu上安装python的实例方法
2019/09/30 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
大四学生毕业自荐信
2013/11/07 职场文书
机械工程师的岗位职责
2013/11/17 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
毕业赠语大全
2015/06/23 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python