Scrapy爬虫框架
到了最专业的网络爬虫框架学习部分,要打起更好的精气神迎接新的挑战。
1、安装
pip install scrapy
安装完毕后输入如下命令来测试效果:
scrapy -h
能够正确回响就说明已经能够安装成功了。
2、Scrapy框架简述
scrapy是一个爬虫框架,是一种能够帮助用户实现专业网络爬虫的一个软件结构、功能组件的集合。
怎么理解呢?其实就可以认为这个框架有几个小组件分工合作,形成数据流,并且组成这么一个大的组件集合。下图展示框架的组成部分:
在这里,我们要实现一个对爬虫功能的实现,应该是从Spider和Item Pipeline进行入手。因为Engine、Downloader是已有的功能实现,Scheduler也是如此。
此时我们进行爬虫的实质就是在进行爬虫框架配置的完善。
3、Requests和Scrapy
相同点:
- 两者都可以进行网页请求和爬取
- 可用性好,文档简单
- 都没有处理js、提交表单和应对验证码的功能
不同点:
request | scrapy |
---|---|
页面级爬虫 | 网站级爬虫 |
功能库 | 框架 |
并发考虑不足,效率低 | 并发性好 |
重点在于页面下载 | 重点在于爬虫结构 |
定制灵活 | 一般定制灵活 |
上手简单 | 入门稍难 |
4、Scrapy常用命令
Scrapy的常用命令格式如下:
scrapy <command> [option] [args]
其中,command主要是常用的命令,包括如下:
命令 | 说明 | 格式 |
---|---|---|
startproject | 创建一个新爬虫 | scrapy startproject [dir] |
genspider | 创建一个爬虫 | scrapy genspider [option] |
settings | 获得爬虫配置信息 | scrapy settings [options] |
crawl | 运行一个爬虫 | scrapy crawl |
list | 列出工程所有爬虫 | scrapy list |
shell | 启动url调试命令行 | scrapy shell [url] |
一个工程就是一个大的框架,其中工程可以放置很多爬虫并相当于作为工程内部的一种downloader。
并且,这种自动化适合脚本操作,并且注重于功能。
5、Scrapy的实例
1、建立一个爬虫的工程:
文件目录如上图所示。
其中,项目名为python123demo,下一层是部署配置文件config和用户自定义python代码,通常跟工程名一致。
再下一层,我们还有这些python文件,分别对应着5个功能组件中的若干个。
2、创建一个爬虫
生成的内容如下:
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['python123.io']
start_urls = ['http://python123.io/']
def parse(self, response):
pass
当然我们也可以手动生成完成爬虫创建的部分。
3、配置爬虫
针对上面创建的爬虫,我们试着做一个将html网页存到一个html文件中。
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.' % name)
其次运行:
scrapy crawl demo
结果如下:
<html><head><title>This is a python demo page</title></head>
<body>
<p class="title"><b>The demo python introduces several python courses.</b></p>
<p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
<a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Python</a> and <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Python</a>.</p>
</body></html>
6、yield
是一个生成器,是一个不断产生值的函数,其包含yield语句的函数是一个生成器。
生成器每次产生一个值,函数就被冻结,被唤醒后产生一个新的值。
def gen(n):
for i in range(n):
yield i**2
上面的内容功能是产生小于n的数的平方值。因为生成器会返回一个返回值,并且处于一个循环内部。
生成器的优势:
1、能够更好存储空间
2、更灵活的响应
3、使用灵活
总结
以上就是Scrapy的基本概念的介绍,实践部分仍然需要靠自己得经验和积累来完成。谢谢大家的阅读。