项目运用meta方法
import scrapy
from kkpro.items import KkproItem
class KkSpider(scrapy.Spider):
name = 'kk'
# allowed_domains = ['ww.xx']
start_urls = ['http://pic.netbian.com/']
def parse(self, response):
li_list=response.xpath('//div[@class="slist"]/ul/li')
for li in li_list:
img_url='http://pic.netbian.com' +li.xpath('./a/span/img/@src').extract_first()
img_name=img_url.split('/')[-1]
item=KkproItem()
item['name']=img_name
yield scrapy.Request(url=img_url,callback=self.getImgdata,meta={'item':item})
def getImgdata(self,response):
item=response.meta['item']
item['img_data']=response.body
yield item
****************************
settings 设置
# 增加并发:
# 默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100。
#
# 降低日志级别:
# 在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:LOG_LEVEL = ‘INFO’
#
# 禁止cookie:
# 如果不是真的需要cookie,则在scrapy爬取数据时可以禁止cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:COOKIES_ENABLED = False
#
# 禁止重试:
# 对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:RETRY_ENABLED = False
#
# 减少下载超时:
# 如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:DOWNLOAD_TIMEOUT = 10 超时时间为10s
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
#增加并发:
CONCURRENT_REQUESTS=10
#降低日志级别:
LOG_LEVEL = 'ERROR'
# 禁止cookie:
COOKIES_ENABLED = False
# 禁止重试:
RETRY_ENABLED=False
# 减少下载超时:
DOWNLOAD_TIMEOUT=8
***************************************
#图片存储
import os
class KkproPipeline(object):
#打开图片
def open_spider(self,spider):
if not os.path.exists('img'):
os.mkdir('./img')
def process_item(self, item, spider):
imgpath='./img/' +item['name']
with open(imgpath,'wb')as f:
f.write(item['img_data'])
print(imgpath+'下载成功')
return item
********************************************
一.Scrapy的日志等级
- 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息。
- 日志信息的种类:
ERROR : 一般错误
WARNING : 警告
INFO : 一般的信息
DEBUG : 调试信息
- 设置日志信息指定输出:
在settings.py配置文件中,加入
LOG_LEVEL = ‘指定日志信息种类’即可。
LOG_FILE = 'log.txt'则表示将日志信息写入到指定文件中进行存储。
二.请求传参
- 在某些情况下,我们爬取的数据不在同一个页面中,例如,我们爬取一个电影网站,电影的名称,评分在一级页面,而要爬取的其他电影详情在其二级子页面中。这时我们就需要用到请求传参。
- 案例展示:爬取www.id97.com电影网,将一级页面中的电影名称,类型,评分一级二级页面中的上映时间,导演,片长进行爬取。
爬虫文件:
items文件:
管道文件:
三.如何提高scrapy的爬取效率
测试案例:爬取校花网校花图片 www.521609.com
配置文件: