Scrapy官方文档爬取
最近想爬点啥东西看看,
所以接着学习了一点Scrapy,
学习过程中就试着去爬取Scrapy的官方文档作为练习之用,
现在已经基本完成了。
实现原理:
以 overview.html 为起点,通过 response.selector.xpath 获取到 next page路径下载到本地。
最终的结果是下载了一份完成的Scrapy的官方离线文档,
因为页面之间采用的是相对路径。
完整代码如下:
import scrapy,os class ScrapyDocSpider(scrapy.Spider):
name = "scrapy_doc"
urls = []
inited = False def start_requests(self):
if not os.path.exists(self.name):
os.makedirs(self.name)
self.rootPage = ""
yield scrapy.Request(url="https://doc.scrapy.org/en/1.5/intro/overview.html", callback=self.parse) def parse(self, response):
self.log("LOADED:"+response.url)
last_index = len(response.url) - response.url[::-1].index("/")
self.rootPage = response.url[:last_index]
page = response.url.split("/")[-1]
filename = self.name+"/"+page
# self.log("parseSubPage:"+filename)
with open(filename, "wb") as f:
f.write(response.body)
f.close()
self.log("Save file %s" % filename) pages = response.selector.xpath('//div/section/div/div/footer/div/a[@rel="next"]/@href').extract()
if len(pages) != 0 :
next_page = str(pages[0])
self.log("ROOT PAGE")
self.log(self.rootPage)
self.log(next_page)
self.log(type(next_page))
if next_page.startswith(".") or next_page.startswith("/") :
next_page = self.rootPage+next_page
yield response.follow(url=next_page,callback=self.parse,errback=self.errcallback) def errcallback(self, failure):
self.logger.error(failure)
爬取到的结果如下:


Scrapy官方文档爬取的更多相关文章
- Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记
1 需求分析 想要一个能爬取拉钩网职位详情页的爬虫,来获取详情页内的公司名称.职位名称.薪资待遇.学历要求.岗位需求等信息.该爬虫能够通过配置搜索职位关键字和搜索城市来爬取不同城市的不同职位详情信息, ...
- scrapy spider官方文档
Spiders Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...
- Hui之Hui.js 官方文档
基础 // 判断值是否是指定数据类型 var result = hui.isTargetType("百签软件", "string"); //=>true ...
- Spark Streaming官方文档学习--上
官方文档地址:http://spark.apache.org/docs/latest/streaming-programming-guide.html Spark Streaming是spark ap ...
- TestNG官方文档中文版(2)-annotation(转)
1. 介绍 TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的 ...
- OpenGL ES着色器语言之操作数(官方文档第五章)
OpenGL ES着色器语言之操作数(官方文档第五章) 5.1操作数 OpenGL ES着色器语言包含如下操作符. 5.2数组下标 数组元素通过数组下标操作符([ ])进行访问.这是操作数组的唯一操作 ...
- OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)和varying,uniform,attribute修饰范围
OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章) 所有变量和函数在使用前必须声明.变量和函数名是标识符. 没有默认类型,所有变量和函数声明必须包含一个声明类型以及可选的修饰符. ...
- Spring Cloud官方文档中文版-Spring Cloud Config(上)
官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-feign 文中例子我做了一些测试在:http ...
- cassandra 3.x官方文档(5)---探测器
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- cassandra 3.x官方文档(7)---内部原理之如何读写数据
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
随机推荐
- Docker安装MS SQL Server并使用Navicat远程连接
MS SQL Server简介 Microsoft SQL Server(简称SQL Server)是由微软公司开发的关系数据库管理系统,它是一个功能强大.性能卓越的企业级数据库平台,用于存储和处理大 ...
- Kubernetes(k8s)服务service:service的发现和service的发布
目录 一.系统环境 二.前言 三.Kubernetes service简介 四.使用hostPort向外界暴露应用程序 4.1 创建deploy 4.2 使用hostPort向外界暴露pod的端口 五 ...
- JavaWeb入门必备JavaEE规范!
前言 对于学习 Java 的同学,大都是 Web 方向的.我们学习 JavaWeb 开发肯定是一个循序渐进的过程,学习前有一些前置知识要掌握,比如 JavaSE 相关知识,HTML.CSS.JavaS ...
- debug.exe的使用
debug.exe的使用 debug.exe 是 Windows 操作系统自带的一个命令行调试工具,用于在 DOS 环境下进行汇编语言级别的调试操作.它可以让程序员以来自底层的方式逐步执行代码并检查每 ...
- CKS 考试题整理 (14)-启用API Server认证
Context 由 kubeadm 创建的cluster 的kubernetes API 服务器,出于测试目的, 临时配置允许未经身份验证和未经授权的访问,授予匿名用户 cluster-admin 的 ...
- 使用EasyExcel对excel数据进行相似度判断
@Data public class ExeclDto { /** * execl表 */ private String filename; /** * 需要匹配的工作表名 */ private St ...
- 如何取消Blazor Server烦人的重新连接?
如何取消Blazor Server烦人的重新连接? 相信很多Blazor的用户在开发内部系统上基本上都选择速度更快,加载更快的Blazor Server模式. 但是Blazor Server由于是Si ...
- 第四章 VIVIM编辑器
1. 是什么 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器. VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器. 2. 一般模式 以 vi/v ...
- 利用代码生成工具快速生成基于SqlSugar框架的Winform界面项目
我们接触一个新事物的时候,如果一个事物能够给我们带来非常直观的感官认识,那么我们就很容易接受,反之可能需要很长时间的潜移默化的了解认识才能接受.万物化繁为简,透过本质看表象,往往也是一个认知迭代深入的 ...
- Jmeter压测实战:Jmeter二次开发之自定义函数
1 前言 Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具,具备轻量.高扩展性.分布式等特性.Jmeter已支持实现随机数.计数器.时间戳.大小写转换.属性校验等多种函数,方便使用 ...