本文摘自php中文网,作者PHP中文网,侵删。
一、先上效果

二、安装Scrapy和使用
官方网址:。
安装命令:pip install Scrapy
安装完成,使用默认模板新建一个项目,命令:scrapy startproject xx

上图很形象的说明了,scrapy的运行机制。具体各部分的含义和作用,可自行百度,这里不再赘述。我们一般,需要做的是以下步骤。
1)配置settings,其他配置可根据自己的要求查看文档配置。
1 2 | DEFAULT_REQUEST_HEADERS = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.10 Safari/537.36' }
DOWNLOAD_TIMEOUT = 30IMAGES_STORE = 'Images'
|
2)定义items类,相当于Model类。如:
1 2 3 4 | class CnblogImageItem(scrapy.Item):
image = scrapy.Field()
imagePath = scrapy.Field()
name = scrapy.Field()
|
3)配置下载中间件,下载中间件的作用是自定义,怎么发请求。一般有处理代理的中间件、PhantomJs的中间件等。这里,我们只用到代理中间件。
1 2 3 4 5 6 | class GaoxiaoSpiderMiddleware(object):def process_request(self, request, spider): if len(request.flags) > 0 and request.flags[0] == 'img' : return None
driver = webdriver.PhantomJS()# 设置全屏 driver.maximize_window()
driver.get(request.url)
content = driver.page_source
driver.quit() return HtmlResponse(request.url, encoding= 'utf-8' , body=content) class ProxyMiddleWare(object):def process_request(self, request, spider):
request.meta[ 'proxy' ] = 'http://175.155.24.103:808'
|
4)编写pipeline,作用是处理从Spider中传过来的item,保存excel、数据库、下载图片等。这里给出我的下载图片代码,使用的是官方的下载图片框架。
1 2 3 4 5 6 7 8 | class CnblogImagesPipeline(ImagesPipeline):
IMAGES_STORE = get_project_settings().get( "IMAGES_STORE" )def get_media_requests(self, item, info):
image_url = item[ 'image' ] if image_url != '' :yield scrapy.Request(str(image_url), flags=[ 'img' ])def item_completed(self, result, item, info):
image_path = [x[ "path" ] for ok, x in result if ok] if image_path:# 重命名 if item[ 'name' ] != None and item[ 'name' ] != '' :
ext = os.path.splitext(image_path[0])[1]
os.rename(self.IMAGES_STORE + '/' + image_path[0], self.IMAGES_STORE + '/' + item[ 'name' ] + ext)
item[ "imagePath" ] = image_pathelse:
item[ 'imagePath' ] = '' return item
|
5)编写自己的Spider类,Spider的作用是配置一些信息、起始url请求、处理响应数据。这里的下载中间件配置、pipeline,可以放在settings文件中。这里我放在,各自的Spider中,因为项目中包含多个Spider,相互之间用的下载中间件不同,因此分开配置了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # coding=utf-8import sysimport scrapyimport gaoxiao.itemsimport json
reload(sys)
sys.setdefaultencoding( 'utf-8' ) class doubanSpider(scrapy.Spider):
name = 'douban' allowed_domains = [ 'movie.douban.com' ]
baseUrl = '' start = 0
start_urls = [baseUrl + str(start)]
custom_settings = { 'DOWNLOADER_MIDDLEWARES' : { 'gaoxiao.middlewares.ProxyMiddleWare' : 1,# 'gaoxiao.middlewares.GaoxiaoSpiderMiddleware' : 544 }, 'ITEM_PIPELINES' : { 'gaoxiao.pipelines.CnblogImagesPipeline' : 1,
}
}def parse(self, response):
data = json.loads(response.text)[ 'subjects' ] for i in data:
item = gaoxiao.items.CnblogImageItem() if i[ 'cover' ] != '' :
item[ 'image' ] = i[ 'cover' ]
item[ 'name' ] = i[ 'title' ] else :
item[ 'image' ] = '' yield itemif self.start < 400:
self.start += 20yield scrapy.Request(self.baseUrl + str(self.start), callback=self.parse)
|
以上就是豆瓣电影图片爬取实例的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
pycharm自带Python吗
Python如何导入excel
Python的编辑器怎么打开
Python读写sqlite3数据库的方法并且将数据写入excel的实例详解
Python中count函数的用法
详解Python中super()函数的用法及工作原理
eclipse 中出现红色下划波浪线与红色感叹号
《Python cookbook》怎么样
jwt原理和简单应用的介绍(附代码)
Python2和Python3学哪个
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 豆瓣电影图片爬取实例