目录
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。
Scrapy Engine
(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。Scheduler
(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。Downloader
(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,Spider
(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),Item Pipeline
(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.Downloader Middlewares
(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。Spider Middlewares
(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)xxxx.com
。xxxxxxx.com
。插入scrapy01.png
[settings]
default = mySpider.settings
[deploy]
#url = http://localhost:6800/
project = mySpider
__init__
: 必须的文件
import scrapy
class MyspiderItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# age = scrapy.Field()
pass
class MyspiderPipeline(object):
def process_item(self, item, spider):
return item
# 你的爬虫名字
BOT_NAME = 'mySpider'
# 你的爬虫的位置
SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'
# 是否遵循robust协议
ROBOTSTXT_OBEY = True
# 爬虫并发量
#CONCURRENT_REQUESTS = 32
# 下载延迟
#DOWNLOAD_DELAY = 3
# 下载延迟的额外设置:一般不用设置
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# 是否使用cookie
#COOKIES_ENABLED = False
# 访问电话线设置
#TELNETCONSOLE_ENABLED = False
# 设置默认请求报头
#DEFAULT_REQUEST_HEADERS = {
# 'User-Agent': ''
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# 爬虫中间键:一般不设置
#SPIDER_MIDDLEWARES = {
# 'mySpider.middlewares.MyspiderSpiderMiddleware': 543,
#}
# 下载中间键: 后面的值是优先级,越小越高
#DOWNLOADER_MIDDLEWARES = {
# 'mySpider.middlewares.MyspiderDownloaderMiddleware': 543,
#}
# 延展,没什么用
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# 管道文件---经常使用的,用于指定优先级
#
#ITEM_PIPELINES = {
# 'mySpider.pipelines.MyspiderPipeline': 300,
#}
我们打算抓取:http://www.itcast.cn/channel/teacher.shtml 网站里的所有讲师的姓名、职称和个人信息。
scrapy genspider spidername "startURL"
scrapy crawl itcast
scrapy crawl itcast -o json/csv/xml/
yield item
yield scrapy.Request(url, callback = self.parse)
要建立一个Spider
, 你必须用scrapy.Spider
类创建一个子类,并确定了三个强制的属性 和 一个方法。
name = ""
:这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。allow_domains = []
是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。start_urls = ()
:爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。parse(self, response)
:解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response
对象来作为唯一参数,主要作用如下:
(response.body)
,提取结构化数据(生成item)