1. # 需要的库
  2. import requests
  3. from lxml import etree
  4. from multiprocessing import Pool
  5. import os
  6. # 请求头
  7. headers = {
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
  9. }
  10. # 创建存储路径
  11. pathname = './全书网/'
  12. if not os.path.exists(pathname):
  13. os.mkdir(pathname)
  14. # 获取书籍列表
  15. def get_booklist(url):
  16. try:
  17. response = requests.get(url=url,headers=headers)
  18. etrees = etree.HTML(response.text)
  19. sum = etrees.xpath('//a[@class="last"]/text()')[0]
  20. booklist = etrees.xpath('//ul[@class="seeWell cf"]/li')
  21. book_list = []
  22. for books in booklist:
  23. book = books.xpath('./a/@href')[0]
  24. book_list.append(book)
  25. pool.map(get_book,book_list)
  26. urls = ['http://www.quanshuwang.com/list/3_{}.html'.format(i) for i in range(2,int(sum)+1)]
  27. pool.map(get_booklist,urls)
  28. except Exception:
  29. print('get_booklist failed')
  30. # 获取具体书籍
  31. def get_book(url):
  32. try:
  33. response = requests.get(url=url, headers=headers)
  34. etrees = etree.HTML(response.content.decode("gb18030"))
  35. book_name = etrees.xpath('//div[@class="b-info"]/h1/text()')[0]
  36. if os.path.exists(pathname+book_name+'.txt'):
  37. print(book_name+'.书籍已存在,如需重新下载请删除原文件')
  38. return None
  39. book = etrees.xpath('//div[@class="b-oper"]/a/@href')[0]
  40. get_mulu(book)
  41. except Exception:
  42. print('get_book failed')
  43. # 获取书籍目录
  44. def get_mulu(url):
  45. try:
  46. response = requests.get(url=url, headers=headers)
  47. etrees = etree.HTML(response.text)
  48. book = etrees.xpath('//div[@class="clearfix dirconone"]/li')
  49. for i in book:
  50. book = i.xpath('./a/@href')[0]
  51. get_content(book)
  52. except Exception:
  53. print('get_mulu failed')
  54. # 获取并写入书籍内容
  55. def get_content(url):
  56. try:
  57. response = requests.get(url=url, headers=headers)
  58. etrees = etree.HTML(response.content.decode("gb18030"))
  59. title = etrees.xpath('//a[@class="article_title"]/text()')[0]
  60. zhangjie = etrees.xpath('//strong[@class="l jieqi_title"]/text()')[0]
  61. contents = etrees.xpath('//div[@class="mainContenr"]/text()')
  62. content = ''.join(contents)
  63. with open(pathname+title+'.txt','a+',encoding='utf-8') as f:
  64. f.write(zhangjie+'\n\n'+content+'\n\n')
  65. print('正在下载:',zhangjie)
  66. except Exception:
  67. print('get_content failed')
  68. # 程序入口
  69. if __name__ == '__main__':
  70. url = 'http://www.quanshuwang.com/list/3_1.html'
  71. # 创建进程池
  72. pool = Pool()
  73. # 启动程序
  74. get_booklist(url)

控制台输出

  1. 正在下载: 节目录 第三十四章 不眠的天堂
  2. 正在下载: 节目录 第四十四章 :耳光
  3. 正在下载: 节目录 046 找到变异元晶
  4. 正在下载: 章节目录 第二十八章 修路优惠
  5. 正在下载: 节目录 第四十五章 :憋屈
  6. 正在下载: 节目录 047 至宝得手
  7. 正在下载: 章节目录 第二十九章 猜鱼
  8. 正在下载: 节目录 048 凤凰涅槃,浴火重生。
  9. 正在下载: 章节目录 第三十章 养猪场
  10. 正在下载: 节目录 第四十六章 :酣畅淋漓
  11. 正在下载: 节目录 049 上等天赋资质
  12. 正在下载: 章节目录 第三十一章 上鬼身
  13. 正在下载: 节目录 050 元力神兵
  14. 正在下载: 节目录 第四十七章 :舵主之位
  15. 正在下载: 节目录 第三十五章 黑暗
  16. 正在下载: 章节目录 第三十二章 吓死马有钱
  17. 正在下载: 节目录 第三十六章 商议
  18. 正在下载: 节目录 051 天级上品龙隐术
  19. 正在下载: 节目录 第三十七章 寻觅
  20. 正在下载: 章节目录 第三十三章 再遇李三
  21. 正在下载: 章节目录 第三十四章 借了一百万

