19.1 什么是scrapy
- Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我 们只需要实现少量的代码,就能够快速的抓取
- Scrapy 使用了Twisted['twɪstɪd]异步网络框架,可以加快我们的下载速 度。
19.1.1 异步和非阻塞的区别
- 异步:调用在发出之后,这个调用就直接返回,不管有无结果
- 非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。
- 回顾前面的爬虫流程
- 另一种形式爬虫流程
19.1.2 scrapy的爬虫流程
19.2 Scrapy 入门
- 创建一个scrapy项目
- scrapy startproject mySpider
- 生成一个爬虫
- scrapy genspider itcast "itcast.cn”
- 提取数据
- 完善spider,使用xpath等方法
- 保存数据
- pipeline中保存数据
19.3 实验
In:
lis1 = [1,2,3]
In:
def fun2():
return lis1
In:
def fun1():
for i in lis1:
yield i
In:
res = fun1()
print(type(res))
out:
<class 'generator'>
In:
for j in res:
print(j)
out:
1
2
3
In:
res2 = fun2()
for j in res2:
print(j)
out:
1
2
3
19.3.1.1 spiders
- 修改start_urls,改成实际请求地址:http://m.youdao.com/translate
- parse函数名不能修改,通过yield返回item
19.3.1.2 pipelines
- 自定类来实现不同的管道
- 比如,实现文本输出类:TextFilePipeline
- process_item函数名不能修改
19.3.1.3 settings
- 修改USER_AGENT,改成手机端
- 如:Mozilla/5.0 (iPhone…
- 修改ROBOTSTXT_OBEY为False
- 启用ITEM_PIPELINES,添加新增pipeline,200代表优先级,数字越小优先级越高
- 如:‘tranSpider.pipelines.TextFilePipeline’: 200,
- 修改日志级别
- 如:LOG_LEVEL = “WARNING”
19.3.1 运行爬虫
- scrapy crawl liepin