Bladeren bron

添加了爬虫的代码并更新了部分文档

jackfrued 7 jaren geleden
bovenliggende
commit
124488b9b5
100 gewijzigde bestanden met toevoegingen van 382 en 0 verwijderingen
  1. 0 0
      Day66-75/code/image360/image360/__init__.py
  2. 24 0
      Day66-75/code/image360/image360/items.py
  3. 137 0
      Day66-75/code/image360/image360/middlewares.py
  4. 55 0
      Day66-75/code/image360/image360/pipelines.py
  5. 100 0
      Day66-75/code/image360/image360/settings.py
  6. 4 0
      Day66-75/code/image360/image360/spiders/__init__.py
  7. 31 0
      Day66-75/code/image360/image360/spiders/image.py
  8. 31 0
      Day66-75/code/image360/image360/spiders/taobao.py
  9. BIN
      Day66-75/code/image360/resources/t01007dc14e5d9ba99c.jpg
  10. BIN
      Day66-75/code/image360/resources/t0100bf3cb6bfbaf619.jpg
  11. BIN
      Day66-75/code/image360/resources/t0102719cecb7bbf933.jpg
  12. BIN
      Day66-75/code/image360/resources/t01040153281bef0c31.jpg
  13. BIN
      Day66-75/code/image360/resources/t0104acadc3f46e94a5.jpg
  14. BIN
      Day66-75/code/image360/resources/t0106c74482d74f1f69.jpg
  15. BIN
      Day66-75/code/image360/resources/t0107a47a55e15b4088.jpg
  16. BIN
      Day66-75/code/image360/resources/t0108659585e5c6fd79.jpg
  17. BIN
      Day66-75/code/image360/resources/t0108dc82794264fe32.jpg
  18. BIN
      Day66-75/code/image360/resources/t0109066494109ef9d5.jpg
  19. BIN
      Day66-75/code/image360/resources/t010cdb2fc590380ba2.jpg
  20. BIN
      Day66-75/code/image360/resources/t010eaeb5befe6bd3da.jpg
  21. BIN
      Day66-75/code/image360/resources/t010ebf2ec5ab7eed55.jpg
  22. BIN
      Day66-75/code/image360/resources/t01113e798f564af05b.jpg
  23. BIN
      Day66-75/code/image360/resources/t011763a163ad870dd5.jpg
  24. BIN
      Day66-75/code/image360/resources/t0118880c4a56060405.jpg
  25. BIN
      Day66-75/code/image360/resources/t011c7e0a3894541511.jpg
  26. BIN
      Day66-75/code/image360/resources/t011d088995140f23c4.jpg
  27. BIN
      Day66-75/code/image360/resources/t011dc130fbe3c88bea.jpg
  28. BIN
      Day66-75/code/image360/resources/t011f0f52dbe5a44c9c.jpg
  29. BIN
      Day66-75/code/image360/resources/t011f2aa3c3c3ca3e8b.jpg
  30. BIN
      Day66-75/code/image360/resources/t01204279178ca66421.jpg
  31. BIN
      Day66-75/code/image360/resources/t01212289c59a8c09f2.jpg
  32. BIN
      Day66-75/code/image360/resources/t0121d70ff844efb5f9.jpg
  33. BIN
      Day66-75/code/image360/resources/t0121dabf4b71749cfe.jpg
  34. BIN
      Day66-75/code/image360/resources/t0122662127e2518bcb.jpg
  35. BIN
      Day66-75/code/image360/resources/t0122e587d0aa3bd5f6.jpg
  36. BIN
      Day66-75/code/image360/resources/t0122eee4a19d116c86.jpg
  37. BIN
      Day66-75/code/image360/resources/t012383a24305385b0e.jpg
  38. BIN
      Day66-75/code/image360/resources/t01246e4abdf04e8f44.jpg
  39. BIN
      Day66-75/code/image360/resources/t0126171a8b227fe60a.jpg
  40. BIN
      Day66-75/code/image360/resources/t0127c5bc8e51178d81.jpg
  41. BIN
      Day66-75/code/image360/resources/t012b78d17ad10b28d2.jpg
  42. BIN
      Day66-75/code/image360/resources/t012c58704949943139.jpg
  43. BIN
      Day66-75/code/image360/resources/t012c60eb0fe0720396.jpg
  44. BIN
      Day66-75/code/image360/resources/t012f140107638e0fda.jpg
  45. BIN
      Day66-75/code/image360/resources/t012f9eb9266a79c14a.jpg
  46. BIN
      Day66-75/code/image360/resources/t013078e0696e393d34.jpg
  47. BIN
      Day66-75/code/image360/resources/t0133dea5352f251144.jpg
  48. BIN
      Day66-75/code/image360/resources/t0135f5ed12ebfbf723.jpg
  49. BIN
      Day66-75/code/image360/resources/t013862476b8fbf7969.jpg
  50. BIN
      Day66-75/code/image360/resources/t013bfdb724ccde6227.jpg
  51. BIN
      Day66-75/code/image360/resources/t013c82bfe79c770965.jpg
  52. BIN
      Day66-75/code/image360/resources/t013cb1e91e02d1a22b.jpg
  53. BIN
      Day66-75/code/image360/resources/t013cd39cd3c08d971e.jpg
  54. BIN
      Day66-75/code/image360/resources/t013ec9b3fb5cfa24a2.jpg
  55. BIN
      Day66-75/code/image360/resources/t01405adfca6387b9ac.jpg
  56. BIN
      Day66-75/code/image360/resources/t0143850ac615187626.jpg
  57. BIN
      Day66-75/code/image360/resources/t014596f0949435cab8.jpg
  58. BIN
      Day66-75/code/image360/resources/t01474a1e9e1dbdc185.jpg
  59. BIN
      Day66-75/code/image360/resources/t0149725b31c5bd51be.jpg
  60. BIN
      Day66-75/code/image360/resources/t0149dd4f260f4352b8.jpg
  61. BIN
      Day66-75/code/image360/resources/t014a03227f1c992296.jpg
  62. BIN
      Day66-75/code/image360/resources/t014ac25aa8c0b7f274.jpg
  63. BIN
      Day66-75/code/image360/resources/t014c4a3be39db97b7a.jpg
  64. BIN
      Day66-75/code/image360/resources/t014d699aac32cb713d.jpg
  65. BIN
      Day66-75/code/image360/resources/t01515f76784a2cb70d.jpg
  66. BIN
      Day66-75/code/image360/resources/t0154687f04bb6e87c8.jpg
  67. BIN
      Day66-75/code/image360/resources/t0154e0c6a3a0195ae5.jpg
  68. BIN
      Day66-75/code/image360/resources/t01566484710c51f9eb.jpg
  69. BIN
      Day66-75/code/image360/resources/t015761d856727049e8.jpg
  70. BIN
      Day66-75/code/image360/resources/t0157d6c71e66dd5324.jpg
  71. BIN
      Day66-75/code/image360/resources/t0158e90c6b2261246f.jpg
  72. BIN
      Day66-75/code/image360/resources/t015ad37f6400feaa36.jpg
  73. BIN
      Day66-75/code/image360/resources/t015cb268bec26b89df.jpg
  74. BIN
      Day66-75/code/image360/resources/t015e3979aab2fb94df.jpg
  75. BIN
      Day66-75/code/image360/resources/t016004e6a1ad3c9e5b.jpg
  76. BIN
      Day66-75/code/image360/resources/t0160c8456511be3c4e.jpg
  77. BIN
      Day66-75/code/image360/resources/t0162367ab7e72a28fe.jpg
  78. BIN
      Day66-75/code/image360/resources/t016515a354e5d99aa5.jpg
  79. BIN
      Day66-75/code/image360/resources/t016692a18144ff13e9.jpg
  80. BIN
      Day66-75/code/image360/resources/t016a574a08f712d044.jpg
  81. BIN
      Day66-75/code/image360/resources/t016d7fdd276ca1af2c.jpg
  82. BIN
      Day66-75/code/image360/resources/t0171bc968d5e0f4bc6.jpg
  83. BIN
      Day66-75/code/image360/resources/t0171cc58bc33662afd.jpg
  84. BIN
      Day66-75/code/image360/resources/t017617760d184e6bdd.jpg
  85. BIN
      Day66-75/code/image360/resources/t0176b4c4f9c948a0ef.jpg
  86. BIN
      Day66-75/code/image360/resources/t01780cfa69f094efad.jpg
  87. BIN
      Day66-75/code/image360/resources/t0179d7e549f15e2e75.jpg
  88. BIN
      Day66-75/code/image360/resources/t017a4bc1542b90029f.jpg
  89. BIN
      Day66-75/code/image360/resources/t017c24387821f1820a.jpg
  90. BIN
      Day66-75/code/image360/resources/t017d478b5ab2f639ff.jpg
  91. BIN
      Day66-75/code/image360/resources/t017f7af599c13d831e.jpg
  92. BIN
      Day66-75/code/image360/resources/t018047d23168c301de.jpg
  93. BIN
      Day66-75/code/image360/resources/t0183548d072c356557.jpg
  94. BIN
      Day66-75/code/image360/resources/t0185e58b9800d4ceb3.jpg
  95. BIN
      Day66-75/code/image360/resources/t0186c5788021457c73.jpg
  96. BIN
      Day66-75/code/image360/resources/t018a21577372885278.jpg
  97. BIN
      Day66-75/code/image360/resources/t018b65f9d7ee73f315.jpg
  98. BIN
      Day66-75/code/image360/resources/t018fe0911e35023068.jpg
  99. BIN
      Day66-75/code/image360/resources/t01917a7fab2fe4d9b7.jpg
  100. BIN
      Day66-75/code/image360/resources/t0192a0336e9399b8da.jpg

+ 0 - 0
Day66-75/code/image360/image360/__init__.py


+ 24 - 0
Day66-75/code/image360/image360/items.py

@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+# Define here the models for your scraped items
+#
+# See documentation in:
+# https://doc.scrapy.org/en/latest/topics/items.html
+
+import scrapy
+
+
+class GoodsItem(scrapy.Item):
+
+    price = scrapy.Field()
+    deal = scrapy.Field()
+    title = scrapy.Field()
+
+
+class BeautyItem(scrapy.Item):
+
+    title = scrapy.Field()
+    tag = scrapy.Field()
+    width = scrapy.Field()
+    height = scrapy.Field()
+    url = scrapy.Field()

+ 137 - 0
Day66-75/code/image360/image360/middlewares.py

@@ -0,0 +1,137 @@
+# -*- coding: utf-8 -*-
+
+# Define here the models for your spider middleware
+#
+# See documentation in:
+# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
+
+from scrapy import signals
+from scrapy.http import HtmlResponse
+
+from selenium import webdriver
+from selenium.common.exceptions import TimeoutException
+
+
+class Image360SpiderMiddleware(object):
+    # Not all methods need to be defined. If a method is not defined,
+    # scrapy acts as if the spider middleware does not modify the
+    # passed objects.
+
+    @classmethod
+    def from_crawler(cls, crawler):
+        # This method is used by Scrapy to create your spiders.
+        s = cls()
+        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
+        return s
+
+    def process_spider_input(self, response, spider):
+        # Called for each response that goes through the spider
+        # middleware and into the spider.
+
+        # Should return None or raise an exception.
+        return None
+
+    def process_spider_output(self, response, result, spider):
+        # Called with the results returned from the Spider, after
+        # it has processed the response.
+
+        # Must return an iterable of Request, dict or Item objects.
+        for i in result:
+            yield i
+
+    def process_spider_exception(self, response, exception, spider):
+        # Called when a spider or process_spider_input() method
+        # (from other spider middleware) raises an exception.
+
+        # Should return either None or an iterable of Response, dict
+        # or Item objects.
+        pass
+
+    def process_start_requests(self, start_requests, spider):
+        # Called with the start requests of the spider, and works
+        # similarly to the process_spider_output() method, except
+        # that it doesn’t have a response associated.
+
+        # Must return only requests (not items).
+        for r in start_requests:
+            yield r
+
+    def spider_opened(self, spider):
+        spider.logger.info('Spider opened: %s' % spider.name)
+
+
+class Image360DownloaderMiddleware(object):
+    # Not all methods need to be defined. If a method is not defined,
+    # scrapy acts as if the downloader middleware does not modify the
+    # passed objects.
+
+    @classmethod
+    def from_crawler(cls, crawler):
+        # This method is used by Scrapy to create your spiders.
+        s = cls()
+        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
+        return s
+
+    def process_request(self, request, spider):
+        # Called for each request that goes through the downloader
+        # middleware.
+
+        # Must either:
+        # - return None: continue processing this request
+        # - or return a Response object
+        # - or return a Request object
+        # - or raise IgnoreRequest: process_exception() methods of
+        #   installed downloader middleware will be called
+        return None
+
+    def process_response(self, request, response, spider):
+        # Called with the response returned from the downloader.
+
+        # Must either;
+        # - return a Response object
+        # - return a Request object
+        # - or raise IgnoreRequest
+        return response
+
+    def process_exception(self, request, exception, spider):
+        # Called when a download handler or a process_request()
+        # (from other downloader middleware) raises an exception.
+
+        # Must either:
+        # - return None: continue processing this exception
+        # - return a Response object: stops process_exception() chain
+        # - return a Request object: stops process_exception() chain
+        pass
+
+    def spider_opened(self, spider):
+        spider.logger.info('Spider opened: %s' % spider.name)
+
+
+class TaobaoDownloaderMiddleWare(object):
+
+    def __init__(self, timeout=None):
+        self.timeout = timeout
+        self.browser = webdriver.Chrome()
+        self.browser.set_window_size(1000, 600)
+        self.browser.set_page_load_timeout(self.timeout)
+
+    def __del__(self):
+        self.browser.close()
+
+    def process_request(self, request, spider):
+        try:
+            self.browser.get(request.url)
+            return HtmlResponse(url=request.url, body=self.browser.page_source,
+                                request=request, encoding='utf-8', status=200)
+        except TimeoutException:
+            return HtmlResponse(url=request.url, status=500, request=request)
+
+    def process_response(self, request, response, spider):
+        return response
+
+    def process_exception(self, request, exception, spider):
+        pass
+
+    @classmethod
+    def from_crawler(cls, crawler):
+        return cls(timeout=10)

