import requests
import os
from lxml import html
import timedef get_title_url(tree):'''一级  获取标题'''# 史书典籍# 格式:/book/sanguoyanyi.htmlHistory_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_listdef get_article_url(tree):'''二级  获取文章标题'''# 三国演义典籍# 格式:/book/sanguoyanyi/1.htmlbook_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_listdef get_article(tree):'''三级  获取文章内容'''# 第一回·宴桃园豪杰三结义  斩黄巾英雄首立功# 格式:/book/sanguoyanyi/1.htmlarticle_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 treedef save_mkdir(two):'''三级  保存文章夹'''# 一级文件夹if os.path.exists('史书典籍'):passelse:os.mkdir('史书典籍')# 二级文件夹if os.path.exists('史书典籍/'+ two):passelse:os.mkdir('史书典籍/'+ two)def police_2(a):'''二级中断检测'''b = Noneif os.path.exists('史书典籍/police_2.txt'):with open('史书典籍/police_2.txt', 'r') as f:b = f.read()f.close()if b is None:return Trueelif b is '':return Trueif a < int(b):return False# 写入并返回Truewith open('史书典籍/police_2.txt', 'w') as f:f.write(str(a))f.close()return Truedef police_3(a):'''三级中断检测'''b = Noneif os.path.exists('史书典籍/police_3.txt'):with open('史书典籍/police_3.txt', 'r') as f:b = f.read()f.close()if b is None:return Trueelif b is '':return Trueif a < int(b):return False# 写入并返回Truewith open('史书典籍/police_3.txt', 'w') as f:f.write(str(a))f.close()return Truedef 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:continuetime.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()

转载于:https://www.cnblogs.com/person1-0-1/p/11316076.html

python-爬虫-史书典籍相关推荐

  1. python爬虫lxml解析爬取诗词名句

    原创:仅用于学习Python爬虫,请勿商业或恶意爬取数据 文件夹和文件都是程序创建,我只爬了这些数据用于测试 仅用了两个for循环,并没有搞的太难(函数),适合新手操练,有大量注释易于理解 from ...

  2. Python爬虫实战(02)—— 爬取诗词名句三国演义

    目录 前言 一.准备工作 二.爬取步骤 1. 引入库 2. 发送请求拿到页面 3.定位到章节URL 4.拼接URL拿到章节内容 5.存储各章节内容 完整代码 前言 这次爬虫任务是从诗词名句上爬取< ...

  3. 连享会-Python爬虫与文本分析专题 (2019.5.17-19)

    连享会-Python爬虫与文本分析专题研讨班 文章目录 连享会-Python爬虫与文本分析专题研讨班 1. 课程概览 2. 嘉宾简介 3. 授课内容 3.1 课程介绍 为什么要学爬虫和文本分析? 为什 ...

  4. 关于Python爬虫原理和数据抓取1.1

    为什么要做爬虫? 首先请问:都说现在是"大数据时代",那数据从何而来? 企业产生的用户数据:百度指数.阿里指数.TBI腾讯浏览指数.新浪微博指数 数据平台购买数据:数据堂.国云数据 ...

  5. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  6. python爬虫抓取信息_python爬虫爬取网上药品信息并且存入数据库

    我最近在学习python爬虫,然后正好碰上数据库课设,我就选了一个连锁药店的,所以就把网上的药品信息爬取了下来. 1,首先分析网页 2,我想要的是评论数比较多的,毕竟好东西大概是买的人多才好.然后你会 ...

  7. python爬虫案例_推荐上百个github上Python爬虫案例

    现在学生都对爬虫感兴趣,这里发现一些好的github开源的代码,分享给各位 1.awesome-spider 该网站提供了近上百个爬虫案例代码,这是ID为facert的一个知乎工程师开源的,star6 ...

  8. Python培训分享:python爬虫可以用来做什么?

    爬虫又被称为网络蜘蛛,它可以抓取我们页面的一些相关数据,近几年Python技术的到来,让我们对爬虫有了一个新的认知,那就是Python爬虫,下面我们就来看看python爬虫可以用来做什么? Pytho ...

  9. 玩转 Python 爬虫,需要先知道这些

    作者 | 叶庭云 来源 | 修炼Python 头图 | 下载于视觉中国 爬虫基本原理 1. URI 和 URL URI 的全称为 Uniform Resource Identifier,即统一资源标志 ...

  10. 买不到口罩怎么办?Python爬虫帮你时刻盯着自动下单!| 原力计划

    作者 | 菜园子哇 编辑 | 唐小引 来源 | CSDN 博客 马上上班了,回来的路上,上班地铁上都是非常急需口罩的. 目前也非常难买到正品.发货快的口罩,许多药店都售完了. 并且,淘宝上一些新店口罩 ...

最新文章

  1. 一个想法--开发与业务,我们互相依赖
  2. 18python入门到精通_《Python从入门到精通(60课)》18 序列类型之元组
  3. Bugku 杂项(三)
  4. 老的消息中间件投递失败的类型值_图文结合了解一下Java消息中间件的概述
  5. Google: 如何做code review?
  6. Cordova内部http请求的proxy实现原理
  7. MySQL数据库如何管理与维护_mysql数据库的管理与维护
  8. grep 命令的 12 个实例
  9. Adobe illustrator 排版后图形导出这样的Tiff/PNG - 连载 3
  10. es max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
  11. Red Hat EnterPrise Linux 5.4下web服务器的综合使用(普通站点、虚拟主机、安全性、...
  12. 运动目标跟踪(十五)--WMIL跟踪
  13. (二)建筑物多边形化简系列——多边形点数化简
  14. waitpid最后以一个参数设为0_变频器用远传压力表控制恒压供水参数设置
  15. 2021年将最流行的10大JavaScript库
  16. dedecms源码分析(第一部分)
  17. 赢在简单 IBM助力新疆中小企业发展
  18. hive的beeline使用
  19. 我来侃手机--连载二之四十岁的女人,风韵犹存
  20. macM1芯片通过第三方安装php

热门文章

  1. 检查手机是否安装某一app
  2. 解决iOS微信(分身版)6.3.9无法重装的问题
  3. 借百度前端学院JS任务二总结JS数组(一)
  4. i7-1060NG7怎么样?相当于什么水平
  5. 手机照片怎么做成视频?手把手教你,3步快速完成动感效果
  6. BSL211SP INFINEON 英飞凌
  7. 【一天时间|JavaScript基础】原型和原型链
  8. JAVA 电子邮箱格式验证,使用正则表达式
  9. B站涨粉|周涨粉超60w,B站三农内容赛道迎来新黑马
  10. 麦芒4全网通固件降级教程