爬虫(八)Scrapy爬虫框架

0.Scrapy爬虫框架介绍

(0)Scrapy下载

win平台以管理员运行cmd执行pip install scrapy,安装后小测:执行scrapy -h

注意:利用国内源下载:pip install scrapy -i https://pypi.doubanio.com/simple/ kivy.deps.gstreamer   

以下三个源也是可以的:(如果还不行就把http改为https)

http://pypi.doubanio.com/simple/
https://pypi.tuna.tsinghua.edu.cn/simple/
http://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

但是中途遇到twisted没下(退出),所以在https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted找到python对应版本(我的是3.8)的twisted下载,

--------------------------------------------

注意:把下载好的文件放到python安装目录下的scripts文件夹中,并把此时的上面显示的路径复制,右键“我的电脑”属性--高级系统属性--高级--环境变量--系统变量--选path--编辑--新建--粘贴刚才的路径。

--------------------------------------------

再在cmd处输入命令:pip install 文件路径 (如下),然后再重新下载scrapy即可。

pip install D:\360安全浏览器下载\Twisted-19.10.0-cp38-cp38-win_amd64.whl

Scrapy不是一个函数功能库,而是一个爬虫框架(实现爬虫功能的一个软件结构和功能组件集合)。爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。

(1)3条数据流

(2)数据的出入口

1.Scrapy爬虫框架解析

“5+2”结构

Engine:控制所有模块之间的数据流,根据条件触发事件。

Downloader:根据请求下载网页。

Scheduler:对所有爬取请求进行调度管理。

Downloader Middleware:目的是实施上面三者间进行用户可配置的控制,功能是修改、丢弃、新增请求或相应。

Spider

(1)解析Downloader返回的相应(Response)

(2)产生爬取项(scraped item)

(3)产生额外的爬取请求(Request)

Item Pipelines

(1)以流水线的方式处理Spider产生的爬取项

(2)由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型

(3)可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库。

Spider Middleware:目的是对请求和爬取项的再处理,功能是修改、丢弃、新增请求或爬取项。

2.requests库和Scrapy爬虫的比较

相同点:可用性逗号,文档丰富,入门简单,都没有处理js、提交表单、应对验证码等功能(可扩展)。

如何选择:

3.Scrapy爬虫的常用命令

Scrapy命令行格式:

>scrapy <command> [options] [args]
#上面的command即Scrapy命令

why Scrapy 采用命令行创建和运行爬虫:命令行更容易自动化,适合脚本控制,给程序员用。

4.Scrapy爬虫的一个实例

演示HTML页面地址:http://python123.io/ws/demo.html

文件名称:demo.html

产生步骤(1)

建立一个Scrapy爬虫工程,选取一个目录(D:\pycodes\),然后执行下列命令:

D:\pycodes>scrapy startproject python123demo

生成的工程目录

产生步骤(2)

在工程中产生一个Scrapy爬虫,进入工程目录(D:\pycodes\python123demo),然后执行如下命令:

D:\pycodes\python123demo>scrapy genspider demo python123.io

该命令作用:生成一个名称为demo的spider,在spiders目录下增加代码文件demo.py(该命令仅用于生成demo.py,该文件也可以手工生成)。

产生步骤(3)

配置产生的spider爬虫

配置:(1)初始URL地址(2)获取页面后的解析方式,如下图

# -*- coding: utf-8 -*-
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('Saved file %s.' % name)
  

产生步骤(4)

运行爬虫,获取页面。在命令行下执行:

D:\pycodes\python123demo>scrapy crawl demo

demo爬虫被执行,捕获页面存储在demo.html

5.yield关键字的使用

(1)生成器相比一次列出所有内容的优势:

更节省存储空间,相应更迅速,使用更灵活。

(2)实例

(生成器每调用一次在yield位置产生一个值,直到函数执行结束)

>>> def gen(n):
	for i in range(n):
		yield i**2

>>> for i in gen(5):
	print(i," ",end="")

0  1  4  9  16  

如果n=1M、10M、100M或更大,下面的生成器写法的优势就出来了:

(3)demo.py(之前改的)和demo.py代码的完整版本的区别如下:

6.Scrapy爬虫的基本使用

(1)Scrapy爬虫的使用步骤

(2)Scrapy爬虫的数据类型

Request类

class scrapy.http.Request()
Request对象表示一个HTTP请求。由Spider生成,由Downloader执行。

Response类

class scrapy.http.Response()
Response对象表示一个HTTP响应。由Downloader生成,由Spider处理。

Item类

class scrapy.item.Item()

Item对象表示一个从HTML页面中提取的信息内容。由Spider生成,由Item Pipeline处理
Item类似字典类型,可以按照字典类型操作

 

<HTML>.css('a::attr(href)').extract()

a为标签名称,href为标签属性。CSS Selector由W3C组织维护并规范。

发布了219 篇原创文章 · 获赞 13 · 访问量 9796

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/104296801