+ 55 - 0
Day66-75/code/image360/image360/pipelines.py

@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+# Define your item pipelines here
+#
+# Don't forget to add your pipeline to the ITEM_PIPELINES setting
+# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
+import logging
+
+from pymongo import MongoClient
+from scrapy import Request
+from scrapy.exceptions import DropItem
+from scrapy.pipelines.images import ImagesPipeline
+
+
+logger = logging.getLogger('SaveImagePipeline')
+
+
+class SaveImagePipeline(ImagesPipeline):
+
+    def get_media_requests(self, item, info):
+        yield Request(url=item['url'])
+
+    def item_completed(self, results, item, info):
+        logger.debug('图片下载完成!')
+        if not results[0][0]:
+            raise DropItem('下载失败')
+        return item
+
+    def file_path(self, request, response=None, info=None):
+        return request.url.split('/')[-1]
+
+
+class SaveToMongoPipeline(object):
+
+    def __init__(self, mongo_url, db_name):
+        self.mongo_url = mongo_url
+        self.db_name = db_name
+        self.client = None
+        self.db = None
+
+    def process_item(self, item, spider):
+        return item
+
+    def open_spider(self, spider):
+        self.client = MongoClient(self.mongo_url)
+        self.db = self.client[self.db_name]
+
+    def close_spider(self, spider):
+        self.client.close()
+
+    @classmethod
+    def from_crawler(cls, crawler):
+        return cls(crawler.settings.get('MONGO_URL'),
+                   crawler.settings.get('MONGO_DB'))
+

+ 100 - 0
Day66-75/code/image360/image360/settings.py

@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+
+# Scrapy settings for image360 project
+#
+# For simplicity, this file contains only settings considered important or
+# commonly used. You can find more settings consulting the documentation:
+#
+#     https://doc.scrapy.org/en/latest/topics/settings.html
+#     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
+#     https://doc.scrapy.org/en/latest/topics/spider-middleware.html
+
+BOT_NAME = 'image360'
+
+SPIDER_MODULES = ['image360.spiders']
+NEWSPIDER_MODULE = 'image360.spiders'
+
+MONGO_URL = 'mongodb://120.77.222.217:27017'
+MONGO_DB = 'image360'
+
+
+# Crawl responsibly by identifying yourself (and your website) on the user-agent
+USER_AGENT = 'Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19'
+
+# Obey robots.txt rules
+ROBOTSTXT_OBEY = False
+
+# Configure maximum concurrent requests performed by Scrapy (default: 16)
+CONCURRENT_REQUESTS = 2
+
+# Configure a delay for requests for the same website (default: 0)
+# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
+# See also autothrottle settings and docs
+DOWNLOAD_DELAY = 3
+RANDOMIZE_DOWNLOAD_DELAY = True
+# The download delay setting will honor only one of:
+#CONCURRENT_REQUESTS_PER_DOMAIN = 16
+#CONCURRENT_REQUESTS_PER_IP = 16
+
+# Disable cookies (enabled by default)
+#COOKIES_ENABLED = False
+
+# Disable Telnet Console (enabled by default)
+#TELNETCONSOLE_ENABLED = False
+
+# Override the default request headers:
+#DEFAULT_REQUEST_HEADERS = {
+#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
+#   'Accept-Language': 'en',
+#}
+
+# Enable or disable spider middlewares
+# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
+#SPIDER_MIDDLEWARES = {
+#    'image360.middlewares.Image360SpiderMiddleware': 543,
+#}
+
+# Enable or disable downloader middlewares
+# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
+DOWNLOADER_MIDDLEWARES = {
+    # 'image360.middlewares.Image360DownloaderMiddleware': 543,
+    'image360.middlewares.TaobaoDownloaderMiddleWare': 500,
+}
+
+# Enable or disable extensions
+# See https://doc.scrapy.org/en/latest/topics/extensions.html
+#EXTENSIONS = {
+#    'scrapy.extensions.telnet.TelnetConsole': None,
+#}
+
+IMAGES_STORE = './resources/'
+
+# Configure item pipelines
+# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
+# ITEM_PIPELINES = {
+#     'image360.pipelines.SaveImagePipeline': 300,
+#     'image360.pipelines.SaveToMongoPipeline': 301,
+# }
+
+LOG_LEVEL = 'DEBUG'
+
+# Enable and configure the AutoThrottle extension (disabled by default)
+# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
+#AUTOTHROTTLE_ENABLED = True
+# The initial download delay
+#AUTOTHROTTLE_START_DELAY = 5
+# The maximum download delay to be set in case of high latencies
+#AUTOTHROTTLE_MAX_DELAY = 60
+# The average number of requests Scrapy should be sending in parallel to
+# each remote server
+#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
+# Enable showing throttling stats for every response received:
+#AUTOTHROTTLE_DEBUG = False
+
+# Enable and configure HTTP caching (disabled by default)
+# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
+#HTTPCACHE_ENABLED = True
+#HTTPCACHE_EXPIRATION_SECS = 0
+#HTTPCACHE_DIR = 'httpcache'
+#HTTPCACHE_IGNORE_HTTP_CODES = []
+#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

