import requests
import os
from lxml import html
import time def get_title_url(tree):
'''一级 获取标题'''
# 史书典籍
# 格式:/book/sanguoyanyi.html
History_book_url_list = tree.xpath("//div[@class='index-li'][3]/ul/li/a/@href")
# 格式:三国演义
History_book_name_list = tree.xpath("//div[@class='index-li'][3]/ul/li/a/text()")
return History_book_url_list,History_book_name_list def get_article_url(tree):
'''二级 获取文章标题'''
# 三国演义典籍
# 格式:/book/sanguoyanyi/1.html
book_url_list = tree.xpath("//div[@class='book-mulu']/ul/li/a/@href")
# 格式:第一回·宴桃园豪杰三结义 斩黄巾英雄首立功
book_name_list = tree.xpath("//div[@class='book-mulu']/ul/li/a/text()")
return book_url_list,book_name_list def get_article(tree):
'''三级 获取文章内容'''
# 第一回·宴桃园豪杰三结义 斩黄巾英雄首立功
# 格式:/book/sanguoyanyi/1.html
article_list = tree.xpath("//div[@class='chapter_content']/p/text()")
return ''.join(article_list) def get_request(url,headers):
'''获取页面'''
response = requests.get(url=url,headers=headers)
tree = html.fromstring(response.text)
return tree def save_mkdir(two):
'''三级 保存文章夹'''
# 一级文件夹
if os.path.exists('史书典籍'):
pass
else:
os.mkdir('史书典籍')
# 二级文件夹
if os.path.exists('史书典籍/'+ two):
pass
else:
os.mkdir('史书典籍/'+ two) def police_2(a):
'''二级中断检测'''
b = None
if os.path.exists('史书典籍/police_2.txt'):
with open('史书典籍/police_2.txt', 'r') as f:
b = f.read()
f.close()
if b is None:
return True
elif b is '':
return True
if a < int(b):
return False
# 写入并返回True
with open('史书典籍/police_2.txt', 'w') as f:
f.write(str(a))
f.close()
return True def police_3(a):
'''三级中断检测'''
b = None
if os.path.exists('史书典籍/police_3.txt'):
with open('史书典籍/police_3.txt', 'r') as f:
b = f.read()
f.close()
if b is None:
return True
elif b is '':
return True
if a < int(b):
return False
# 写入并返回True
with open('史书典籍/police_3.txt', 'w') as f:
f.write(str(a))
f.close()
return True def main():
'''主函数'''
# 根路由
root = 'http://www.shicimingju.com'
# 头部
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'
} # 获取root页面
tree1 = get_request(root,headers)
# 获取一级名字和路由
History_book_url_list, History_book_name_list = get_title_url(tree1)
# 获取二级页面
for i in range(len(History_book_url_list)):
if police_2(i) is False:
continue
# 二级路由
url2 = root + History_book_url_list[i]
print("爬取>>>"+History_book_name_list[i]+'开始')
tree2 = get_request(url2,headers)
# 获取二级名字和路由
book_url_list,book_name_list = get_article_url(tree2)
# 文章夹保存
save_mkdir(History_book_name_list[i])
# 下载文章
for j in range(len(book_url_list)):
if police_3(j) is False:
continue
time.sleep(1)
# 三级路由
url3 = root + book_url_list[j]
print("爬取:" + book_name_list[j])
# 文章
tree3 = get_request(url3, headers)
txt = get_article(tree3)
# 文章标题
txt_name = book_name_list[j]
# 文章保存
file_path = '史书典籍/{}/{}.txt'.format(History_book_name_list[i],(txt_name.replace(' ','')).replace('·',''))
with open(file_path,'w',encoding='utf-8') as f:
f.write(txt)
f.close()
print("爬取>>>" + History_book_name_list[i] + '结束') if __name__ == '__main__':
main()

python-爬虫-史书典籍的更多相关文章

  1. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  2. python爬虫成长之路(一):抓取证券之星的股票数据

    获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...

  3. python爬虫学习(7) —— 爬取你的AC代码

    上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...

  4. python爬虫学习(6) —— 神器 Requests

    Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...

  5. 批量下载小说网站上的小说(python爬虫)

    随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...

  6. python 爬虫(二)

    python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...

  7. Python 爬虫1——爬虫简述

    Python除了可以用来开发Python Web之后,其实还可以用来编写一些爬虫小工具,可能还有人不知道什么是爬虫的. 一.爬虫的定义: 爬虫——网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区 ...

  8. Python爬虫入门一之综述

    大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...

  9. [python]爬虫学习(一)

    要学习Python爬虫,我们要学习的共有以下几点(python2): Python基础知识 Python中urllib和urllib2库的用法 Python正则表达式 Python爬虫框架Scrapy ...

  10. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

随机推荐

  1. python3爬虫--shell命令的使用和firefox firebug获取目标信息的xpath

    scrapy version -v #该命令用于查看scrapy安装的相关组件和版本 一个工程下可创建多个爬虫 scrapy genspider rxmetal rxmetal.com scrapy ...

  2. 基于python的爬虫项目

    一.项目简介 1.1 项目博客地址 https://www.cnblogs.com/xsfa/p/12083913.html 1.2 项目完成的功能与特色 爬虫和拥有三个可视化数据分析 1.3 项目采 ...

  3. hdu 5761 Rower Bo 微分方程

    Rower Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  4. jeecg中自定义dialog,实现窗体的弹出

    自定一个dialog,在子窗体中写一个方法,然后通过iframe进行调取function createwindowoktext(title, addurl,width,height,oktext,ca ...

  5. ETL工具-KETTLE教程专栏1----术语和定义

    1-资源库 资源库是用来保存转换任务的,用户通过图形界面创建的的转换任务可以保存在资源库中.        资源库可以使多用户共享转换任务,转换任务在资源库中是以文件夹形式分组管理的,用户可以自定义文 ...

  6. JSP通过URL给Servlet传值

    jsp传数据: <a id="a1" href="" ></a> <script> $("#a1").a ...

  7. Oracle DBCA工具检测不到ASM磁盘组

    本例环境: 操作系统OEL 6.5 数据库版本:11.2.0.4 问题:DBCA建库的时候,检测不到ASM磁盘组 因素一:可能是在授权的时候执行了 chown –R 775 /u01/app等修改权限 ...

  8. 微信小程序_(组件)可拖动movable-view

    微信小程序movable-view组件官方文档 传送门 Learn 一.moveable-view组件 一.movable-view组件 direction:movable-view的移动方向,属性值 ...

  9. HDU 5791 Two ——(LCS变形)

    感觉就是最长公共子序列的一个变形(虽然我也没做过LCS啦= =). 转移方程见代码吧.这里有一个要说的地方,如果a[i] == a[j]的时候,为什么不需要像不等于的时候那样减去一个dp[i-1][j ...

  10. Keras学习笔记二:保存本地模型和调用本地模型

    使用深度学习模型时当然希望可以保存下训练好的模型,需要的时候直接调用,不再重新训练 一.保存模型到本地 以mnist数据集下的AutoEncoder 去噪为例.添加: file_path=" ...