# 需要的库
import requests
from lxml import etree
from multiprocessing import Pool
import os
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
# 创建存储路径
pathname = './全书网/'
if not os.path.exists(pathname):
os.mkdir(pathname)
# 获取书籍列表
def get_booklist(url):
try:
response = requests.get(url=url,headers=headers)
etrees = etree.HTML(response.text)
sum = etrees.xpath('//a[@class="last"]/text()')[0]
booklist = etrees.xpath('//ul[@class="seeWell cf"]/li')
book_list = []
for books in booklist:
book = books.xpath('./a/@href')[0]
book_list.append(book)
pool.map(get_book,book_list)
urls = ['http://www.quanshuwang.com/list/3_{}.html'.format(i) for i in range(2,int(sum)+1)]
pool.map(get_booklist,urls)
except Exception:
print('get_booklist failed')
# 获取具体书籍
def get_book(url):
try:
response = requests.get(url=url, headers=headers)
etrees = etree.HTML(response.content.decode("gb18030"))
book_name = etrees.xpath('//div[@class="b-info"]/h1/text()')[0]
if os.path.exists(pathname+book_name+'.txt'):
print(book_name+'.书籍已存在,如需重新下载请删除原文件')
return None
book = etrees.xpath('//div[@class="b-oper"]/a/@href')[0]
get_mulu(book)
except Exception:
print('get_book failed')
# 获取书籍目录
def get_mulu(url):
try:
response = requests.get(url=url, headers=headers)
etrees = etree.HTML(response.text)
book = etrees.xpath('//div[@class="clearfix dirconone"]/li')
for i in book:
book = i.xpath('./a/@href')[0]
get_content(book)
except Exception:
print('get_mulu failed')
# 获取并写入书籍内容
def get_content(url):
try:
response = requests.get(url=url, headers=headers)
etrees = etree.HTML(response.content.decode("gb18030"))
title = etrees.xpath('//a[@class="article_title"]/text()')[0]
zhangjie = etrees.xpath('//strong[@class="l jieqi_title"]/text()')[0]
contents = etrees.xpath('//div[@class="mainContenr"]/text()')
content = ''.join(contents)
with open(pathname+title+'.txt','a+',encoding='utf-8') as f:
f.write(zhangjie+'\n\n'+content+'\n\n')
print('正在下载:',zhangjie)
except Exception:
print('get_content failed')
# 程序入口
if __name__ == '__main__':
url = 'http://www.quanshuwang.com/list/3_1.html'
# 创建进程池
pool = Pool()
# 启动程序
get_booklist(url)

控制台输出

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

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

done。

最新文章

  1. eclipse直接访问数据库
  2. Hdu 2955 Robberies 0/1背包
  3. oracle11G使用DGbroker创建dg
  4. 发布自己的包到Nuget上
  5. 转贴 IT外企那点儿事完整版
  6. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5:compile
  7. Codeforces 543D. Road Improvement (树dp + 乘法逆元)
  8. WTL的核心机制
  9. java-成员变量的属性与成员函数的覆盖
  10. boost::function实践——来自《Beyond the C++ Standard Library ( An Introduction to Boost )》
  11. JS--Div中数据滚动到最后一条重新从头开始滚动
  12. 基于Qt的简单计算器
  13. NET Core 以及与 .NET Framework
  14. .net开发框架设计
  15. Java和Flex整合报错(二)
  16. VB.NET或C#报错:You must hava a license to use this ActiveX control.
  17. 【HDFS API编程】删除文件
  18. Swagger学习笔记
  19. ID3-C45-CART
  20. saltstack中如何实现多个master来管理minion

热门文章

  1. [转]How to Install Oracle Java 11 in Ubuntu 18.04/18.10
  2. win7安装 truffle
  3. 【Docker学习之五】Docker自定义镜像示例
  4. SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver
  5. mybatis一级二级缓存
  6. Java学习笔记——线程
  7. 改變帳款性質別以利排序沖帳才不會有問題,把19->17,把12->17
  8. vim打开多个文件、同时显示多个文件、在文件之间切换
  9. Parameter 0 of method sqlSessionTemplate in org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration required a single bean, but 2 were found:
  10. 关于django数据库迁移 以及显示未检测到更改的问题