+ 4 - 0
Day66-75/code/image360/image360/spiders/__init__.py

@@ -0,0 +1,4 @@
+# This package will contain the spiders of your Scrapy project
+#
+# Please refer to the documentation for information on how to create and manage
+# your spiders.

+ 31 - 0
Day66-75/code/image360/image360/spiders/image.py

@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+from json import loads
+from urllib.parse import urlencode
+
+import scrapy
+
+from image360.items import BeautyItem
+
+
+class ImageSpider(scrapy.Spider):
+    name = 'image'
+    allowed_domains = ['image.so.com']
+
+    def start_requests(self):
+        base_url = 'http://image.so.com/zj?'
+        param = {'ch': 'beauty', 'listtype': 'new', 'temp': 1}
+        for page in range(10):
+            param['sn'] = page * 30
+            full_url = base_url + urlencode(param)
+            yield scrapy.Request(url=full_url)
+
+    def parse(self, response):
+        model_dict = loads(response.text)
+        for elem in model_dict['list']:
+            item = BeautyItem()
+            item['title'] = elem['group_title']
+            item['tag'] = elem['tag']
+            item['width'] = elem['cover_width']
+            item['height'] = elem['cover_height']
+            item['url'] = elem['qhimg_url']
+            yield item

+ 31 - 0
Day66-75/code/image360/image360/spiders/taobao.py

@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+from urllib.parse import urlencode
+
+import scrapy
+
+from image360.items import GoodsItem
+
+
+class TaobaoSpider(scrapy.Spider):
+    name = 'taobao'
+    allowed_domains = ['www.taobao.com']
+
+    def start_requests(self):
+        base_url = 'https://s.taobao.com/search?'
+        params = {}
+        for keyword in ['ipad', 'iphone', '小米手机']:
+            params['q'] = keyword
+            for page in range(10):
+                params['s'] = page * 44
+                full_url = base_url + urlencode(params)
+                yield scrapy.Request(url=full_url, callback=self.parse)
+
+    def parse(self, response):
+        goods_list = response.xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]')
+        for goods in goods_list:
+            item = GoodsItem()
+            item['price'] = goods.xpath('div[5]/div[2]/div[1]/div[1]/strong/text()').extract_first()
+            item['deal'] = goods.xpath('div[5]/div[2]/div[1]/div[2]/text()').extract_first()
+            item['title'] = goods.xpath('div[6]/div[2]/div[2]/a/text()').extract_first()
+            yield item
+

