分治算法:分治算法(Divide ans conquer …
分治算法(Divide ans conquer ,D&C)前言我之前看算法图解这本书,看他讲分治算法有一个很好的例子,我觉得这个例子让我理解分治的思想。 有一个农场主,想把一块长为168m,宽为64m的土地均匀的分成方块,要求分出的方块尽可能的最大。 1.首先的想法就是想划分一个最大的方块看行不行,以宽64m为边长,肯定是最大的方块。但是这样会剩下 40m的土地无法分割,于是转换思路。 2.把剩下的土地(40*64),在细分,适用于这小块的地方的最大的块也是适用于整块土地。后面这句话不好理解,于是我去查阅了欧几里得算法。 欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。直接看下面的例子就懂了: 先看几个概念: 公约数,亦称“公因数”。它是指能同时整除几个整数的数。 公约数中最大的称为最大公约数 求104和40的最大公约数 1234...
Python单链表的表示:单链表
单链表单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。– 百度百科 python单链表的定义12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364class Node(object): """ 单链表的节点定义 """ def __init__(self, item): self.item = item # 表示数据元素 self.next = None # 表示指针class SingleLinkList(object): """ 头结点记录链表的长...
Scrapy的Spider类:scrapy的Spider类
scrapy的Spider类Spider:scrapy.Spider, 是所有 Spider 的基类,它是最基础的爬虫,所有的 spider 都会继承 scrapy.Spider。它提供了 start_requests() 的默认实现,读取并请求 spider 属性中的 start_urls,并根据返回的 response 调用 spider 中的 parse 方法。 spiders(Lib\site-packages\scrapy\spiders) 12345├── __init__.py├── crawl.py├── feed.py├── init.py└── sitemap.py 自定义爬虫类1234567891011import scrapyclass TemplateSpidersSpider(scrapy.Spider): name = 'template_spiders' allowed_domains = ['*'] start_urls = ['http://*/'] def ...
Scrapy的CrawlSpider类
scrapy的CrawlSpider类CrawlSpider:scrapy.spiders.CrawlSpider,规则爬虫,提供了一个新的属性 rules,该属性是一个包含一个或多个 Rule 对象的集合,每个 Rule 对爬取网站的动作定义了特定的规则。 spiders(Lib\site-packages\scrapy\spiders) 12345├── __init__.py├── crawl.py├── feed.py├── init.py└── sitemap.py 自定义爬虫类123456789101112from scrapy.spiders.crawl import CrawlSpider # 或者from scrapy.spiders import CrawlSpider,因为在__init__.py文件中以及帮你初始化导入了class TemplateSpidersSpider(CrawlSpider): name = 'template_spiders' allowed_domains = ['*'] ...
GitHub Actions + Hexo 博客自动部署
本文初稿写于 2020 年,当时使用 Travis CI。现改为在 GitHub Actions 中完成构建与部署;与 Travis 相比,令牌与仓库设置都在 GitHub 内完成即可。 GitHub Actions 简介GitHub Actions 是 GitHub 提供的持续集成与持续交付(CI/CD)能力:在推送代码、发起 PR 或定时等事件时,在云端虚拟机里执行你定义的步骤(检出代码、安装依赖、测试、部署等)。 持续集成持续集成(Continuous integration,CI)指团队成员频繁把改动合并进主干,每次合并都通过自动化构建尽早发现问题。博客场景下即:在源分支推送后自动生成静态文件并发布到 GitHub Pages。 创建分支与通用注意建立一个分支(例如 blog-source),把 Hexo 源文件放在该分支下;不要提交 node_modules、public(依赖以 package.json / package-lock.json 为准在 CI 里 npm ci)。日常写博客请只往该源分支推送。 子目录里不要误带嵌套的 .git(例...
什么是爬虫:工程视角与 IO 基础全览
1. 爬虫是什么?网络爬虫是一种自动化程序,按照规则从互联网抓取、解析并存储目标数据。 工程定义: 输入:起始 URL + 爬取规则 输出:结构化数据(JSON、数据库、CSV) 核心目标:在合法、稳定、高效、可扩展的前提下,获取所需数据。 大神通俗版:看得见的数据,我都能自动化拿下来——但要拿得稳、拿得快、不被封。 实际项目中,80% 的爬虫工作不是「抓数据」,而是应对反爬、保证稳定性、处理规模。 2. Web 基础与 HTTP 请求(必备工程知识)爬虫本质是网络 IO + 数据解析。 网页组成 HTML:内容结构(骨架) CSS:样式 JavaScript:动态渲染(现代网站大量内容靠 JS 生成) 传输协议 HTTP/HTTPS(重点掌握状态码、Headers、Cookies、Session) TCP 三次握手、四次挥手(理解连接管理) URL 组成与解析协议://域名:端口/路径?参数 工程建议: 优先抓包分析(浏览器 DevTools Network 面板),寻找 JSON API 接口,比解析 HTML 往往更快。 尊重 robots.txt 和...
Hexo 入门:1.安装环境
查看官方的文档https://hexo.io/zh-cn/docs/index.html win10系统1.安装环境 Node.js (Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本) Git 2.安装所需的模块 1npm install -g hexo-cli 1234567安装以后,可以使用以下两种方式执行 Hexo:npx hexo <command>将 Hexo 所在的目录下的 node_modules 添加到环境变量之中即可直接使用 hexo <command>:echo 'PATH="$PATH:./node_modules/.bin"' >> ~/.profile 3.构建1hexo init <folder> 12cd <folder>npm install _config.yml 网站的 [配置](https://hexo.io/zh-cn/docs/configuration) 信息,您可以在此配置大部分的参数。...