(七)Scrapy爬虫的基本使用
(1)Scrapy爬虫的使用步骤
步骤1:创建一个工程和Spider模板
步骤2:编写Spider
步骤3:编写Item Pipeline
步骤4:优化配置策略
(2)Scrapy爬虫的数据类型
1.Request类
class scrapy.http.Request()
#Requests对象表示一个HTTP请求
#由Spider生成,由Downloader执行
属性或方法 | 说明 |
---|---|
.url | Request对应的请求URL地址 |
.method | 对应的请求方法,‘GET’ 'POST’等 |
.headers | 字典类型风格的请求头 |
.body | 请求内容主体,字符串类型 |
.meta | 用户添加的扩展信息,在Scrapy内部模块间传递信息使用 |
.copy() | 复制该请求 |
2.Response类
class scrapy.http.Response()
#Response对象表示一个HTTP响应
#由Downloader生成,由Spider处理
属性或方法 | 说明 |
---|---|
.url | Response对应的URL地址 |
.status | HTTP状态码,默认是200 |
.headers | Response对应的头部信息 |
.body | Response对应的内容信息,字符串类型 |
.flags | 一组标记 |
.request | 产生Response类型对应的Request对象 |
.copy() | 复制该响应 |
3.Item类
class scrapy.item.Item()
#Item对象表示一个从HTML页面中提取的信息内容
#由Spider生成,由Item Pipeline处理
#Item类似字典类型,可以按照字典类型操作
(3)Scrapy测试工程示例
>产生步骤(1)
- 建立一个Scrapy工程
- 选取一个目录(D:\scrapytest),然后执行如下命令:
- 生成的工程目录
>产生步骤(2)
-
在工程中产生一个Scrapy爬虫
-
进入工程目录(D:\scrapytest\python123demo),然后执行如下命令:
-
该命令的作用:
-
生成一个名称为demo的spider
-
在spiders目录下增加代码文件demo.py
-
该命令仅用于生成demo.py,该文件也可以手工生成
-
>产生步骤(3)
- 配置产生的spider爬虫
- 初始化URL地址
- 获取页面后的解析方式
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
# allowed_domains = ['python123.io']
def start_requests(self):
urls = ['http://python123.io/ws/demo.html']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
#parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求
def parse(self, response):
fname = response.url.split('/')[-1]
with open(fname, 'wb') as f:
f.write(response.body)
self.log('Saved file %s.' % fname)
>产生步骤(4)
-
运行爬虫,获取网页
-
在命令行执行如下命令:
-
demo爬虫被执行,捕获页面存储在demo.html
(4)yield关键字
- 包含yield语句的函数式一个生成器
- 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值
- 生成器是一个不断产生值的函数
- 生成器相比一次列出所有内容的优势:
- 更节省存储空间
- 响应更迅速
- 使用更灵活
(5)Scrapy爬虫提取信息的方法
- Scrapy爬虫支持多种HTML信息提取方法:
- Beautiful Soup
- lxml
- re
- Xpath Selector
- CSS Selector
<HTML>.css('a::attr(href)').extract()
#a :标签名称
#href :标签属性
#CSS Selector由W3C组织维护并规范