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. tar:文件打包归档

    造冰箱的大熊猫@cnblogs 2018/12/24 1.什么是tar 1.1.tar tar命令将指定的文件.文件夹打包(存储)为一个文件(归档文件,archive file).tar将被归档文件以 ...

  2. HDU4135 Co-prime

    题目链接:Click here Solution: 简单容斥,我们先把\(N\)分解质因数,我们知道\(1\sim x\)里能整除\(i\)的数的个数为\(\lfloor \frac{x}{i} \r ...

  3. P1598 垂直柱状图

    输入格式: 四行字符,由大写字母组成,每行不超过100个字符 输出格式: 由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的.在任何一行末尾不要打印不需要的多余空格.不要打印任何空行 ...

  4. JavaWeb_ Servlet API(中文)

       Java Servlet 中文API Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包.这两个软件包的同时存在使得Java Se ...

  5. docker安装中文版Gitlab服务端

    1.pull中文版镜像: docker pull beginor/gitlab-ce:11.3.0-ce.0 2.创建目录: 通常会将 GitLab 的配置 (etc) . 日志 (log) .数据 ...

  6. $\LaTeX$数学公式大全4

    $4\ Standard\ Function\ Names$将英文转化为罗马文$\arccos$ \arccos$\cos$ \cos$\csc$ \csc$\exp$ \exp$\ker$ \ker ...

  7. 使用SpringBoot校验客户端传来的数据

    前端的数据校验都是辣鸡!后端天下第一! 很多时候我们后端需要前端传数据过来, 比如注册, 修改用户名, 修改密码等等.很可能有些用户就喜欢搞事, 喜欢发一大堆乱七八糟的数据到后端来, 甚至有些前端老哥 ...

  8. leetcode题目3.无重复字符的最长子串(中等)

    题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "a ...

  9. 实验四《Android程序设计》实验报告封面

    实验四<Android程序设计>实验报告封面 课程:Java程序设计 班级:1753班 姓名:许钰玮 学号:20175329 指导教师:娄嘉鹏 实验日期:2019年5月13日 实验时间:1 ...

  10. Python定时框架 Apscheduler 详解【转】

    内容来自网络: https://www.cnblogs.com/luxiaojun/p/6567132.html 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序, ...