scrapy基本使用
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。
安装scrapy:
1. 安装pywin32 - Microsoft Windows的Python扩展提供对大部分Win32 API的访问,创建和使用COM对象的能力以及Pythonwin环境。 - 不论电脑是32位还是64位都可以选择安装。 - pip install pywin32
2. 安装wheel - pip install wheel
3. 下载Twisted - Twisted是用Python实现的基于事件驱动的网络引擎框架。 - pip install twisted
4. 安装 scrapy框架 pip install scrapy
5. 验证:在cmd输入scrapy没有报错则安装成功
scrapy工作流程
制作一个scrapy爬虫需要四步:
1.创建一个Scrapy项目
2.定义提取的结构化数据(Item)
3.编写爬取网站的 Spider 并提取出结构化数据(Item)
4.编写 Item Pipelines 来存储提取到的Item(即结构化数据)
1.新建项目
说明:在开始爬取之前,必须创建一个新的Scrapy项目。进入自定义的项目目录中,运行下列命令:
-使用命令:scrapy startproject mySpider
其中需要再终端中执行。其中,scrapyDemo01为项目名称,可以看到将会创建scrapyDemo01 文件夹,目录结构大致如下图:
2.明确爬取目标
打开mySpider目录下的items.py,以爬取链家的信息为例,
上面的你创建第一个class项目自动生成的,它实例了怎么去定义一个存储的字段
下面的是我们刚才创建的链家项目,这里我们定义好了标题,位置信息,房子的信息,总价及一平米的价格的字段。
3.制作爬虫
爬虫功能分两步: 爬数据和取数据
爬数据
创建好scrapyDemo01项目之后,在终端输入
cd scrapyDemo01
scrapy genspider lianjia lianjia.com
spider路径下的lianjia.py文件
为什么使用yield,而不使用return??
因为yield返回之后还可以执行接下来的内容 而return不行
要建立一个Spider, 你必须用scrapy.Spider类创建一个子类,并确定了三个强制的属性 和 一个方法。
- `name = ""` :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。
- `allow_domains = []` 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,一般把它要注释掉
- `start_urls = ()` :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。
- `parse(self, response)` :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下: 1. 负责解析返回的网页数据(response.body),提取结构化数据(生成item) 2. 生成需要下一页的URL请求。
执行爬虫,使用命令: scrapy crawl lianjia
log日志:
如果再出现的结果中出现了很多其他的信息,不需要恐慌,这是它的日志信息。 scrapy日志信息分四级: ERROR :一般错误。 WARNING : 警告。 INFO : 一般信息 。DEBUG : 调试信息 。默认的显示级别是DEBUG
在settings.py配置文件中,加入LOG_LEVEL = ‘指定日志信息种类’即可。LOG_FILE = 'log.txt'则表示将日志信息写入到指定文件中进行存储。一般使用LOG_LEVEL = WARING。
4.保存爬虫信息:
pipelines文件中自定义了一个process_item方法,用来给我们处理保存的信息。,第一个Scrapydemo01Pipeline是自动生成的一个方法,它实例了一个怎么保存信息的方法。
在创建lianjia的保存方法时,要创建一个生命周期
# 生的时候做什么事情, 再开始爬虫的时候会被调用一次
def open_spider(self,spider):
# 死的时候做什么事情, 结束爬虫的时候被调用一次
def close_spider(self,spider):