不知是哪个号

It's never too old to learn.


  • Home

  • About

  • Tags

  • Categories

Flask-email 发送邮件

Posted on 2018-09-10 | In Python | Visitors:
Words count in article: 946 words | Reading time ≈ 3 minutes

爬虫项目运行在服务端后,我们无法及时了解项目是否正在运行,还是因为异常已经结束运行,考虑到项目的成本,因此我们在项目中增加了邮件功能,在项目运行结束、或者是异常结束的情况下通知开发者。下面简单介绍在项目中使用flask-mail来实现发送邮件的功能。

flask-mail的安装

1
2
pip3 install flask-email
注:本文使用的是python3环境
Read more »

Charles 使用

Posted on 2018-08-28 | In Tool | Visitors:
Words count in article: 200 words | Reading time ≈ 1 minutes

Charles 配置主要指的是手机端配置和mac端配置,本次操作配置使用手机为 iPhone6S P,电脑为 MAC。

手机端配置

手机端代理ip配置

打开 设置-无限局域网-配置代理(此处的服务器指的是电脑ip)按下图所示配置:

Read more »

Flask

Posted on 2018-07-20 | In Python | Visitors:
Words count in article: 1.8k words | Reading time ≈ 6 minutes

虚拟环境

虚拟环境的使用,可以避免你安装的python版本包与系统预装的发生冲突,为每个项目单独创建虚拟环境,可以保证应用只访问所在虚拟环境中包,从而保持全局解释器的干净整洁。虚拟环境的另一有优点是不需要管理员权限。

虚拟环境的创建

python3

python3的虚拟环境由python标准库中的venv包原生支持,创建虚拟环境的命令格式如下:

1
python3 -m venv venv

-m venv 选项的作用是以独立的脚本运行标准库中的venv包,后面的参数为虚拟环境名称(一般用venv)

Read more »

iOS 常用修饰词

Posted on 2018-06-21 | Visitors:
Words count in article: 1.5k words | Reading time ≈ 5 minutes

ARC下不指定任何属性关键字时,默认的关键字有哪些?

对于基本数据类型默认关键字是: atomic, readwrite, assign
对于普通的OC对象: atomic, readwrite, strong

@property, @synthesize, @dynamic

@property = interface + ivar(实例变量/成员变量) + setter/getter

@property 属性有两个关键词 @synthesize 和 @dynamic。默认是 @synthesize。

@synthesize 如果你没有手动实现 @setter 和 @getter 方法,编译器会自动为你加上这两个方法。

@dynamic 告诉编译器属性的 @setter 和 @getter 方法由用户自己实现,不自动生成。

Read more »

爬虫selenium

Posted on 2018-05-28 | In Python | Visitors:
Words count in article: 2.3k words | Reading time ≈ 13 minutes

以下设置基于 selenium==3.6.0

Selenium官方文档

谷歌浏览器设置

通用部分

1
2
3
4
5
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# chrome_options = webdriver.ChromeOptions()

常用设置

1
2
3
4
5
6
7
8
9
10
11
# 谷歌无头模式
chrome_options.add_argument('--headless')
# 禁用GPU硬件加速
chrome_options.add_argument('--disable-gpu')
# 禁止图片加载
chrome_options.add_argument('blink-settings=imagesEnabled=false')
# 设置 user-agent
chrome_options.add_argument('user-agent=' + user_agent)
# 设置代理
chrome_options.add_argument('proxy-server=' + '192.168.0.28:808')
driver = webdriver.Chrome(executable_path='../phantom/chromedriver', chrome_options=chrome_options)

Chrome可设置的参数列表List of Chromium Command Line Switches

Read more »

RunLoop

Posted on 2018-05-05 | In iOS | Visitors:
Words count in article: 2.8k words | Reading time ≈ 10 minutes

RunLoop概念

事件轮询

简单来说就是do-while循环,如下逻辑代码:

1
2
3
4
5
6
7
8
int main(int argc, char * argv[]) {        
BOOL running = YES;
do {
// 执行各种任务,处理各种事件
// ......
} while (running);
return 0;
}

这种do-while模型通常被称作事件轮询。例如 Node.js 的事件处理,Windows 程序的消息循环。OSX/iOS中的RunLoop也是该形式。

Read more »

Python 排序算法

Posted on 2018-03-20 | In Python | Visitors:
Words count in article: 2.4k words | Reading time ≈ 10 minutes

平均速度最快的排序算法是?

