博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Scrapy- 专业的网络爬虫框架(未完成)

Posted on 2020-08-31 10:59  leonsusie  阅读(164)  评论(0)    收藏  举报

#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:配置优化