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 encode和decode的妙用
Sep 02 Python
python快速排序代码实例
Nov 21 Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
Python探索之Metaclass初步了解
Oct 28 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
运行django项目指定IP和端口的方法
May 14 Python
python简单区块链模拟详解
Jul 03 Python
详解用Python为直方图绘制拟合曲线的两种方法
Aug 21 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 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三维数组去重(示例代码)
2013/11/26 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
window.location.hash 使用说明
2010/11/08 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
Django中对数据查询结果进行排序的方法
2015/07/17 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
python实现数据图表
2017/07/29 Python
python队列queue模块详解
2018/04/27 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
实习报告评语
2014/04/26 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
优秀党员事迹材料
2014/12/18 职场文书
入党个人总结范文
2015/03/02 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
浅谈Python协程asyncio
2021/06/20 Python
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python