打开文件夹查看是否下载成功

done。

xpath+多进程爬取全书网纯爱耽美类别的所有小说。的更多相关文章

  1. xpath+多进程爬取八零电子书百合之恋分类下所有小说。

    代码 # 需要的库 import requests from lxml import etree from multiprocessing import Pool import os # 请求头 he ...

  2. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  3. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  4. 使用Xpath+多进程爬取诗词名句网的史书典籍类所有文章。update~

    上次写了爬取这个网站的程序,有一些地方不完善,而且爬取速度较慢,今天完善一下并开启多进程爬取,速度就像坐火箭.. # 需要的库 from lxml import etree import reques ...

  5. xpath+多进程爬取网易云音乐热歌榜。

    用到的工具,外链转换工具 网易云网站直接打开源代码里面并没有对应的歌曲信息,需要对url做处理, 查看网站源代码路径:发现把里面的#号去掉会显示所有内容, 右键打开的源代码路径:view-source ...

  6. 使用scrapy框架爬取全书网书籍信息。

    爬取的内容:书籍名称,作者名称,书籍简介,全书网5041页,写入mysql数据库和.txt文件 1,创建scrapy项目 scrapy startproject numberone 2,创建爬虫主程序 ...

  7. 利用xpath爬取招聘网的招聘信息

    爬取招聘网的招聘信息: import json import random import time import pymongo import re import pandas as pd impor ...

  8. Scrapy爬虫(5)爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...

  9. Python爬虫项目--爬取自如网房源信息

    本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...

随机推荐

  1. 使用自定义注解和AOP管理shiro权限

    一.场景 在使用shiro框架的时候,遇到了这样的需求:本系统有多个用户,每个用户分配不同角色,每个角色的权限也不一致.比如A用户拥有新闻列表的增删改查权限,而B用户只有查看新闻列表的权限,而没有删除 ...

  2. linux驱动开发学习二:创建一个阻塞型的字符设备

    在Linux 驱动程序中,可以使用等待队列来实现阻塞进程的唤醒.等待队列的头部定义如下,是一个双向列表. struct list_head { struct list_head *next, *pre ...

  3. jstree:重新加载数据集,刷新树

    true:表示获得一个已经存在的jstree实例 $('#tree').jstree(true).destroy();// 清除树节点 // 重新设置树的JSON数据集 $('#tree').jstr ...

  4. 问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……

    最近,在打开下载的office文档(包括word.excel.ppt等)时候,总是无法直接打开,错误提示如下: 无论是邮件中的还是别的网站下载的,均提示该错误.后来搜索相关资料发现,修改其文件属性即可 ...

  5. Spring Boot 的Logback

    Spring Boot 默认使用Logback记录日志 Spring Boot starter 都会默认引入spring-boot-starter-logging,不需要再引入 日志级别从高到低:TR ...

  6. mysql 5.7开启sql日志的配置

    今天把数据库换成了5.7的,想查通过sql日志定位下问题,但是发现和以前的方式不一样了,特意记录下来 通过开启mysql的日志功能,可以记录所有别执行过的sql语句记录,便于维护数据库数据. 在数据库 ...

  7. 在Django中显示操作数据库的语句

    需要在配置中加上这个 LOGGING = { 'version':1, 'disable_existing_loggers':False, 'handlers':{ 'console':{ 'leve ...

  8. PHP写接口需要注意的问题

    PHP写接口需要注意的问题方法前面建议写传过来的参数 1 防止xss攻击2 防止sql语句注入3 sign签名验证4 不经常更新的加索引和缓存 app请求时候 参数都要加urlencode 防止参数带 ...

  9. 配置git diff和git merge使用的第三方工具

    一般在运行git merge branchName后,git 如果提示了merger冲突,然后运行git mergetool.Git提示冲突后,运行git mergetool  --tool-help ...

  10. docker 学习总结

    Docker 是一个容器工具,提供虚拟环境.解决了软件的环境配置和依赖问题,让软件可以带环境和依赖的安装. Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容 ...