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组织维护并规范。