#Python 3.8.5
#Scrapy 2.3.0 第三方专业的网络爬虫框架
Scapy是一个框架,不是一个单一库。他是一些组件和库的集合
1.总体概念
“5+2” 结构

Engine:(不需要用户修改)
控制所有模块之间的数据流;
根据条件出发时间;
Downloader:(不需要用户修改)
根据请求,下载网页;
Scheduler:(不需要用户修改)
对所有爬取请求进行调度管理
Downloader Middleware:(这个是一个中间件)
目的:实现Engine、Scheduler和Downloader之间用户可配置的控制
功能:修改、丢弃,新增请求或响应
Spider:(需要用户编写配置代码)
解析Downloader返回的响应(response);
产生爬取项;
产生额外的爬取请求;
Item Pipelines:(需要用户编写配置代码)
以流水线方式处理spiderc产生的爬取项;
由一组操作顺序组成,类似流水线,每个操作时一个Item Pipline类型
可能操作包括清理,检验和查重爬取项中的HTML数据,将数据存放到数据库
2. requests vs. Scrapy

3. Scrapy的具体使用:
3.1 创建工程:
cmd-->Scrapy start project xxxxxx xxxxxx为要创建的工程名,这样就在当前目录创建了一个scrapy 工程-123如:C:\Users\qiuleon\Documents\PythonSourceCode\Applications>scrapy startproject abc123,这样就在Application 文件夹下建立了一个名为abc123的工程
import scrapy
class DemoSpider(scrapy.Spider): #继承scrapy.Spider
name = 'demo' #spider名字为demo
allowed_domains = ['python123.io'] #爬取的域名,可以省略
start_urls = ['http://python123.io/'] #爬取的网站
def parse(self, response): #用于处理响应,解析内容形成字典,发现新的url爬取请求
pass
可以对这个代码进行配置。如下:
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['python123.io']
start_urls = ['http://python123.io/ws/demo.html']
def parse(self, response):
fname=response.url.split("/")[-1]
with open(fname,'wb') as f:
f.write(response.body)
self.log('Save file %s.' % fname)
完成配置代码后,在命令行cmd,在工程目录下,输入scrapy crawl demo(爬虫名)
以上为简化版代码
还有一种完整版代码

这两种代码的比较:

yield为生成器 :函数中有yield,yield作用具体见 yield 关键字
3.4 Request 类
| 属性或方法 | |
| .url | Response对应的请求URL地址 |
| .method | 对应的请求方法,‘GET’ 'POST' |
| .headers | 字典类风格的请求头 |
| .body | 请求内容主体,字符串类型 |
| .meta | 用户添加的扩展信息,在Scrapy内部模块间传递信息使用 |
| .copy() | 复制请求信息 |
3.5 Response 类
| 属性或方法 | |
| .url | Response对应的、URL地址 |
| .status | HTTP状态码,默认是200 |
| .headers | Response对应的头部信息 |
| .body | 请求内容主体,字符串类型 |
| .flags | 一组标记 |
| .request | 产生Response类型所对应的Request对象 |
| .copy() | 复制改响应 |
3.6 Items 类

3.7 Scrapy 爬虫提取信息的方法
Scrapy 爬虫支持多种HTML解析
-Beautiful Soup
-lxml
-re
-XPath Selector
-CSS Selector
3.8 CSS Selector的基本使用
<HTML>.css('a::attr(href)').extract()
# a是标签名臣,href标签属性值
4.具体使用案例 Scrapy使用步骤:
步骤1:建立工程和Spider模板
\>scrapy startproject xxx --xxx 为工程名
\>cd yyy yyy为工程路径
\>scrapy gen spider aaa bbb --aaa为spider名 bbb为爬取网站的url
进一步修改spiders/aaa.py配置文件
步骤2:编写Spider
配置aaa.py文件
修改对返回页面的处理
修改对新增URL爬取请求的处理
步骤3: 编写Pipeine
步骤4:配置优化
浙公网安备 33010602011771号