排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性
冒泡排序 O(n^2) O(n) O(n^2) O(1) 稳定
选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定
插入排序 O(n^2) O(n) O(n^2) O(1) 稳定
希尔排序 O(n*log(n))~O(n^2) O(n^1.3) O(n^2) O(1) 不稳定
堆排序 O(n*log(n)) O(n*log(n)) O(n*log(n)) O(1) 不稳定
归并排序 O(n*log(n)) O(n*log(n)) O(n*log(n)) O(n) 稳定
快速排序 O(n*log(n)) O(n*log(n)) O(n^2) O(1) 不稳定
基数排序 O(n+r) O(n+r) O(n+r) O(n+r) 稳定
Read more »

多线程编程-GCD

Posted on 2018-01-28 | In iOS | Visitors:
Words count in article: 4k words | Reading time ≈ 18 minutes

进程

定义:

1
2
3
在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程(process)。

--摘自《现代操作系统》
1
2
3
4
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

--摘自《百度百科》

在iOS系统中,开启一个应用就打开了一个进程。

Read more »

Runtime介绍

Posted on 2017-11-12 | In iOS | Visitors:
Words count in article: 4.5k words | Reading time ≈ 18 minutes

runtime简介

Objective-C 是一个动态语言,它扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库,它是面向对象和动态机制的基石。理解 OC 的 Runtime 机制可以帮我们更好的了解这个语言,还可以帮助我们从系统层面解决项目中的一些设计或技术问题。

Runtime有两个版本: Modern 和 Legacy。这两个版本的最大区别是当你更改一个类的实例变量的布局时,Legacy 版本需要重新编译它的子类。Modern版本运行在iOS 和 macOS 10.5 之后的 64 位程序中。在这之前的32位程序采用的是 Legacy 版本。

OC 从三种不同的层级上与 Runtime 系统进行交互:

1
2
3
1. 通过 OC 源代码
2. 通过 Foundation 框架的 NSObject 类定义的方法
3. 通过对 runtime 函数的直接调用

Runtime 源码

Read more »

scrapy

Posted on 2017-09-20 | In Python | Visitors:
Words count in article: 956 words | Reading time ≈ 3 minutes

scrapy 简介

scrapy 是一款 python 开发的 web 抓取框架,用于抓取 web 站点并从页面中提取结构化数据。scrapy 还可以用于数据挖掘、检测和自动化测试等。

scrapy 构成

scrapy 主要由以下组件组成,它们分别是调度器(Scheduler)、调度中间件(Scheduler Middewares)、下载器(Downloader)、下载器中间件(Downloader Middlewares)、爬虫(Spider)、爬虫中间件(Spider Middlewares)、管道(Item Pipeline) 和 Scrapy引擎(Scrapy Engine)。

Scrapy引擎(Scrapy Engine)

框架的核心部分,它控制着调度器、下载器、爬虫和管道,相当于计算机的 CPU,控制整个流程。

管道(Item Pipeline)

用于处理爬虫提取的实体,主要功能是验证和清除不需要的信息,并持久化信息。

爬虫(Spider)

用户自己定制的部分,用于从特定的网站中提取自己需要的信息。

爬虫中间件(Spider Middlewares)

介于scrapy引擎和爬虫之间的中间件,主要处理爬虫响应输入和请求输出。包含url重定向、url长度、请求深度、请求错误等处理。

下载器(Downloader)

用于高速的从网络上获取资源,是建立在 twisted 这个高效的异步模型上。

下载器中间件(Downloader Middlewares)

介于引擎和下载器之间的框架,主要是处理引擎和下载器之间的请求和响应,可以在此处配置ip代理迟、user_agent,cookie 等反爬策略。

调度器(Scheduler)

用于接收请求并压入队列中,在引擎再次请求时返回,由它决定下一个要抓取的网址是什么,同时负责去重网址。

scrapy 执行流程

scrapy发出请求后的整个流程如下:

1.首先发送出的 request 经Scrapy引擎交给调度器(Scheduler)
2.调度器排序处理后,由Scrapy引擎经下载器中间件到下载器(Downloader)
3.下载器向互联网发送请求,并接收响应,再由Scrapy引擎经过爬虫中间件交给 Spiders
4.spiers处理response,提取数据后,再由Scrapy引擎交给管道(Item Pipeline)
5.提取新的request 经Scrapy引擎交给调度器(Scheduler)并重复上述流程

向scrapy中的spider传参

有时候需要根据项目的实际需求向spider传递参数来控制spider的运行方式。

ep:

1
2
1. 根据用户提交的url来控制spider爬取的网站。
2. 根据需求增量爬取数据。

Spider参数通过 crawl 命令的 -a 选项来传递,比如:

1
2
scrapy crawl xxx -a parameter=xxxxxx
注:augmenter=不为空
Read more »
1234

40 posts
6 categories
9 tags
© 2020
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4