BIN
Day66-75/code/image360/resources/t01007dc14e5d9ba99c.jpg


BIN
Day66-75/code/image360/resources/t0100bf3cb6bfbaf619.jpg


BIN
Day66-75/code/image360/resources/t0102719cecb7bbf933.jpg


BIN
Day66-75/code/image360/resources/t01040153281bef0c31.jpg


BIN
Day66-75/code/image360/resources/t0104acadc3f46e94a5.jpg


BIN
Day66-75/code/image360/resources/t0106c74482d74f1f69.jpg


BIN
Day66-75/code/image360/resources/t0107a47a55e15b4088.jpg


BIN
Day66-75/code/image360/resources/t0108659585e5c6fd79.jpg


BIN
Day66-75/code/image360/resources/t0108dc82794264fe32.jpg


BIN
Day66-75/code/image360/resources/t0109066494109ef9d5.jpg


BIN
Day66-75/code/image360/resources/t010cdb2fc590380ba2.jpg


BIN
Day66-75/code/image360/resources/t010eaeb5befe6bd3da.jpg


BIN
Day66-75/code/image360/resources/t010ebf2ec5ab7eed55.jpg


BIN
Day66-75/code/image360/resources/t01113e798f564af05b.jpg


BIN
Day66-75/code/image360/resources/t011763a163ad870dd5.jpg


BIN
Day66-75/code/image360/resources/t0118880c4a56060405.jpg


BIN
Day66-75/code/image360/resources/t011c7e0a3894541511.jpg


BIN
Day66-75/code/image360/resources/t011d088995140f23c4.jpg


BIN
Day66-75/code/image360/resources/t011dc130fbe3c88bea.jpg


BIN
Day66-75/code/image360/resources/t011f0f52dbe5a44c9c.jpg


BIN
Day66-75/code/image360/resources/t011f2aa3c3c3ca3e8b.jpg


BIN
Day66-75/code/image360/resources/t01204279178ca66421.jpg


BIN
Day66-75/code/image360/resources/t01212289c59a8c09f2.jpg


BIN
Day66-75/code/image360/resources/t0121d70ff844efb5f9.jpg


BIN
Day66-75/code/image360/resources/t0121dabf4b71749cfe.jpg


BIN
Day66-75/code/image360/resources/t0122662127e2518bcb.jpg


BIN
Day66-75/code/image360/resources/t0122e587d0aa3bd5f6.jpg


BIN
Day66-75/code/image360/resources/t0122eee4a19d116c86.jpg


BIN
Day66-75/code/image360/resources/t012383a24305385b0e.jpg


BIN
Day66-75/code/image360/resources/t01246e4abdf04e8f44.jpg


BIN
Day66-75/code/image360/resources/t0126171a8b227fe60a.jpg


BIN
Day66-75/code/image360/resources/t0127c5bc8e51178d81.jpg


BIN
Day66-75/code/image360/resources/t012b78d17ad10b28d2.jpg


BIN
Day66-75/code/image360/resources/t012c58704949943139.jpg


BIN
Day66-75/code/image360/resources/t012c60eb0fe0720396.jpg


BIN
Day66-75/code/image360/resources/t012f140107638e0fda.jpg


BIN
Day66-75/code/image360/resources/t012f9eb9266a79c14a.jpg


BIN
Day66-75/code/image360/resources/t013078e0696e393d34.jpg


BIN
Day66-75/code/image360/resources/t0133dea5352f251144.jpg


BIN
Day66-75/code/image360/resources/t0135f5ed12ebfbf723.jpg


BIN
Day66-75/code/image360/resources/t013862476b8fbf7969.jpg


BIN
Day66-75/code/image360/resources/t013bfdb724ccde6227.jpg


BIN
Day66-75/code/image360/resources/t013c82bfe79c770965.jpg


