内容简介:Scrapy教程--豆瓣电影图片爬取
一、先上效果
二、安装Scrapy和使用
官方网址:https://scrapy.org/。
安装命令: 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 = 30 IMAGES_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_path else: item['imagePath'] = '' return item
5)编写自己的Spider类,Spider的作用是配置一些信息、起始url请求、处理响应数据。这里的下载中间件配置、pipeline,可以放在settings文件中。这里我放在,各自的Spider中,因为项目中包含多个Spider,相互之间用的下载中间件不同,因此分开配置了。
# coding=utf-8 import sys import scrapy import gaoxiao.items import json reload(sys) sys.setdefaultencoding('utf-8') class doubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['movie.douban.com'] baseUrl = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=' 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 item if self.start < 400: self.start += 20 yield scrapy.Request(self.baseUrl + str(self.start), callback=self.parse)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- golang爬取豆瓣电影TOP250(下载图片)
- 编写豆瓣相册下载器(python爬虫)
- 基于 Pytest 豆瓣自动化测试(一)
- 如何 5 分钟零代码实现豆瓣小组爬虫
- 周志华教授力作,豆瓣10分好评
- 数据可视化豆瓣电影 TOP250
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
区块链革命
[加]唐塔普斯科特(Don Tapscott)、[加]亚力克斯·塔普斯科特(Alex Tapscott) / 中信出版集团股份有限公司 / 2016-9 / 69
(1)国际大腕“数字经济之父”继畅销书《维基经济学》之后再出力作! (2)一本真正全景式描述区块链理论及应用的巨著! (3)苹果共同创始人史蒂夫·沃兹尼亚克、世界经济论坛创始人和论坛主席克劳斯·施瓦布、网景及硅谷安德森·霍洛维茨风险投资公司创始人马克·安德森、麦肯锡董事长兼全球总裁鲍达民、 百事公司首席执行官卢英德、丹·舒尔曼 Paypal公司首席执行官等全球政治界、学术界和商界精英联......一起来看看 《区块链革命》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
Markdown 在线编辑器
Markdown 在线编辑器