SPIDER_MODULES = ['itcast.spiders']
NEWSPIDER_MODULE = 'itcast.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'itcast (+http://www.yourdomain.com)'
# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 3
# Obey robots.txt rules
# ROBOTSTXT_OBEY = True
这个表示当前的爬虫类的唯一表示,一个项目必须唯一,用来启动爬虫或者其他的时候用到
这个则表示当前的爬虫会在哪些域名下面抓取数据,如果不在这个域名下面的话那么就不会被抓取数据
起始的url地址列表,爬虫执行后第一批请求,将从这个列表获取
这个方法会在start_urls页面之后被执行,可以在这里面执行相应的解析页面的操作,例如:
nodeList = response.xpath("//div[@class='li_txt']")
# itemList = []
for node in nodeList:
# 创建item字段对象,用来存储信息
item = ItcastItem()
# 下面的返回的是一个xpath对象列表,所以需要使用extract()方法来将其转换成Unicode字符串
name = node.xpath("./h3/text()").extract()
title = node.xpath("./h4/text()").extract()
info = node.xpath("./p/text()").extract()
# 存储到item字段对象里面
item['name'] = name[0]
item['title'] = title[0]
item['info'] = info[0]
# 返回提取的每一个item数据给管道,给管道处理,然后还回来继续执行当前的for循环里面的代码
yield item
上面的代码使用了xpath来解析页面的结构,Scrapy默认支持将数据以4中形式输出,可以通过
scrapy crawl “爬虫唯一表示名称” -o itcast.json
scrapy crawl “爬虫唯一表示名称” -o itcast.csv
还两个忘掉了,大概语法就是这样的
还可以直接将item返回给相应的管道处理,使用下面的这个代码实现
yield item
注意如果要返回给管道的话需要在settings.py文件里面将管道的配置开启
def process_item(self, item, spider):
return item
默认的只有上面这一个方法的,这个方法是用来处理爬虫类里面传递来的item的,可以在里面定义自己的处理逻辑,注意下需要代码最后必须return item,item在管道里面处理完毕之后需要再传递给引擎,return item就是将处理好的item传递给引擎的,如果不 return item的话那么就会在这里中断掉,那么就会出错,再就是如果存在多个管道类的话那么return item就表示将item接着传递给下一个管道,执行那个管道的业务逻辑
再就是参数列表里面的spider就是表示传递item过来的spider对象,可以通过.name等方法查看spider的名字等信息
def __init__(self):
可以在默认的方法之外添加这个初始化方法,这个方法的话初始化一些需要初始化的东西
def close_spider(self, spider):
还可以添加这个方法,这个方法可以算是一个结束方法,里面的话可以执行一些关闭某些流等操作,类似的数据库的关闭等可以在这个方法里面执行
可以在settings.py里面设置自定义的管道
# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'itcast.pipelines.ItcastPipeline': 300,
}
ITEM_PIPELINES这个是一个字典,可以在里面添加自定义的管道,其中itcast表示项目名,pipelines这个表示具体的文件,ItcastPipeline表示具体的管道类,后面的300则表示有限制,范围在0-1000,值越小优先级越高
item会顺序的经过所有的管道类,然后全部经过后下一个item进来,接着进入全部的管道
re():根据传入的正则表达式对数据进行提取,返回Unicode字符串list列表
def get_media_requests(self, item, info):
imageLink = item["imageLink"]
yield scrapy.Request(imageLink)
IMAGES_STORE = "/Users/yedeguo/Desktop/斗鱼图片"
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML,' \
' like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25'