BIN
Day66-75/code/image360/resources/t013cb1e91e02d1a22b.jpg


BIN
Day66-75/code/image360/resources/t013cd39cd3c08d971e.jpg


BIN
Day66-75/code/image360/resources/t013ec9b3fb5cfa24a2.jpg


BIN
Day66-75/code/image360/resources/t01405adfca6387b9ac.jpg


BIN
Day66-75/code/image360/resources/t0143850ac615187626.jpg


BIN
Day66-75/code/image360/resources/t014596f0949435cab8.jpg


BIN
Day66-75/code/image360/resources/t01474a1e9e1dbdc185.jpg


BIN
Day66-75/code/image360/resources/t0149725b31c5bd51be.jpg


BIN
Day66-75/code/image360/resources/t0149dd4f260f4352b8.jpg


BIN
Day66-75/code/image360/resources/t014a03227f1c992296.jpg


BIN
Day66-75/code/image360/resources/t014ac25aa8c0b7f274.jpg


BIN
Day66-75/code/image360/resources/t014c4a3be39db97b7a.jpg


BIN
Day66-75/code/image360/resources/t014d699aac32cb713d.jpg


BIN
Day66-75/code/image360/resources/t01515f76784a2cb70d.jpg


BIN
Day66-75/code/image360/resources/t0154687f04bb6e87c8.jpg


BIN
Day66-75/code/image360/resources/t0154e0c6a3a0195ae5.jpg


BIN
Day66-75/code/image360/resources/t01566484710c51f9eb.jpg


BIN
Day66-75/code/image360/resources/t015761d856727049e8.jpg


BIN
Day66-75/code/image360/resources/t0157d6c71e66dd5324.jpg


BIN
Day66-75/code/image360/resources/t0158e90c6b2261246f.jpg


BIN
Day66-75/code/image360/resources/t015ad37f6400feaa36.jpg


BIN
Day66-75/code/image360/resources/t015cb268bec26b89df.jpg


BIN
Day66-75/code/image360/resources/t015e3979aab2fb94df.jpg


BIN
Day66-75/code/image360/resources/t016004e6a1ad3c9e5b.jpg


BIN
Day66-75/code/image360/resources/t0160c8456511be3c4e.jpg


BIN
Day66-75/code/image360/resources/t0162367ab7e72a28fe.jpg


BIN
Day66-75/code/image360/resources/t016515a354e5d99aa5.jpg


BIN
Day66-75/code/image360/resources/t016692a18144ff13e9.jpg


BIN
Day66-75/code/image360/resources/t016a574a08f712d044.jpg


BIN
Day66-75/code/image360/resources/t016d7fdd276ca1af2c.jpg


BIN
Day66-75/code/image360/resources/t0171bc968d5e0f4bc6.jpg


BIN
Day66-75/code/image360/resources/t0171cc58bc33662afd.jpg


BIN
Day66-75/code/image360/resources/t017617760d184e6bdd.jpg


BIN
Day66-75/code/image360/resources/t0176b4c4f9c948a0ef.jpg


BIN
Day66-75/code/image360/resources/t01780cfa69f094efad.jpg


BIN
Day66-75/code/image360/resources/t0179d7e549f15e2e75.jpg


BIN
Day66-75/code/image360/resources/t017a4bc1542b90029f.jpg


BIN
Day66-75/code/image360/resources/t017c24387821f1820a.jpg


BIN
Day66-75/code/image360/resources/t017d478b5ab2f639ff.jpg


BIN
Day66-75/code/image360/resources/t017f7af599c13d831e.jpg


BIN
Day66-75/code/image360/resources/t018047d23168c301de.jpg


BIN
Day66-75/code/image360/resources/t0183548d072c356557.jpg


BIN
Day66-75/code/image360/resources/t0185e58b9800d4ceb3.jpg


BIN
Day66-75/code/image360/resources/t0186c5788021457c73.jpg


BIN
Day66-75/code/image360/resources/t018a21577372885278.jpg


BIN
Day66-75/code/image360/resources/t018b65f9d7ee73f315.jpg


BIN
Day66-75/code/image360/resources/t018fe0911e35023068.jpg


BIN
Day66-75/code/image360/resources/t01917a7fab2fe4d9b7.jpg


BIN
Day66-75/code/image360/resources/t0192a0336e9399b8da.jpg


Some files were not shown because too many files changed in this diff