您好,欢迎访问一九零五行业门户网

豆瓣电影图片爬取实例

一、先上效果
二、安装scrapy和使用官方网址:。
安装命令:pip install scrapy
安装完成,使用默认模板新建一个项目,命令:scrapy startproject xx
上图很形象的说明了,scrapy的运行机制。具体各部分的含义和作用,可自行百度,这里不再赘述。我们一般,需要做的是以下步骤。
1)配置settings,其他配置可根据自己的要求查看文档配置。
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类。如:
class cnblogimageitem(scrapy.item):     image = scrapy.field()     imagepath = scrapy.field()     name = scrapy.field()
3)配置下载中间件,下载中间件的作用是自定义,怎么发请求。一般有处理代理的中间件、phantomjs的中间件等。这里,我们只用到代理中间件。
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、数据库、下载图片等。这里给出我的下载图片代码,使用的是官方的下载图片框架。
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,相互之间用的下载中间件不同,因此分开配置了。
# 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)
以上就是豆瓣电影图片爬取实例的详细内容。
其它类似信息

推荐信息