From 66672e3a97cc0438028242e074dbdd6b3cadbf55 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:15:17 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From fbf38db8a655e2288044824883c22cd373c15a28 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:15:36 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From efd0a653edb257ca3414a3b003dc69ea6f980f02 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:16:02 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From 7d130950d907f9e67588e19337a5b0ea88a4b828 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:16:30 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From 1f83b8f40e28e128697a15a60e40ac6a2b6f4d64 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:21:08 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../items.py" | 17 ++ .../jd_search.py" | 67 +++++++ .../middlewares.py" | 182 ++++++++++++++++++ .../pipelines.py" | 33 ++++ .../run.py" | 4 + .../settings.py" | 118 ++++++++++++ 6 files changed, 421 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" new file mode 100644 index 00000000..28ea2ab4 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" @@ -0,0 +1,17 @@ +# Define here the models for your scraped items +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/items.html + +import scrapy + + +class JdCrawlerScrapyItem(scrapy.Item): + sku_id = scrapy.Field() + img = scrapy.Field() + price = scrapy.Field() + title = scrapy.Field() + shop = scrapy.Field() + icons = scrapy.Field() + sta_time = scrapy.Field() + keyword = scrapy.Field() \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" new file mode 100644 index 00000000..c5ba7eb3 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" @@ -0,0 +1,67 @@ +import json +from bs4 import BeautifulSoup +from jd_crawler_scrapy.items import JdCrawlerScrapyItem +from scrapy.exceptions import CloseSpider + +import scrapy +import time + +class JDSearch(scrapy.Spider): + name = "jd_search" + + def start_requests(self): + for keyword in ["鼠标", "键盘", "电脑", "耳机"]: + for page_num in range(1,11): + url = f"https://search.jd.com/Search?keyword={keyword}&pag={page_num}" + yield scrapy.FormRequest( + meta = {"keyword":keyword, "sta_date":time.strftime("%Y-%m-%d")}, + dont_filter=False, + url = url, + method = 'GET', + # formdata=data, + callback=self.parse_search, + errback = self.process_error + + + ) + def parse_search(self, response): + + soup = BeautifulSoup(response.text, "lxml") + item_array = soup.select("ul[class='gl-warp clearfix'] li[class='gl-item']") + for item in item_array: + try: + sku_id = item.attrs["data-sku"] + img = item.select("img[data-img='1']") + price = item.select("div[class='p-price']") + title = item.select("div[class='p=name p-name-type-2']") + shop = item.select("div[class='p-shop']") + icons = item.select("div[class='p-icons']") + + img = img[0].attrs['data-lazy-img'] if img else "" + price = price[0].strong.i.text if price else "" + title = title[0].text.strip() if title else "" + shop = shop[0].a.attrs['title'] if shop[0].text.strip() else "" + icons = json.dumps([tag_ele.text for tag_ele in icons[0].select('i')]) if icons else '[]' + + + item = JdCrawlerScrapyItem() + item["img"] = img + item["sku_id"] = sku_id + item["price"] = price + item["title"] = title + item["shop"] = shop + item["icons"] = icons + item["sta_date"] = response.meta["sta_date"] + item["keyword"] = response.meta["keyword"] + + yield item + except Exception as e: + print(e.args) + + def process_error(self, failure): + print(failure) + if "身份已过期" in str(failure.value): + raise CloseSpider + # 记录异常x + # 发送通知 + # 重做任务 \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" new file mode 100644 index 00000000..04e3c61e --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" @@ -0,0 +1,182 @@ +# Define here the models for your spider middleware +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html + +from scrapy import signals +from scrapy.downloadermiddlewares.retry import RetryMiddleware +from scrapy.utils.response import response_status_message +from scrapy.dupefilters import RFPDupeFilter +import random + + + +# useful for handling different item types with a single interface +from itemadapter import is_item, ItemAdapter + +import hashlib +import weakref +from w3lib.url import canonicalize_url +from scrapy.utils.python import to_bytes, to_unicode + +_fingerprint_cache = weakref.WeakKeyDictionary() + + +class JdCrawlerScrapySpiderMiddleware: + # 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, 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 Request 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 JdCrawlerScrapyDownloaderMiddleware: + # 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 CookieMiddware: + def process_request(self,request, spider): + # cookie_pool = [] + # request.headers['cookie'] =cookie_pool.pop() + pass + def process_response(self, request, response, spider): + """ + 根据response返回的信息判断当前cookie身份是否已过期, + :param request: + :param response: + :param spider: + :return: + """ + # if "身份过期" in response.text: + raise Exception("当前cookie身份已过期") + def process_exception(self, request, exception, spider): + # 如果异常是cookie池空了,可以在这里完场cookie池的补充 + # 补充cookie池 + if isinstance(exception, IndexError): + request.meta['retry_time'] -= 1 + return request + + +class UAMiddleware: + def process_request(self, request, spider): + """ + 在正式请求前为当前请求添加hearders + :param request: + :param spider: + :return: + """ + request.headers["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" + + +class MyretryMiddleware(RetryMiddleware): + """ + 解决对方服务器返回正常状态码200,但是根据IP需要进行验证码验证的情况。 + 我们可以通过换IP可以解决验证码,那么就应该重试 + """ + def process_response(self, request, response, spider): + if request.meta.get('dont_retry', False): + return response + if "验证码" in response.text : + reason = response_status_message(response.status) + return self._retry(request, reason, spider) or response + return response + + +class MyRFPDupeFilter(RFPDupeFilter): + """ + 过滤器是在到达下载器之前就生成了过滤指纹,如果我们的下载器中间件报错了,那么指纹过滤任然生效,但是没有实际请求, + 所以我们可以通过一些特殊参数来进行自定义过滤规则 + """ + def request_fingerprint(self, request, include_headers=None, keep_fragments=False): + cache = _fingerprint_cache.setdefault(request, {}) + cache_key = (include_headers, keep_fragments) + if cache_key not in cache: + fp = hashlib.sha1() + fp.update(to_bytes(request.method)) + fp.update(to_bytes(canonicalize_url(request.url, keep_fragments=keep_fragments))) + fp.update(request.body or b'') + fp.update(request.meta.get("batch_no" ,"").encode("utf-8")) + cache[cache_key] = fp.hexdigest() + return cache[cache_key] \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" new file mode 100644 index 00000000..b782279b --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" @@ -0,0 +1,33 @@ +# Define your item pipelines here +# +# Don't forget to add your pipeline to the ITEM_PIPELINES setting +# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html + + +# useful for handling different item types with a single interface +from itemadapter import ItemAdapter +from jd_crawler_scrapy.items import JdCrawlerScrapyItem +import pymysql + + +class JdCrawlerScrapyPipeline: + def __init__(self): + self.mysql_con = None + + + def process_item(self, item, spider): + if not self.mysql_con: + self.mysql_con = pymysql.connect(**spider.settings["MYSQL_CONF"]) + + + + if isinstance(item, JdCrawlerScrapyItem): + cursor = self.mysql_con.cursor() + SQL = """INSERT INTO jd_search(sku_id, img, price, title, shop, icons, sta_time, keyword) + VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}' )""".format( + item['sku_id'], item['img'], item['price'], item['title'], item['shop'], item['icons'], item['sta_time'], item['keyword'] + ) + cursor.execute(SQL) + self.mysql_con.commit() + cursor.close() + return item diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" new file mode 100644 index 00000000..d65b88a0 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" @@ -0,0 +1,4 @@ +from scrapy import cmdline + +command = "scrapy crawl jd_search".split() +cmdline.execute(command) \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" new file mode 100644 index 00000000..66dd68a7 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" @@ -0,0 +1,118 @@ +# Scrapy settings for jd_crawler_scrapy project +# +# For simplicity, this file contains only settings considered important or +# commonly used. You can find more settings consulting the documentation: +# +# https://docs.scrapy.org/en/latest/topics/settings.html +# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html + +BOT_NAME = 'jd_crawler_scrapy' + +SPIDER_MODULES = ['jd_crawler_scrapy.spiders'] +NEWSPIDER_MODULE = 'jd_crawler_scrapy.spiders' + +# Crawl responsibly by identifying yourself (and your website) on the user-agent +# USER_AGENT = 'jd_crawler_scrapy (+http://www.yourdomain.com)' + +# Obey robots.txt rules +# 默认为False,无论当前网页允不允许爬 +ROBOTSTXT_OBEY = False + +#Enable redirect +REDIRECT_ENABLE = False + +# Retry +RETRY_ENABLE = False +RETRY_HTTP_CODES = [500, 502, 503, 504, 408, 429] + +# Configure maximum concurrent requests performed by Scrapy (default: 16) +CONCURRENT_REQUESTS = 1 + + +# Configure a delay for requests for the same website (default: 0) +# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay +# See also autothrottle settings and docs +DOWNLOAD_DELAY = 3 +# 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://docs.scrapy.org/en/latest/topics/spider-middleware.html +# SPIDER_MIDDLEWARES = { +# 'jd_crawler_scrapy.middlewares.JdCrawlerScrapySpiderMiddleware': 543, +# } + +# Enable or disable downloader middlewares +# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +DOWNLOADER_MIDDLEWARES = { + # 'jd_crawler_scrapy.middlewares.JdCrawlerScrapyDownloaderMiddleware': 543, + 'jd_crawler_scrapy.middlewares.UAMiddleware': 100, + 'jd_crawler_scrapy.middlewares.MyretryMiddleware': 200, + 'jd_crawler_scrapy.middlewares.CookieMiddware': 150, +} + +# Enable or disable extensions +# See https://docs.scrapy.org/en/latest/topics/extensions.html +# EXTENSIONS = { +# 'scrapy.extensions.telnet.TelnetConsole': None, +# } + +# Configure item pipelines +# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html +ITEM_PIPELINES = { + 'jd_crawler_scrapy.pipelines.JdCrawlerScrapyPipeline': 300, +} + +# Enable and configure the AutoThrottle extension (disabled by default) +# See https://docs.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://docs.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' + + +# MYSQL CONF +MYSQL_CONF = { + "host": "127.0.0.1", + "user": "root", + "password": "123456", + "db": "tunan_class" +} + + +# LOG +# LOG_FILE = "D:/pythonProject/log/jd_search.log" +LOG_LEVEL = "DEBUG" +# LOG_LEVEL = "ERROR" + + +# DUP +DUPEFILTER_CLASS = 'jd_crawler_scrapy.middlewares.MyRFPDupeFilter' \ No newline at end of file -- Gitee From e52d85d1a80f65842ab8ca56c47e767eb900a4bd Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:25:12 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../items.py" | 17 ++ .../jd_search.py" | 67 +++++++ .../middlewares.py" | 182 ++++++++++++++++++ .../pipelines.py" | 33 ++++ .../run.py" | 4 + .../settings.py" | 118 ++++++++++++ 6 files changed, 421 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/items.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/middlewares.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/pipelines.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/run.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/settings.py" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/items.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/items.py" new file mode 100644 index 00000000..28ea2ab4 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/items.py" @@ -0,0 +1,17 @@ +# Define here the models for your scraped items +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/items.html + +import scrapy + + +class JdCrawlerScrapyItem(scrapy.Item): + sku_id = scrapy.Field() + img = scrapy.Field() + price = scrapy.Field() + title = scrapy.Field() + shop = scrapy.Field() + icons = scrapy.Field() + sta_time = scrapy.Field() + keyword = scrapy.Field() \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" new file mode 100644 index 00000000..c5ba7eb3 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" @@ -0,0 +1,67 @@ +import json +from bs4 import BeautifulSoup +from jd_crawler_scrapy.items import JdCrawlerScrapyItem +from scrapy.exceptions import CloseSpider + +import scrapy +import time + +class JDSearch(scrapy.Spider): + name = "jd_search" + + def start_requests(self): + for keyword in ["鼠标", "键盘", "电脑", "耳机"]: + for page_num in range(1,11): + url = f"https://search.jd.com/Search?keyword={keyword}&pag={page_num}" + yield scrapy.FormRequest( + meta = {"keyword":keyword, "sta_date":time.strftime("%Y-%m-%d")}, + dont_filter=False, + url = url, + method = 'GET', + # formdata=data, + callback=self.parse_search, + errback = self.process_error + + + ) + def parse_search(self, response): + + soup = BeautifulSoup(response.text, "lxml") + item_array = soup.select("ul[class='gl-warp clearfix'] li[class='gl-item']") + for item in item_array: + try: + sku_id = item.attrs["data-sku"] + img = item.select("img[data-img='1']") + price = item.select("div[class='p-price']") + title = item.select("div[class='p=name p-name-type-2']") + shop = item.select("div[class='p-shop']") + icons = item.select("div[class='p-icons']") + + img = img[0].attrs['data-lazy-img'] if img else "" + price = price[0].strong.i.text if price else "" + title = title[0].text.strip() if title else "" + shop = shop[0].a.attrs['title'] if shop[0].text.strip() else "" + icons = json.dumps([tag_ele.text for tag_ele in icons[0].select('i')]) if icons else '[]' + + + item = JdCrawlerScrapyItem() + item["img"] = img + item["sku_id"] = sku_id + item["price"] = price + item["title"] = title + item["shop"] = shop + item["icons"] = icons + item["sta_date"] = response.meta["sta_date"] + item["keyword"] = response.meta["keyword"] + + yield item + except Exception as e: + print(e.args) + + def process_error(self, failure): + print(failure) + if "身份已过期" in str(failure.value): + raise CloseSpider + # 记录异常x + # 发送通知 + # 重做任务 \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/middlewares.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/middlewares.py" new file mode 100644 index 00000000..04e3c61e --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/middlewares.py" @@ -0,0 +1,182 @@ +# Define here the models for your spider middleware +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html + +from scrapy import signals +from scrapy.downloadermiddlewares.retry import RetryMiddleware +from scrapy.utils.response import response_status_message +from scrapy.dupefilters import RFPDupeFilter +import random + + + +# useful for handling different item types with a single interface +from itemadapter import is_item, ItemAdapter + +import hashlib +import weakref +from w3lib.url import canonicalize_url +from scrapy.utils.python import to_bytes, to_unicode + +_fingerprint_cache = weakref.WeakKeyDictionary() + + +class JdCrawlerScrapySpiderMiddleware: + # 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, 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 Request 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 JdCrawlerScrapyDownloaderMiddleware: + # 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 CookieMiddware: + def process_request(self,request, spider): + # cookie_pool = [] + # request.headers['cookie'] =cookie_pool.pop() + pass + def process_response(self, request, response, spider): + """ + 根据response返回的信息判断当前cookie身份是否已过期, + :param request: + :param response: + :param spider: + :return: + """ + # if "身份过期" in response.text: + raise Exception("当前cookie身份已过期") + def process_exception(self, request, exception, spider): + # 如果异常是cookie池空了,可以在这里完场cookie池的补充 + # 补充cookie池 + if isinstance(exception, IndexError): + request.meta['retry_time'] -= 1 + return request + + +class UAMiddleware: + def process_request(self, request, spider): + """ + 在正式请求前为当前请求添加hearders + :param request: + :param spider: + :return: + """ + request.headers["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" + + +class MyretryMiddleware(RetryMiddleware): + """ + 解决对方服务器返回正常状态码200,但是根据IP需要进行验证码验证的情况。 + 我们可以通过换IP可以解决验证码,那么就应该重试 + """ + def process_response(self, request, response, spider): + if request.meta.get('dont_retry', False): + return response + if "验证码" in response.text : + reason = response_status_message(response.status) + return self._retry(request, reason, spider) or response + return response + + +class MyRFPDupeFilter(RFPDupeFilter): + """ + 过滤器是在到达下载器之前就生成了过滤指纹,如果我们的下载器中间件报错了,那么指纹过滤任然生效,但是没有实际请求, + 所以我们可以通过一些特殊参数来进行自定义过滤规则 + """ + def request_fingerprint(self, request, include_headers=None, keep_fragments=False): + cache = _fingerprint_cache.setdefault(request, {}) + cache_key = (include_headers, keep_fragments) + if cache_key not in cache: + fp = hashlib.sha1() + fp.update(to_bytes(request.method)) + fp.update(to_bytes(canonicalize_url(request.url, keep_fragments=keep_fragments))) + fp.update(request.body or b'') + fp.update(request.meta.get("batch_no" ,"").encode("utf-8")) + cache[cache_key] = fp.hexdigest() + return cache[cache_key] \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/pipelines.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/pipelines.py" new file mode 100644 index 00000000..b782279b --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/pipelines.py" @@ -0,0 +1,33 @@ +# Define your item pipelines here +# +# Don't forget to add your pipeline to the ITEM_PIPELINES setting +# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html + + +# useful for handling different item types with a single interface +from itemadapter import ItemAdapter +from jd_crawler_scrapy.items import JdCrawlerScrapyItem +import pymysql + + +class JdCrawlerScrapyPipeline: + def __init__(self): + self.mysql_con = None + + + def process_item(self, item, spider): + if not self.mysql_con: + self.mysql_con = pymysql.connect(**spider.settings["MYSQL_CONF"]) + + + + if isinstance(item, JdCrawlerScrapyItem): + cursor = self.mysql_con.cursor() + SQL = """INSERT INTO jd_search(sku_id, img, price, title, shop, icons, sta_time, keyword) + VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}' )""".format( + item['sku_id'], item['img'], item['price'], item['title'], item['shop'], item['icons'], item['sta_time'], item['keyword'] + ) + cursor.execute(SQL) + self.mysql_con.commit() + cursor.close() + return item diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/run.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/run.py" new file mode 100644 index 00000000..d65b88a0 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/run.py" @@ -0,0 +1,4 @@ +from scrapy import cmdline + +command = "scrapy crawl jd_search".split() +cmdline.execute(command) \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/settings.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/settings.py" new file mode 100644 index 00000000..66dd68a7 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/settings.py" @@ -0,0 +1,118 @@ +# Scrapy settings for jd_crawler_scrapy project +# +# For simplicity, this file contains only settings considered important or +# commonly used. You can find more settings consulting the documentation: +# +# https://docs.scrapy.org/en/latest/topics/settings.html +# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html + +BOT_NAME = 'jd_crawler_scrapy' + +SPIDER_MODULES = ['jd_crawler_scrapy.spiders'] +NEWSPIDER_MODULE = 'jd_crawler_scrapy.spiders' + +# Crawl responsibly by identifying yourself (and your website) on the user-agent +# USER_AGENT = 'jd_crawler_scrapy (+http://www.yourdomain.com)' + +# Obey robots.txt rules +# 默认为False,无论当前网页允不允许爬 +ROBOTSTXT_OBEY = False + +#Enable redirect +REDIRECT_ENABLE = False + +# Retry +RETRY_ENABLE = False +RETRY_HTTP_CODES = [500, 502, 503, 504, 408, 429] + +# Configure maximum concurrent requests performed by Scrapy (default: 16) +CONCURRENT_REQUESTS = 1 + + +# Configure a delay for requests for the same website (default: 0) +# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay +# See also autothrottle settings and docs +DOWNLOAD_DELAY = 3 +# 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://docs.scrapy.org/en/latest/topics/spider-middleware.html +# SPIDER_MIDDLEWARES = { +# 'jd_crawler_scrapy.middlewares.JdCrawlerScrapySpiderMiddleware': 543, +# } + +# Enable or disable downloader middlewares +# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +DOWNLOADER_MIDDLEWARES = { + # 'jd_crawler_scrapy.middlewares.JdCrawlerScrapyDownloaderMiddleware': 543, + 'jd_crawler_scrapy.middlewares.UAMiddleware': 100, + 'jd_crawler_scrapy.middlewares.MyretryMiddleware': 200, + 'jd_crawler_scrapy.middlewares.CookieMiddware': 150, +} + +# Enable or disable extensions +# See https://docs.scrapy.org/en/latest/topics/extensions.html +# EXTENSIONS = { +# 'scrapy.extensions.telnet.TelnetConsole': None, +# } + +# Configure item pipelines +# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html +ITEM_PIPELINES = { + 'jd_crawler_scrapy.pipelines.JdCrawlerScrapyPipeline': 300, +} + +# Enable and configure the AutoThrottle extension (disabled by default) +# See https://docs.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://docs.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' + + +# MYSQL CONF +MYSQL_CONF = { + "host": "127.0.0.1", + "user": "root", + "password": "123456", + "db": "tunan_class" +} + + +# LOG +# LOG_FILE = "D:/pythonProject/log/jd_search.log" +LOG_LEVEL = "DEBUG" +# LOG_LEVEL = "ERROR" + + +# DUP +DUPEFILTER_CLASS = 'jd_crawler_scrapy.middlewares.MyRFPDupeFilter' \ No newline at end of file -- Gitee From a8bfee0eeb7dc5a69d1b6646aca39d283ea90daf Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:26:53 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../11-1.JPG" | Bin 0 -> 102676 bytes .../11-2.JPG" | Bin 0 -> 106022 bytes .../11-3.JPG" | Bin 0 -> 98385 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-1.JPG" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-2.JPG" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-3.JPG" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-1.JPG" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-1.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..cec7fb0e9d532f725331d64394a1b4149f7925a9 GIT binary patch literal 102676 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%0D0)~ z73h%rA5|Ea7J*`}*)bOsymGA)&(+@(UFXJv(IeewvBw!R{ORa6;L7DhZBs_hY$=)B zrLI{8_gMn#$b}=L66K`cau>!PP(?7c?M&O}ruu<1tUdT*^JO1@+6O;dGMy#2VT|VN ziBWJ67ouu`^4;<;lW&SqUPcgr=m@`7ab|5D3IKZpjTk*rJnUAgoV59IJY0as#Wu$j zaRiEFv6=Y*UqFc{4k$>ea*PGMJAd4(8m;~^0!;rSE{K_#(71IFkz)N5<=dpa*%9mE z$*B$!O`THqj35LOitoJ*M-VxeAv1KLSD5>5c>cKsu#Z(e(|fS zU=jc3UzQfzs#rnised#>6WgleC2`V?pQO52P)=^;_AZ+bJd6MoqKJ9BF+jV%Lx~1!~G2f*_$IEMSe`!V`Nd5J4Kd{ZQ(_k zY0TZGk2OqIHSrNTHg`BJCl-vUM|{p~3va>CVN>>OQ0S=4ge%bB?K>i$uPo=MUu#mI zjaTZPg2*YgpVcJU(z}9+KuZ`x6$#U=Sx){sH#g^nWb38Z^LgjFVN&7v(gc!`cF_b( zfn5+sWEGdKk>vSJqArC$5fnLT4%w#BRg6RD_!3OVHX;N{*~lD^QUhdHW33pwtOomJ z(OO7L-@J4EXO$|#?AZJvd#-fgVhk?_@JwHtJ6zJh9JYI>_(t*DSEiq7(zstne?6Lr z0mjOHg^py@&_hrY*CKdc#0UKNTDwxf+pn?2Rs4A-5g#D`G$kO$+s7ibsD_m=dL|ZI zw|{A-#8h%Dw=tsUnPN?;{WE-7ig%?P`=kmaJ8@fjzpf)rH$C^2Te>f?URq5Uur-g_ zQH$}wubQ=SIR)&&Lx=W=*QhErbYv^uJ zx&#E2l+K~Mkp=i&e{7}>v;};u!hAS>S8Xh`CgyT`~7;Q zN7bZxP)P#A5{gpj4Rk|g0Ps-06N*&q)0<9CPytP%o#BuzKewzC52fhc(wPDq3mX$k zD14hjMltP#Kb|P66 z?+47$d_VwmP!W2_HJDN#9?}1}d_Q5>(U{O&GYhrNi8dZl28x)NQt+F+O|rzDz?(8C zWM*W{xbmR#Sma`3_?^7YgW9KTyjVStbIwU0X4zL-?D=&!!dk`>lYR>hNBf`WM`EP> zK%|#=gQ7S7!YRJ7NY9P2yK%|0Hd~;^u5Ha>(SdUEmnV`xU(~V0F9&kkBYsJ#SlT&^ z>J4+sa`aG$Jv8Ht`<&1866XmEj7-?!eibFT2odRy-GMX9)fwqJ?*z!wNsZFKl#6|}L|9=p>A&gnNd-6C z#HUnS+&77s&}>id17}K^y!}jeW>+KGBGY*4!?o~$r`Hr+7Q|KeawsjD!5&#%!jpzo z93ylFPQn4&!WU;gCVybnGBiIkbCwGmEd(!8zvv%2M)?VV_TgPm6yR|@hLoM7pfr;+ z^EAWiI?%ZkeSQRc0FwCId1lqbOU^5f-oL>K|2|&;!!M1*gw&Oa5w^Z(LvNi(Uwd(~ zRy_wG?MCr0@8!LM*LbTnmCvO;?ik}U=<1SZljd(*fxWj;&r=kHf`B_t2;#5z1oFwu zY!v@}Wn##$Gbl!PAlKDaJd<(R#I>%yHA?;;z2J)sc8 zp-ekV_}laOmPB_;qPr#0-IC~TNp%04NObTUKN**|`&Gj=jILk-ULnFl&YOCI4?R*o zj@}2!Xwn3;kmwj9OZE;%kq(iQ!3%@zx^I;Fq6!JqY1A#?m*uG&4PkJZF6xC{LyZl;)<+ zj^&Otq1%I(We7D6(Z{(n*R7^SXX93%viIOzbt!mHEB0^B%A1dS!CG;jA?dl!a7rvg z`bpfo>b#}=F(!cfP}=DS$-toC+C5iU*QZXO?uAXlG~5c}ra79cq)Ht8F( zZ(9g$n{N(S<{tT-KIeYIHZha<89of!txG722}}pk;Y<;I^_~$W{FWR6v`74*ABH>m zMsu)?j6|$3OuE|doZ}UHh$Cbvm&d+wuWc{_UPjw+9&)E2+2puX;Omy6&+G8!R->+Z zXsCmva8I-yjSZS4^GRTQ|1G@#CVN7|bbXw$onk*vB!h3gsT=m4mm$BJ_duo}ti#00 zjE$mUN}G8{_C>H}V9e^{4Fwssmrt%crDt+~30wH?&oV6Pg79k)f-|+DY3va5W)j|- zrD}H#rwiGQrw{Od7g|LH%UN|U3yqq4OceKOz+HRk zX)*Nh$I4;lcFIoAK}@VcfQLT4h((Uk(N0zcxN%b_knj$xpd|^=W+V*b#PpanV2rJWwLSZP1Udhc(>8+vfd|s0w$PD=xbP2_s}QI5}cL7-u{G# zy7FQTJagMMS!5EqEhY+lb*OMY$ow5cUzAOvaz3l zU6>0(!)(KYX_1}n7P*u$LWoax2!*Uy6O9JW>5JO=8bh*Nwi|OS$v1^z#+lp>`X11v zXMn`f9-r!r)$2QUZR%UI)L8b)l17MeXO7J6@jBhiQ!K0H4DU;Rf$wt}2y6Tj@|`$O zo~^gmOf~rHS2Ak^j3oKscfaq5t4W)RCW#gm4ckfuWE882R+rU3D9Pmk=Mi%eB8N3J zm`Ipu>MB$Y^1l-pu8+JMX+x;wLJy|0_4!5z&RP>gB|<3>a2d(`P1(0+J+@}uISCf~ z2n{HCU;ZvrF}qw2I=N&ckw9POtA>2X&_4BPTbNqdn?$;~%1YzrHhW}}2!XGuWT`?d zgtP#I7?DGsGx#0WyNulwA_&_<*+otmUQF31wdz~+>Z3&>Yc2rfyNT*UrG5fXr4z2g zGE^Odq$}%))l2Prz>bv2sJ+m;oP8N$gJHd~gYp==n{^w4%$0F+)u6W8msNqb(q40R z$j@pw8ynkXScVSstxL-;&F5QqYh#X0N%f-?xKogT5?`O>EEnD>F;Vu82S1eKrnE@1Y17DyNiCPyU|L2F45a7}>o5W0q^d?Gi|3|vBh(gNQ2NGX3&p0lV3x=SNP?hoOrbDX&8-+ zl+Vt1&%QIYjpl|)gm)-?d`8G<)lQZ({pVLiDMG8f=7l={nUHU(v2BeT8YtvBqMa3I zwm|+IdX(xg?K_`u3&p_^viypMVn5>Me3QV~Wf5&#>|Y?sm1;Vn_Q6TO>IlwLPt00G zXq_Ou3c>w~;Ya>r-JmN&*2GC<^BFkg^vk;<9Am4OdgAwiuw=2BN(JD;`wMa4o5z2p z)f#hn=G7>#S++A+>fw){D)s(#Oix%O&cqh}b_slvyZCkK zV@Aq2>gwmOSFsBWyGplJYmQ)LRl5_GzoGI}di&(cV*%Y_z5C)@ zH8($p{@tidZPT;(5!CE$&NdPuf#~2nj>tA^^tsydtO71#RXayjcIi`_Y@qsq4!HTCwzvmU*Svk`t z)ujB)C;X17!$h*LQk`PxOt7~AhO9G8c;w|#HhZjV=6B9+n$E|4s>e}Op*`=zL;WZ< ze%rhHolt|0 zDY`?C^myKfXdQkZjk_6^pl}m_5M#ye91g{U%0LfR3zWMp%VJ?GB9Ey^KLJyHH6p|T z!HHI_>N{f)mlT*KOVyRZW6k<1fX)^!1 zVbs9OlZmLSk`hl}@WTV~k+^BO)#Q<>veIg%bH~u`W;uz%hlVs!{9+ED!%M+lU7PC( zUEHfZZ<`CoG**tP?He-TZ84Bf-U#$LDmLLlGBqjdLIgLG-hL>$2;C!;BmWT5iwV+U9ztzQB*!rs<#Yb(3PSGf-&rO)&nH#;8bd@ovLRGP~Ju zwqOGyP*FF}2pxPIyxH5~DGKiv?uq&#|dbMo`|uAoE$ z!i5>TLyq^-Tg+aXPcNuB9nJ*5yqja7yLpZBgDIuYd#&;%mH~T}%vS>%9 zITn&Q)#ZDyJJNi@C3;cG=GI>6iPI_wtX6HtjR#<#X;9n~%m=I<77D(TK1IT`iTyS>(z7kkK~Ehx z>7^V&i5eWWHqlmr^3_0>X4p%SQoBOi%KuEdf}EE^3^R?+m=1&YzjF|h zi$A244$hbJMBvw#<+;ekfzOHaW0dL#wHsqa14l>ObHo{HCO~g%zPYb_3Y+WXCl{6< zKFJx= znRsW7A~JDlvJZ#;Bx751#1s1q**Ep_!R6}W z+G>BSCp~zJw3nIp0LR_#!o%wS!Ik_qn-MN2QIX1-HZGWve%xwiraMd(HMzx9s5vWS z`$~LQFAjMt7d5ayHjjE^&8r>K zPiowOFV21iz`d;`-c}NCD~Y$2#M?^Z|Gz7V*Z2Q_pwM|VH<@w;`jlNp)h*VJ48};N z-WR(zf!LHTigTdA`(?DE<<$hdnw!I|lcmwcwGOK|W*%GFKK@i>l2ot)M~sb_cAYIm z$%?$40$yy|Jyn1s}rg23YnNqfZBS2d_|rt`q(Lk{qT$y+bm_K5u;u4G|gARBjH4Ng*^M5+ZSxA>gdLu1!Lvq>3K-0y@&z=yS;3| zaQg@8NZ3sk$DC>{h;F*0zqV+mKv7M{oA0-l6EMzX!>hbh1@N@g4dh8emFmz?@S-%WSOiS1(y*$U z;0{at97~b?nSKzd!?yAp^?t*CGc!9)oH^sXsD5*Z#RtZ|#{D{)29YLSmo2aLx)3q6b26%JC$%|!Ytz|;V!7VP zkR-2WH}Dhi?Tw*F>S{Fk<3aPMV$l$?5|GwCgy%M8O(7+#;idEY8KpxnTyLCTL74vh zAvh|9{?D8j$d_1>k)RRq#$zkOkCDJMy_cT)@#n}$SGYaOOR%Mbp8&%~%2IzP%WOm! zx+_|$T=L9yFHZmjUXA`}epvZq&WRmV<~Lcc=k*hSfT7V-)(q2V=a(YkH>8xp>BwBm zyC>wIycN?2pY>4Q0^n`|aJK-sTL9cG0PaR^=q&*576AAEIRG49zoU!j0EZiw0^6h( zB+tqt9D@*hAbW(|-V3CtCh&@{B)}MmUa0BN=eV zu`AK$RGAu%X}dY*N)CnVlX9MbT&K+vpCj;n2>L zkiP(m`xDpn-&H%JzivSb;~CvN$lh1{+i)B%@-^wgV34VY9`fWpd@}_O=5%-VQHH7Y z9<~d7Vre(AM~qJ?<=7-%ZiX$6#JH69n4e2M>Z+uAda@0$^FM##gt0q68*T8#wTI(CNxv^JVjcS>a1)vc8Xh+b(4ovLE-U7%P^1tTT^m z!*^ado2sMuSbHbfi0kb61uQWIpYIzMet)j{Ugg??SIzlX-F(ZwKW%_YJ@t1Lz)W%> zkDRUAEMQJ%VH!FMkLyAT8P#U8mgrcY%K2Rf^wqX^z}2{H5S#5KBHZY zQ|7>lQZxJV1)w1*cJIARk-2TYwsv@#F~&5XF?QIR)e=0IZ)fvx8NwV`vKh++jkPmDVa}f_*?zB~2Ow}!`ctpiL z6KW~S1nq;9TEBC8z*A2@eo+9==Y=mEG?yJmueq|Dc5*G-B_F{-B%E1@C_aR3BCG2? zHv9jK=o`6&Hyj_Vnvd{?0X*7A;0^t^d<~aKD)gF9eOx8e9i92gYx=h=mTM{^hQ};E zNKjcKd^^?KI_{fQB>PvN7DcD6?*!_gFzv^m{lQ3=70=o|^fit$3R%q&U|0*(DmIU)azyaUiA zU-OySh^`!3%$tcx)CE11M+7F6auS_0k?U{z$Iqa$KTK`m?OhgE5}gtg0_XTHat!j} zZ8cdjyE&Gh0Jo^VLU#CE%``fix92C|Xd@yBtlVoVxrOIYYVewZjZEg=a)Ww7vSZvi zfe4g+x)`;g?5l+9G@Egd>BIQ9%RH;C3P0>5O2O8!tGRE}@`3n#o8~I?l$73B4Lm6E z4=_|fwiU}RS04`G{qm>=l7tE$v(h@YX7{Jj@bEksJr zuA0TY9x=19yT?epb#H{8R+0!+P03$SorM$;7QKCTRUNVdmu89?#Cf=7OjEbTSTWW0 zqA`4v&>?&qDqsV$u!H{&+TMGlJ?+U}d!$=SxeF#P--d$%BuE;n@A57`SS5gY___+4 z(_pV#~DU=#WpCkH_M}FI4k11(!&qh7y;C&4&>l6X@W@ zk(#&5!6~eU8E`2chNm*LX%n+#|4Z1HjOGD}Vs~RU80%d)u@8Gemnh#kqqZjTYELS+ z>VC;9>+ddCWPlC844Uu9>$^W@T$7N8_H{TDx`zvISbL9H;GvtIGq`j+K{A;m#Rx-+ z*u2x0jp5p7EV%YrCJ1cHY+Ey)8w4-X>N{=^07riUCf}ex5aW#yFVor~8G9PqI&l}B zf$(b_dbYM0OEtbQdV*K+cV2`hxB}F{e0qsF_888RfU)m5CdrPNJ!N0NC)l0Y30D%A z6}Rk^I`T;&R5cNyIO$GvVEJ#6Twy1nYBDOXKOI}r!I|PvX5gb^^aPvZ8d5ITo1m7B zOVf1A753XU6l-eHS5#M-4p-gb59!2K0?W@(=E!j9WmOe2jfH}?1gHjy^VtriJSxlbK809R$whnt*(G7S|! zN^9c8ho~NWKjuoYEZV{-!xj6yC=RTkNWe0^GwB)<@kNtr+Q)CtqPD&s22Bsh*&-jeka$7!v}9~wFjDK=dZ#-LsC`6 zGbUeL#-zf&mp@?PU|q&Ma))Kf(;rFcCZKDy87{Rt2sWaJmkn9vGg zQs*-$uYGXm!?Njn62n0%yBw-k-JXXWr`4 z60X51jOyxF6;^X(T2kj_p{!lmr1E!gfO2?BHlqk?WehLh{8^9@{fs=4rXp{A^yM7O zBN|DGjsQS6&k-8@z84GWDeGCi>hlyaey}&IaQ8_5LPlI!Ko*J!Kmc7KP)@E}CAaJu zRhVMcm~|pv-65`uGxaO23U!R;bnF$5rVf`KR(;@s{o)VVhj6*Y*^1f_g#FyeY+QDz zeqvvke3sugY-7(MjCNah$V$;P>rc&8o3aXiuXi$i^EVDco@q^tOD)S%$NwGE0rdI< z)6qFSGM#jaBD!M5@oN*REjeA3tI)g?GrOrN$Z|)-vaqaLiWCf#Sa{Mwcpsm8K6KdP zH+(|CTvq{57! zE+2Mc3=?WWmrrlX(1cCpVK5c3Oo}2_k?WZ>hBtK(3Se-x@b)I8odjtOY?LyfG7(G8 z+*Kv`E{RUcTSz2aho|TjY)BJxLD48Q<4z-7=%=)kSM5{G=n$(WS}jV5^R3-P627}A zgseviSj*tqk)t7jP9nsA0u-tlXFG|A7`?=y_6#u@#}^(#d&m`si&yV7@k0HQ6UayQ z)uGI0deu`3bfrH5++gMLgeje4lro#L0gP9@gW>}|$9|&oj4~-w?a|zm{3B-VMKQEX zO~CMWS-Ja~uSiH-mcyiKBlboS%8lRdsfF^KI&cc{=7O$R`@yBsb`NFuk<%wjRV;yi zOvD{E<&o1UR2*KC*Tlree{lHzSD){{`1^`<69-<-T#GEV2Q(FKU4;6eVTrAK9aKMt zjv;9nda@>wl9^qu&1S`B5sZgnP72%`qdbHw*2q2R-}>@ZrzS+aaFe-7%l|lVI-FEugiKPM5=#PIH$$+c*hsA{5oYY*@VTl~IHX*11j2+fE>%~S z*bC!RO^djsRtS_l{q*vh1?#o>dYEI9Prkp@^xnaEmPd(VssuD}%A_R542u!WLyHoR z*$#PiQ$8?z*U_VSXVw1AIyqJ1$ky6Z?s1V!rzwT#N7hq1d&0deQ(@QCtrN;OyD}BV z1#96`>T1#kFR{OMGIhl9J$U@_IWxC>V(po2c3B_x*g9w{?my*h+>X7Csn+8EN6t3< z^Z}f&Dp*1t615N$gp+>?eBbq?MK4>kr=u53KqRjVFy*IRT-Cp6yXheVFTq!!t3mQV z;5=sOe0~kI0$SedTqad2xNl;w+eQJ_1*e}{N|YOQe|{Ny4oN zW<>quS!9a3QBkLef|vPn zb_SkJ)W|&y-jn6N8x?n_ECZ4$o)5X4ioSYD{ThG7;SQOPMB9>{^(4=hS^kz`3&pPF028+aO! zS5R8V+ufoLZrvGt&~66acJ(TZ-_)mTyi_r6W0hgkm^6nO;diFNSL}xu(fCmFPLsm% zfW;W&X2F53JMY^hJ9!$pGmvE;n8uJl8qsg4dKqM?7)p4xA)keoCE$6d#PokISeNN= zGqX8Rk-m``>T$1?D@d>ZVDe=*MlFqLZjC>GvUyHTlC`hy-a(s9BK^h&)h&_XmdNl6 zv)C<>f$)dLfzN4~z)MDl59Ca#%9D#$!<~o@$HMIzvx$GMLx_g+n4QT4j|6C&ZN{}U zpX-3K52?65p^_BVt1pCyL+g}&=R>$9GTagwZix)HM21@;!!42FmdJ2RWVj_V{6bH1 zOJukuGW_2=n{SB>|GS9{6<~IBy#crZ%K1tP-LyilOcmU+*IhcBWUP-MG7nscpCMJo zbAB3>Us}f}wv!Z>)}AGC#xAb6C-L#?L`(Q$al}GogbYe@AC|tybOag4BD8=U-kYP+?S9w;+49C)7|ootA=!6Gppi%q$R zy6uf6_&MJ_v%{hTKHSxTFE{>%jQlsh-rAdQ?alw2?aj9Gj?umA!leVXA{mm-<@cxc z5~r@g893^k*FcH|%X^3U_J83{@n%|>e!Y4Kc9eOPohl(uCGpmqf72I8s7SQz$$QL` zxArffGz`p+vp{K76dFB#( z8*SK?FQ&-hD~D|kEUdLRS`gns8@$#mZ&5M67g?CIF+ju)Dyl#S-zEH5!5Zg}>fQYK zyM!S*A0%dVn0Q+nm6W3K0s=dm@S%six-eWeM6IfK>n6M z?JhxX8|lCx4UbRDa^_8(`3X2Xoy+-wAS(4MjSz_Zw*nzvjr&jj>z$V&eb}NDx}Dii4&>pEU*h8TuLcXsE@e!ShK}QO zF_IFKmCB=S>a6gP z8@}C}5WPF@xD`vy6x}u~-42)s+~1$dYM#SD6GG<5-geHq$!&)l|ohR4qyh1dB5-<->ytzPMzGn}noiE9d^OgnlgUrlLa z!laP|-9E(H^?Y`l_0<_ikG52Vdy&GSQ0?!f5p(Fq>~2i+@OYh`cD-3D@{-~N3FVzs zs*jZ@v^+hQDzVpva?QUN%4;6_x7ql&wT`bwGg?j8nTL_A>TDViGffdl@M=wO;+@yn zZ}&w)Q8FP?Cz=fqiqn*smV!%@hM7;UIzI_G30#9a_#HZN{HKY&eg5oAxE>*pH5~`fBZf4exL5=(nIa zcamL<0}9LwQ8cFTz)|(j{RbzcIQmUbKk@bQm0Q6obAQFcRZjGSG-bd{@VSmGob9k+ zT_p#t-~ZKxLbEtS9?Q${@LSVl(oXTCQetm_J zGF2s5wa>nT-dXpeMIIMh^PcVFtDmnXQc6p`E)T^O-D@pz?b?lkbuH-H&&DV60E4Zh zT(VY{rW6NkjhWKpd|l#_EvbllsYnPcGE|G&-46sx;a=$V@1QmF6EIcMb6+O(bG$My zHj>XAswsvEj-y3HBEq~2cSr%Y5c5)-qRvoNLZ`-2lrk%v)O=>z;Uk&J$(x1mLm&@g)oxXDVNM{2bsmxj7 zxG^#Y6_Vh+2GtV(Hf~#RQ;K%5VV1t6q5q&83){GYAXQ2^bPQ5}1W4wA&9sdjbik}m zM+_Pu6OMi=5m%eK!Nob^xWXR-aFLZXjsS8^L}kBak}@z?YoEL_+dgn(ZN5%OtqcsO zmYbS30qA7xD_P3jSUKa}ZAW7LEyBRt?{@84U_Jv=9COs)-=vsfJ^*O*G$I6=Y>$705#w9uz$S+LU`y0m--z-ySn!I-Kb zCY7ZLvM)R@|Nc>E=27mK@=6z}&&vV2hQSM{I%>F=N?s_txB>&G*9cbwxFpag;nkpQ zxo=PDrPO90JHpn(4x_6+TE{*2BLQ(dvFb2VJSSV84{|MoMmrL7_mrs_r4}~j02jzw zLx*&>eQ1s*TYVCP$eTT-^|pIz?UZjLio?Ra6eLKCkj`}D6E4B8Ex(6kz#To9~}PMdkujny!r;XN~1$x}>l>P~nChx__ zXrK0(qJ;!)s_G3CIIAK*^HsDV0O)bZkkU&U9v;zw>*kj%0YzHl%x%>dNT1zrusREx+=@|2uvL8YtsSAW^Cq zV)TCqs$aa%3Rz2YK+?lrF>x6gxLZtHCYd(4DEO{ijZ+fexxF@<)ZUCV*p}zc(r*Rd zSu4)`XInYZ%3I+VA;1Vh`!@gdFQGi#fF0icAzqFCUCg?)b>-*)aQYOi&k#(Ory%Jb zku3_m=z4rDKoma8Fp1qt$XbDMd~gO23615*rQpzTSI>shTUiCU`G%S{yJE@O)vGJ%7Vp-(vWal9R6Q1>EZ$XNhYWidML5Y#F$a? z_};8u^n!GPKeogp0#dp@EjM08*s}k|A>>#({qrHuTqr}3Z#=)@TX{HuAB_dZwvX*? zdDkSy-?m$mLM@`LYfq{*K*cpeWD!q?RWW~Q!4M_!>xe$U;>C?T+$T_94nCH7tn#Ar zfs0BYh+Y5tV`(3GeISnF!WM153!3-Ma`v7-P0N-}o%u;)mLEdW`z^*>?6ru!MLpwq z*t6%@YFk25%`jCgG`8g1WlZmqxpys#mkpL(@|q48PcRvjS3i*OZ>L6uw?%>Bja0Pp zR;nC-L3;M8$4h-sc`y~Ke6=m*@farq-IUJ@^IMv(4J(g%{4wxwQ+k&s`(57J{u(|f z7rwPd*S<`NCSzj>=|yG8GadmOIn!7UsNZ332FP+!kO*OT=o@d=Z4(*P#~~S-+rLEEsOl6LC!7`GKCJt#t}c(*!patH)#IkmO(@4- zajt!RVtO{&?r-PxbZdmW`$?MB%X<>x!b(bgZ;=h4q7)y1RlBJx#P-Ri&IF84DZ#s? z@3)(uxinEDY^vtfqDbo9LJ6Gu(YolN;77cZOprURmujdw#wJ^UoD|e=&`8(s(^@?od zypkphZ2t*ZJNI(~Q6OWWn5D$3Fk50uxf%E=zh(iW_DUg7NTPV)A{?f!tO=7! z9G8h6YI??Zux=mepWwBRX3;@u6F-8VSZ?7QkS)omyn$944tT8>NU zM_-q{q-o*BlTKD2-KCcW9Yl!Rww-6OZEzOB&6azPYok4!T_uc+`^P_8s*bbbE$VZs zk9-!wGj5j6f(Ho7fBlb9KKktqI5Y;c{F%{zqa?C+f$$SRp}u|T39q~#U~3%xN$=Pl zZ)y&YAXuur;_heVmFG2IuQPj4tO-`@cT_GD?U+0Z$%yQtLZ3lKs5+b@q) z1RIBnZ;(K*<@?N8Y-plr47zvFT#a}=+IQ{AV9JxRdLO@>iJO0D>f-(g9P=fBv4Fpi zv9}Kxto9{T>R~5MoO&YZFxXbp9)0tL)O%&`XH5`VA%;Z>GXI(Q0|5qJ2T5~a1b2%> zubQrcgs?1P(ksqUm$lyZU)kW_{7U66IM@;$VPqex)sP{WiucR#t1UV6eyy1+{JGe^ zI!ni4tb?;PBu)|G{kLFU%7eqDIOw(o{Pe=Y{6}$rnW6N=D`_L?o|DI#P!ZL5Xj}#7 zHWaU2W|gTWLYy#wsGHG5@*e7p%_?Xl5m*}eqIBT!lI4&vPtUN_G2b;t)LfmD4`hwQ z7J6?PNnsMsCg{6pHiU1wF|Y!J_Hg?hbbGE^O82cUH6ORK<(#b5Qws$e3H+8diP%hj| z8;%g+AcY^I)=>i|DlM@peyKI4b>vG|E;UX}n$agOy}1CSPorhFU9a%G>__@+H+69f z$0PT|*;B-|_zIO!_HYHRv~!Uw`VPe4det}q11Xxq{>_7Au*pY>LW;xQIz4_&**Q1K z{EAknx>iD}qioNB?hw$8n5x(bC?RLABe6FoX)W1Fi}+(XRH}uyC$WS&Qq}0_Os>34 z0;r00wyaf5jzYUDm^PeMD`jZ+Roz&Nau8Stx@%D^YjItM31A|@2_>?&=0rs{CR+IH8bn#7nJO2rXxZ9BkL0IcVC(duRY$yWaD7*Gu&%BwWH{tbu{M%OE@`$@ zuDVr5xNOCs*_KJc;92v$#L!^M<~Wo^5pv<+0iGKgnezrJzTXHiN%N6%t3fhx_D0#Y z>k}MCJPGaU6RjJp70T!_-~eRX3H1C(6ce__wogGu3Qj~7EE6DWfY@H%t&lz2Cuk~X z;7oSN{+>M3zo~Wj>A+BnisE=o;~Y_T$G6H@H*fkUz`T>LeAsNMG;vnNMNF@0pJiw! z)a5Yej3A()$d=4T`kXTETph`;XP@(Pc@a+=rcGkJ5)+DIkQkJyV2hFIkT6-deq_-) z;?6zF^Zk!bO@Lv$3MqGoh80=aq*Kst)wrW_x6~j%*WBs5;m1RubNW=)W|B0kEz1Y) zyNc1YJTG)X=L>jQL1Wx9(5tfL-K2=D z5dk2Rkz`LKkM1n(F=#uM^KQzY3DJqL4gVMwrTTs`6}wR&+Z_Heu%0y)IOVZm@Fy^s z^55fItT4mfGEWR!?#{gLP; ziIUk1J4>Gg8B9jP%rL)XHgn9Dg#-rN5p8%YAWVCZ2TFRlTAh%XbXkznY2}nT&Xi{@ z>a-~Ogm!W&4wW|XRq;}K^=_31fq22#YEd&AJ%L;&eK_re7n$=N+^iXE5!%Q$l4)6? z6NJGn=GEAt*n$tPiX~&KJH={kT}ROY2!ILEy#&v@n_c{;Q zqFwCflgjFpHsY=yA2en?`sZg1Y4N&8rUPqVPz2b$tk)FeBSKlth*JN{s#b_p0PrHU#Zf7jUs4x1%vhrhvjXZ_cx6E_2f?l_KmANc_(2WxLp z+b1GanHbXMv_(UI#q=iiSDxM2SlWGWY^b`K6_Yq5jN@=j{%fyYNX*&cU84pHe} zet6+w{GZe5-%qJGylVeA_`*?VF!hZVI{=mSmDo#(yJ~%fa9Zi7NFX(L5zRNcl6Bq(+s41XWj5J>-S(^6E@W{p(D z80enU`2Hl2d=>tw5AQygctD@`rWXUj*c;hb9TeID^d_aXyGs+D~~kp3VBYt$*EpnG4rWlXP08 zg4D<0>-sKf4Gsh-OxkUX~tBz7wm8<8TZ955*Noz)NIfw8(qtVxV70eE+?v<}Wjc{OI~ z3ZBA#{>4`Ie&-5NQ3YYYwu zU85uG*r!rP3dIy|S~0GFG-A6++oFCHqo1rQX*3`UU~R0|kx-o-_UuAl$w|Af%fsF< za|J)MBkr;yf8Z_f(H~+8*R37sVj7@pjK=3vc#SoO;bWnZy&hqio3$hNc)BG*=q#$= z5L2R~Qx8qBrbwfXt6~0nCdt%L@N^&TCJnirJK!fE4B~Lr=-_d7?~ec6IF z{$Ke1HqUsQXZ&BCXRN>B0o+EZ#`r6UCfp*&6uPGh(yXD*X*Q>g*37(rE=7liMMMi+ z2FxXWB>FX=PVQeYvr6>3jWPZ=VvKM_!5=X|b7NkP(B#&bvRaK*tbW|yVK1GPJsIaT>?7f=pH529k z<_lr?1o29+Z2BBw@+V;Ban&a0)wy)NR0#7N$R!?E<-^C8XHBHeOXU{~bJ7gW{gY)= zVKyEDleN+L-L8*CNIWqKx@jHiJ%3ZFb3{*lV{8NpL!$4+9xxUb5l#WIX9|}o z=-Ncq*kr|@#+>@WpLOxI)~~Qb?*0TwXve)7dfx6RG6&-TPpOb;eB|=5y>Hh`G&7DD zCs#AHB)4O9RN&m@%vOLMcD|AC=9R6#i{+O*xUD?I7CBTout6#BphCYzL+mb zMCLNAiQY0jT8&wiarsgD5_0Fo(rMglkZSxq3QwO5z2@4;(Z%!er))TCT26^-35k+~ zC2XY8v=P#rW&Auju$Af!0+?^iT?o><_v$k4DqSD>u$y>RoR$BXwfPBLcs!gC)^h(R zK=0&5_fLTQWdQkv?POJjdu4_z{0aSIMo&LJmbg9CS)k|Q*nUsFhG{1N$sE9~ z&6qHCdckmK6Oye<^zTAl(=n&$b3IR{B}O3nKWbMt3pP^geIK_b z;@JT+woaODR!2(n-21XFgoYvf{1Ib4W<`@GEWLBeH6b#BDhT#I2E9GC%iE+n*`SlH ztMS%sNGp;=Hp&>zuq0aax&6JNLnN%Z^+dNElwGo@#2}YUM-S=P?G8VK!PAExIxD9PQKjyh&Gen>t@dqNeo#`3(~4brs;M0y}{yiB?8jgYf$9(}Rx@gp%wXs=@4rhEqy z9h2c`(Yn{1Bbrrl^hQkImrG)PVutc^E}K!d{4Q_&Znsgx9;0LARo&O0fPoL`^}84i zN2IZWK5vik9dH87Uk?VP#}`Z@duO3l0Rg=65yt!iOp(U1Jt14k$nQ0qh+BcHRF4>* z6rpsBQF*#3z;9vNQ29E%TKKcm_d$#8((#4Lfi3EaswPoK$@?$vW4Gs0U%tdgx2b2iDDUcfBuyrT%lPQW7c(txs z6!L)$(Rgu!$hyDSs|CasAryoclsVCC>>N1(gTTH5pKm-b(G3}0LujH3KInlP7z@#0 zCj!YM?lvs@?4!<-__94TE@HxM({ud6x*UCq&={NPDM>qrN72SIYGEGDU&%a45#$CC zUxFob-Rj7`?pwAqvd4+km8z0uiIc2%`Pkap0HPeABgTQp*BU$z{ix)8YE6{sj% zQ^$!T%O9oRBV{*leZ?H6T{5WaYoNfK9P#F{Y}Fm!10;I+#szO#+F-8wM2{WB%n8jw zj%*I?dneh3C4;kiB_UCpOgMKCDuWjJ0QUt(A8spcr}=%GqWIwx74qp=J*23%I(BP} zb|QUDnFABE@lJeH6Yy|G5r2w)fc=t7v2gH$e@Z6(fh0!HYWNSo`<%ro7hgjYWUZ|N zA#gnD7CVRm!$QhsWbhbWEv0%dv<*B?3I=yaID@HZV}%O(t^iMkgy700-8m}1T`N1$ zV2-HddsW|l0#e%>du146APsnqzCt)_0j|}q_N@1G14g(QDRg{LP<&==@d6}xpNgI$ z8yPWW(li*rV9|v*Vcho*j^VQ`wov%{t9F?BbuHZJ?7K<~r>PrSYFhNxB2wUrqPMsV zaqNVwZuZE0eNZ#kfR=GA_2s8@0rU;0Tc65|KYtBHi4d%ct)4^U{UN09{EnD_GL-ThMOD+>8qC>+R(Ve>#0`PwExt2 z^Ar=P0E^>2<419p03@z(P)8TnS6b(UJWMQZ!lisy=@Ik%T1^jQR(0IV?idiAvVvE#;{>&m6?&$W*9`b)p(AMxxplb%|=A08*gYMHqs zMr|iGCxj`PraGqWXuhRgEMEG#OqNNrkBMfQZqISc5ny{KNrXs{3JToCtYA8Cp?sc8 z`YcyZl$cIQ<9OzN;xbL~`kNMFNI4`ct=i4+$SqAS?b*0fn`U5Yd=VlrLRRK5Mj`Oe zsE)rvyI=q8miBl{d;Is(9zieypCpZk`H6!QkF+s-wpId`_O}}EqTvkoAUor zFo0|89=3;EeJD=<$K%@HAKU)@ugG-_Z>svsKyJ@Fy#62d-a0Dkb?^Tk1O#bNI)x!5 zMY;tgMx>h|q)WO%Bow4Ol$6dPWayOc&Y`=zLGT&RS@*r}eV@HI?z7KtJ)c=X$?iFRq$h`DVu1JV_e~Q3}88I!h`GYIo&$8DXVWQllut2$KT$u84Ny zuO02r!dXpq2t4fCPB&Rz^xZeHWNDtNVgD3ED9Fm**|@c79{M4@zi>0x$ZCVKV+cgE z_S!U1HENuvcGx*}nl8{bZE zR=O<{A{W$rL-|4aON#md*=dEdf@>QLQ=soKx&%G;h%oZ5ZRoLQ3VbR5^-jty(m$C( zm(YIAIR}_Vm{KysVr8XSbDI+~X{6BSbnrhe_HEX32J^6vAT0?-^&u3@{Gp&+W-rHKV9Qz)rcH2N zD`~Wl1603P8ucQXMxaLu#@)E$bkes%=CE3$oQ(fv=V2VQG$nqCU&FWPEKcJ z4$nN6q_0Rg)xf~kgtn)MbBk-J2c5mY+kY4_YMkqCRl2r|r)K3a+bQwqSLhOUg{a6H za;ZqTCwUJlich(LBMYVbG2*SQvdEQjFIF&(BK{5|Bt1$u#5xe5}L=<_=Q$e7p`Aej26SJ^efA7q;lF# z9TBFVEPJ^k8QRM3Pd5!qj$13DYnb@V(%@E=h1$ID36#=!5Ii3-VXlzxo-OZCb4HB#Cz;%ID5}$!1laYVyPm%G5ZfnCP zn}?QT#r+e`@cU;}>vteO|1^c6*q9oknP%g#n`|y0bNAj7zy5ytyeVnE*~+yqe!M%f zjrP&1es$?u=k8k7Lwio2AaiDhd}>IBk58%IosW6Ea8`rYVIO(@h56U7+1Ibx*AE-d zui4lCOoRQJef^q!{hECN?Z@*}m z^vVCfoPCvXT0n$hhbRZgNuw)iM`X7BE8hL|NaW2$fI<&(qjBl)fO|4YH(^=oEwuM=pFjIUcq~LG zW35q99MGaK_A)Xe0uLe9e*3}wb0sctfqUCwV6Rvl^%|J4&UsEolJ8p(5{sS5GuQtv<8sq-m z-=n*!X4|KmmtXou+_7+;PW4l%Qx2UE_7TFAbAvq{dw!bB8UH4`hr64ule%C1EQThu z_gzHj2P&wmQrL3Dzw_#41WmTM&kjxi%JMcyw!g!3+Pom!1`p7zV$?XQU~Nx!nhYH zC74zq@gin=I(YtQgrw&)=DOn*ydyR)JAS-Tq}pv$77zOYOe2d1ru%6{N& z+p>)X^-jmQVY+chLB_#V??J_R%o#o}5|dg^`t{^BU95(Lu!fb#Pk4sY>LVftsmqU& zMqSK^th96PwYkzKB5G8xhBz)Df#kXw+thhGKn^mTX%#qrVC7?3g0Q&imY6_nX!^}f|Osx|r(o|5e4yW&$|q2aP%#bztH zPO_l@a+lq&%9I_-T!WGe_gLSUUfxa0(VX?|M(-efV@V{l9Be{Q?&rEBv{6ApR+`XU zq1pB>SH>Mb+CR=#3+4|D=6k56H~l1%eVk?}`?F(7|DZOf4(0wge(mVXcK@}qn(ClF z?g6t|=jcp-t%{Ge;T*xvso!WG%(6sD4m;jw=HCBQSh!1d=v$q)>(NCV);&zz=aOAo zOxBCv!1JL1KHThm)_fT~p05X;ZnZV1ickn0*hH)}>I593b}S|>RQYCw70zZ5eCbE7 zm7uY=AX~Wi=|T9HN5o%gG68*Vfs-ZB+5@NB63?{8Rc==bCI>&>C2{87FI_uh9NLnYA2MQM-5coefH{_Zj*JJbeX^sa53Z1a|HHC-q+6X%EnikRJiVlN#P%b z|0mmDZOgtON&-zDF;awPSBl)!yZpCe86Iu|$IFHo%Iq*)bkVQdB`2(9WY?>>oQ@I;T(1^*dYB z=6{((4VRcl^gZmH*-L54H?8iAOF#FMUdWv8e@$cLLsy5+%q+nZfaJo=*WSe*?iM^e z*bNtj4X@pZ$5q3LJqDr;Lxig%CpaauI44 ztgZp4yt}6*RxQ~i*2E-Ig1M)iHefkQ1|o-LUS7>wgM6Br`88jZ=+#(MO3YyfR*Q|S z8%0dgzjpLUUkja>82n!H>QTzS#->tk7c%o>6S~fF|G0nFXe+Y|Y%i1QxAo=$zAi|> zUp==YnXR)5_<7F9I8Uaxy36)4us2WpPvzbVHk?pSMC`Q7OeHvP1up%ovKq1_ho=cj zg_*hCe7p=+eZm0~R1=m?t6(7|hg97oZb!2Bd1O`Z3AY-T-ZT{YeP~I!Kr^i=S^W;s z*L1DCIqlzXwH+P&`lp_1i8F<)% zuCFtyfXh+d>-O!mi{!@r8j+m^obDbBV9g9XW|V9DA`NWBsPhy>^AR1|(&_;g&LSMM zNFB&Ko=N(OAI1Kb*pL88j4D2|J3?mP0ZBhr7}$puD>q{2r7tRmxbig|*!Tr3t{C=G z{Yy-IwLy<+>K{*EIzpHzOE*QZPb}oHf#vpKW@pV{`^uQYC8e;KM(tFM(o$=_t9GJ1 z)f<6^@&j`VTTwhl(bMN;iej1dGd^5GqKN0!Yboa5-z1Gp(q=biDTj?qNxYP+lULW} zXsGy5YZUJINXQ|jXeNiwja9#W2hP5B4f?~}WcK+pEojM@^>;vpVKmsh++I`8CciHI z$*YTxn>La{m!lqk5}Ra<{n2W(h#fy8Ah-;cFPXEjs{$b);doqh2+n(%S5IX&2+SSR z!+Xk*^XZ*hCZo)aWYU8-#hVf4EZ5P4pY%e8c+YrIMO^Zv@9%hrW((TE*uDi(0O93B zQ<3A;N7l8^tgk=Ng{7(s`6jibfulGV%}kiiL|^6IDFgwqvVrk(*wThD<5C0n9MM_XR6wO@QUDje-u|Gn{55+pYL1 z_o8zNPSWd#Z!P5%(8(82f=ov%T(unSp3Ynku#fY8kg6a4#<7TK`#207qDTFRc{LK7 zWy0gcB*Xn?vWZJyV7Cn4IDAM}O`jKdVG z$6p)hVKl;Ao$qQvUw^hG=vfY1Y}Ma5dkoXbIOEQD%DIPAgHtfEwzsT|o!Bux>e|D!nEShXGVi1MX*KK>XI!Qmg3`yg zk0%yBMF-^=Mt4N*J`JryKvTBiql)TW!raSF`3BfHBXsCBmr-jHX4Kd|KG$GgGIE!G z?&W1geIeV3i0y=QHR`_caKGZi@k1j6BcZYM*Ve3AHRYhQM@}js&)yXSvT1EVLN55o z6@d;RA~K`QaGyFhPgL%6yl3`qh7J##F$;1U7-+JUrW5t^B^Q|lLI}E=!9%kr(Cel# z)56;Hk_4xAQn1}}a)MOnYSp{SqxFMQL|RxrRcG8JRBX;?ql=ZFei z*|Kicc^KAGoufw(>TqL|C7 zhfhM*@6BdgAinFn%a@<>$Az|WT2F^KXG>=8LCsdLT#RSFh~AN|^drex<+lUIhOn|l ze$aG_#P(MsSTe_au@aoKq*$#WyVe;uBNbRS3$ZwUPv_Va*(2w61CL-M`@7i&>09#V zgr`cg*YV=942xAbA)AdME$N1~0|r|v1W_+PX=iC1WCoY(u#J3MtFY$ZH6!e-4AnxU z@z@D=N-=o1qpp&gE4Uay%v@mj$EDbn5~RBof*9= zw@)BL9`N^|Uw`zwUofy=FtGpAFtFR$LH~=BA}P5J7ej!HlO*K1p?bm! zo7_z*(2pgxdn>gXEw$C|g!cJHEVVFD1QlezBssvjBQ|!-s;={NYRR<88fd`ByUo#0 zyeCt+zmhmhUOmQ1{=#CSAme#W;OdAdP_Gkh32PxbBD9JkMhFoS`ZjPQZT~yq!@|&Z z_L!ig5M*XV$F}^P>``qdv)D>)>#}#EK^^u2QP#ohc;SScPkI&admWu^QKDH!)$DiW zd*14N?6YqbO7dDYgzVba0$r=dzd{e zoE}amRAsR)EQ{=<3F>R8FFP`PBc%H7ku%)2A5rZM$y^I6TM4=*Kw&TKH~?p`x05_F zwv5Oj1Gr(tLvOQc=SCv$;>Wgp)( zJl4CX!1ahWaK>9TlImV?M6*F93R37ja!h#VLo=`}XX9ui&KNxe5>CQL!v~T-b`<*h z9dL5gssd+f{m)Z{>HXvogCg@iBM)0!bRybFHaf0XJ^uZEz;Eg36C};)5U<~?77F83 z>W6h353 zc-Aj?)-QP0*6r{t@Vc9JZ~i8(zp;D5Ag}t_U05K^OS|+)a9CgN&MR|Ar^phL4{fky?c=lW2AC9CBvU3Y_6@Pq1<_uQC@_L01tf;% z$t;yo%za#z=xHEEe{2X)_9SNJFpV;EdLl{}XFe8rZx<=oo|J$Y?Y$zx>{9N0=n~Ma zeBAR!`rANkVE^U0XJ>pAjOFaZiS^FP{!Yfgv$Y9Ow$|i_St4VW;wlql(A6X#xrgJo zZV)R~d6eYPtjM{9_|U!*n zX*#swboroylsQfj4@s~wBu&34+jL4wrug7z^OjrO}1dFQS-6)m2p2-P>zD)khZ&{<}% z`xP%6%Sw4-tv!`>&3#@*DPBH>UTn{pe?ZPE`oD$h2X5`KrjEa%FA56bZbHm%#&1oZ z0yA3^?x~=~QF8cDo_A9)nhxpWx)93U^p_Nar!d7W3n`cwVwN=khZ-GP;i!&$^ZT-L zoIBTV;S4U6!>U#V?Px;Wtp*(INvO287%HB)4-7`MljafV)J->#U%_kKiAZKbrcx)- zM_PoqIZjx*?yOd>1pYYnqFg;#bn+b&r)?fD?-Fvg;)d-Mm?)WI&>=)uW+eDbE#K43 zh-*k9g35oJ%&7bRT-ID$6>OvS{@KZQz||dX&xcwkWz8_Hc0p-UK@%!zypHV60#p(I z)Ni_MqXCvj*SIE%(BYlbQcDrVEBju6`};!@kCT{W<|qimU`C z*P`(^fZuv9v+Qix)7+9vs1EZFrEF~-C3rlh`ks0X{U(eOk&m}f$EW&76C8hf;u&q+ z2Zzqcafu@-4@QDM`y9E|&Es#rQ^#g*cMwqx(NE z$tzKG^4l1>d9br*7dew|ADC7nhqJ}+6t&3WF8yVo00=ds_ac6!%MN6=*=#hrbF89x zmpw7QBxB<&e}RQ=tC^p?JfC^Eiwh;bmGuR_UK!T>8|c)#N`pw(#b}S^c(S^2gLi3l ztX-#Fa)HhSB-&YtoaZdNss62I#M1VTL0p zM098&MkTK1eofQZf~|d6t1N{EgVH)Z9Ur`i9qb!~R-%xqAizE+^LBP@$*k{O!@hH#jKm^keC_6`E!Xdx1|29EV%~@>xw3LvSb%NzMQw`9s-?*+ zfl@!&UtV?ik0o98{|F!;m!~_fa)~0*b2&qRvssTHCtofedL+$IA(ehdU3~}iSj3+j zzs@eZ5H#~MD1qMJZA5en5*(&)zykxjNdqnz3Z` z#chzhew(S*sgDY<15u1(y(=Gb@Uj$>5%xss-CnSrlC*Wd|V&4`&r=CTFP|iAWHofWdRco_4ZC zfD5@<-O0|m1)NvP?+K1OPI8tRcIY+kli}Xf%ax#31&_)-Ld-ApbZ{oi>0F`_#402F z@J7ylVZxDjCtRx9HyxbRPN4zR7j0MQ6D~76H*Y(8RzLDaB(K{AW}{YBQB{V+8=PqU zQos)okvM;)w0P_2jL9?Znmsb$kn^aQS)bGj56t9W5%aM>t5#LJ#pXcj*DemXQGo_6 z3w`_I+#PM5Eolpi$S7%wQN}U$Gqf5HZU1fm`6i41~MJyrKe_l==ot!P%pN+E2z{WOz{0!ao zzyce|u9bQ0vT>v-|{+#=mhJxizU*nG^&WDTc8jveOD41$J< zQHh9wATvYmDQ8Y=t`L#tdY-Zo2PStuRU$x*4~kQTD=}JENhzMwfdKE)xbeLT8`m~D$OQ6e%6gC1B&{7vSxP+v3L{KDG#;u%G zrbmq+?H)eS4%TM@Kdo?Vs^HK^v!ow2O)qygMJ<^3!7chc+$DWDpCUl$)Dekz{ECO9 zR0nXmaM5POtfq#H@pIg!PL_@Y0UYXZF;-rM(Z&h)R&^#3+!{OU~q>P-LYO#e)0y1ruIxF$huga)VQj3>>e zWEZpSfyBoZNnizKk`k=3LO}P)khDKb#^7;9*bQ#P+lw#3grAgbUVEVhhlhdPC1HuA!9utt#%+GHg)yD4~vT46n$;9Ayjhq?wB z)0xxGTnc?5wwz|p%@cLwLAs%BLmwH|Q3&w<^gYE@Zf13S)C|PBcBQZ6ZBi$eh2H_+ z;x1BI@Ka9U8>=WT`rE~=TNkmBTB4S8VVSj_`@unHz0t2~yAs|R0+bEy2m#A$e1&L7 z3WL41`5Eg&U}+wVGah|gqCQ)qi5ib5t)T*EkijJnX6=Gz@tUR$6zQq!v<7FZnTtcW z`QwvZPxOkD^zQ&p#dG**4x;w$zO@uV?-Dlp99ITT*=&FdP{q8`Aji16=w8I@e|RqhAP&2S z$Tw}n9&a}@)qmu4ja2=nVLsufqyj3pxh=;8ZwE`ILPw$NC!-BDLvtPPbA4ca^UsQN ziKcr(!P!EcLhdR|_H&uv0az_Hhg01LyH+kAG=`xmxE3(&SYJKbbdVsR`_4tcLxT^h zhzx{jdExBA%YzHhP!BXBDBHH`7*dbbt5N-cWXC1_79(W9RygYG%U}bPmiSD+()|7$ z^@(YXPJ5Tyc*`78@ac!-e0 z8XC;~&B&cuovg(w0ztyS>bcAiYS9wIFUk`oyiZ9H2NEN;-N(dDx8iHI+)`li57B@i z428QaUpVFS&?!KT#6tbqFZxmu(f%;sUAiUthuLk#>9}7SleIwJLRJ!+gCuW>&IXP zhBj0I5a4QuNvn>fu;%W@lhY7OGw1xT6qztN+VP&#R4UW0JjKjIscPAtnTy~ zOg8Z^fk#S)3?-l2Qjp#-AUVby#L|>}UE^J3NZl+zm$Y~P(_xp!C0AMIY!Q-MOk;WJ zOtq_={JYr3-4+alO>wK=Qp8`dnZ0RHC2e23k+fbEa&P{!e)ddy@O4`4$RrxGDSP%; zN;Cv=qc=wW+cvI!yzm&)KLpP|+w}iWKaQNu_YEl1#Z92RW^mVft)?P!bkh306pal+ z(}m&gS^t7YIV6Moi*YjF;&A%)e0ikq6Oiq90P|U1&hlAfW4|JRM{obcw>-hXbrDn6 z0ypQ*>4vr0S_(6}_FkM8#=FL8myMyI-baFu7NfGaq{&wj(qbbiFU-)rRHZssz(h3D zua@!9x6aX12pP=%+#@c?`NRgqYbn9C{I;bVBX25fcv!?*Pyxcw8f+*8(Iwg`X6OaF3 z#wSN49Fp@!NY65BV%FuIQhbX!pspGWb6xAkP;*}yN2J>4q2PDOtlIA~y?GoaJ+?rB(fG^oGwM%L!@Y{vf9*sMD1rjF3;Bg(-Gmn@_d$)v||u6l+(KH z&UCX++S~Rketd^ZDEZ~QlmU%M{(_Q)pha>k@R|QpUsYZ`)s8^;)w^mBe(~;;v0(H6 z#zz-nVC1n-Q}wo!Vn}~fu*_Kyn(!vQbE#?`VE`@PG0%*o$e*Svwq?T1shF|-RVil( zmBJa%yj>57+15)=$qQTt?@iSbz?Et0e{ez28Z8qDF;T4=VM9GCB&$ItLSO&v1bBt5 zr@Z0p@f{$){^Q6Ip~5guvn+!Wc2-Ikl4ayv0@njkzTgX{W*8L9TWbIqp7C)N)YI%Q$BT!=ocZmpTmjudLCS}t(}zQrhhg-gYhEZ% zndtwNZhI_rd{g_?Q+L^D@UPhl{)*Y)XC8}io6$OtG=$d$+#0pvcKpZ|!*WG#Wj>1Z zRRE1pD5~BC#XWqmMD_4a5tS#7#*B_88+$w1jXK$(jp#K0KHA!d%69<8)NJ$ORzMkg zX01hw^vCSy6BP9FO6Yyl7#N02QFEc4G~5?mq*=VT4I(oc-Lp!q9Bei@UtgB z|0f=Iy9arMkbhd3>VU&MnF=lTAZ-Wg^%%n+ASHhUeFXrmKXDZ#ssF>C_ac)vVJo33 zf1pQUAMxy%6B;5uX2{041%}~UNvd#Nl^=NQkJb2GmaO@dn=Sief#xnv;s zB0`){;U5@x2;gKfUy_R%(`E39ECS(r8QN|u{{xLUkzJ{v2DPw|uG2w1Ve+;#sc|?= zPDNqyp7AF_90}ZfBU$9)q)oAI=Ef4O7N77?JmfCtInBaTnu4O>67o=NzGgS30P}5Q z_*tuxiD&voECuzj6`MpXguE22gNh(#U-mVmbRz<~bX3sm39dZADx$rHwG$gDhcbBI z!(%|ptJ(%+yI4Q1I^b@w%+h?)W^A3Tc2z>}BqBF5@0?3LWXbYPm-SPw4(j%fl@8x7 z>Q{zfXB?5*r}Orm4=(dhZVFjq{em7z{@+0r=?Rtk+H4BpJmzop0C3aC@QjG3t$VoUZvVRA7#Pk<) znq9kEQI21D>iA;gY{XUzm(qsBEXM`m6~zfP4{6ASaX%}He$+5FmvZrzS{J_CXFKBET(`UxC|&4QBj-TPpERE#@_1MR?f)t2R(>NvtjFU(_Zrru{$|x1_$&vV)3lot_>5h$yOqD zrQg`K99a^yi_Y(EaQyi$N}cO}DVJXS7vbPW6kHyU{KbsmGONy$*0*fxi)I1$qN@?i zrXTvn>+?aRovaNOYO zs``3+s_*SV8>5>D+tG-J+9xqK?DMzetX&=kE%vaP8SynzQ_eksF2xpBaF31@aht%v z4Q`+{L1+3#bwDhs%gb>!XB=0t85L*Y6^!vw<+qq68fEBpvPRfZf@$!5Vu8cFZ8W;y1_NUNnB>Opt(%hbBQUKUf_X+Xe zY!JZ}M}Jv=Q+na~QK;T?S<=AFb#cd4|2sh3yXWwsD2-op2LgP0pP0t4-3IF( z86H2$z;B&5a58?-4~6L;Fs;``!MZ3={{B8=VdDgB5OwE8M!#tX(bPA|h+yNY&8H7k z{d{0{7N?ewTnhw-Bd>nBH*k3k?;3GC*QkZEXiMTu+mS{?PzOuBQ0(&k(| zRc~f>v0ySt!XEGA9eY1|Ecoe9p~u=Nr_@D7jE}hK+<5w>d}gsc{N}mPhgKm-pRT?I ztC`f*(h_UCXBgBOqRv6hu@E4_&~$pYChWEeJV7{1LK_8Py@k|6i#ohTa7&2t4g%7yjouhoi zZdu%N|LV*g`UBE2u78CrSgYrcviF!AfD{EQHqDc5GG9I$Y8FnnXUWic ziT9%Sf#$6mF8?U+odzZ)Ugj?dD~an}w$rHys*!JY=6t$t7=g9d1$y=5wk=r<^8IA7(Z?95g)jT3sgHQzKSf+eCM>0Q%-Pz|OHrtb9b%)q zM{67?vik_=eU9c6_=wg>KcS||U3@r7WsIsc-l-x~rgcUATT@`3dQuhfyj$Qv!*DGJ za&V;C&BNO2Dut^`-Is?keeM;r;Vhn@A6S zdq%rIv};n1`{nC>9p6|28qyXYK?1U+6}an8!aVjvMki#8`xKWqSPB%W_=NiDlRgh0 zA5S#ne0xiKH_y^}9L?u~mCD|A(Vq7sM#Gd&8XEyhTQ*?zskjzliVt#iVW9o#)A2a@ zkFlE`QoSp8B(~XNtAK`%dnyip=3gU;$x5-rOfb8Qn@ToCoTd*SyiS%qSiatN3uO$U ztI(x_*A}?`s>rbGA01QYtg&qbhUa!Dmg{8Lg+wN^A&ukE1KNyu@~pU`jj)_n0~(?9 zR{P~@CcD8B*i?8#qKzakb<0C z<5!tZ>{xb4_3_dq;%c2di1j*g=I8x$C!+mPwX`iTqK#U@uA3xM?2ZfBr4qwuXMWvV z$YsU9-)1gry+sk7;~wz(HT*28bjy5z{YZQnVZiHM zD7p+&3yEP|{;S?o(9Z6AJZg5@bbWc1M%Giqn zOhN=_vimm)Tpvg7WR9Hih`ACYbcnrVrG2XS4-iM@hS;ERMdrEJ^h=ttC3UGlX}*ki-AokOb-p_`BpQo)GBM(tdV#j^Dyj5H^6IG7C;~O1 zK7In3Rl7WV_`fe`8umGo$*vX7<}F4|NZ z?w(M!-JPihVL2^|5e|*~Rb8At|m62iY^5i>!8(nT|_*=xlPxQvPZ|``i zbIRXs&4Of07DBFPV{e|*z9blPzC-RS)wXJAH^a9J+JYtgc_r(M=|2nh)ktGdjbkt= zx!Uu}cnewwa6Wheoxd~|_BGwsOa1EVwD4^pV4bw}%wp01B*@et_!-_*W+`6R0Hf<$ zFa;!LKAC^nAQ0mIqrj*9-vz!@8yez18d5^*EcKH1w9Z1H=iK-N~}gRdB$XY&GH8J^J-(+5YokTaq&z~v_l zh)T`XC;cC|^gK)v?~^uD6EIZ~>3QjOB|6ZAn;$0wOG*dX9QLryqBJ~BEy165ty*>s zP=qxXa2Ps}_Cf8MYo@82q(3w7BG>hj;&GccwH1tKfi>?=J$VWTTlp0l!xnZ}4U%a? zk~zX@0}Pc;RFNoKlwtoKj~LtGJD{*(m7IjD)<$JzU={b-eVO#HH2x3Oqf6ML%AUek zUG7RFsl$Sg7V>L^XkHRla1UJ!cbbrS`@HB9mOutk*|pr?2(^z{BzFgmL0Isnr0dF( z`(Og<8Ijktih-bu=;s;9a#Y?sFGsm%1QZ6L7O2NlIi97;=~Cl?v*x97ud$ge`RGv+ zvDzWzJ9GOZ{A^-tfwa2V=d;owB(Sk*K^!e+7OTj1QV<>=+LybC$f3MTW$^A~!Hl*` z_05nW^wCuuYq@+u#>ETQa0dJFu@XTg2+ZO#!#OrqNh1Qu=8Lo)U0(}o22N1u1Ct`* zBt}d77ALo{tE{0Ox5NWU{MKe!3XWoi>4+Uba$1Nlgfyg{c*RdU{eieJ5*1 zNc}6sBEZR>y8PBD+?rIFRJ1Xy1BqR*;3^yNc`m`n0D|KVfuRV*f=hvA3n8*SF3mdy zme2;)dj!42_NY;M${HY~7(Ri3t>mWs!j$p2lko#xlgq2#{3>gQIkZh4VIcg5WboEl z{q^&BEd^rS=6l>Z3YDx60{Gwy6x_}S9Y0g`%+mP}V2vL+da`YuFkRj>(CD9=!9-fn z6*9kOX~Sj+=Z;&c&?&LUVCa|{vLfH z@209?#^s%6<;dQt>u^Mjc++P9GJG}+p!Ai`tg){94#1fN{*@!szx!D0f7{Dv`P*E= zAK1-5)WumJVV8P}9CFLu#yJ+gZ9p|7H2#f-1oI}mfjc|LH+279E7W|dwvfMy%IapF zXe*K9YdI5ls&j5n>ipo2&PnvKi4G0r*`(GLqD0Dg?7}s?rn4@83wk_TnyH_oo1?Uo zhQQb$vgHtzHT2Bn+28BTY`mp1xuS2P(7g=XmO5R^+Uc!1Y2{dy`{v83J#pk&!Xh~B z>27kapKxsn{|v@0(q8Hweg|-b7Wxf0J4LKJ#b-6-)+gZ~2ge5BS0wJ{H%m3!?L3v` z=oFkMS<8o>d#7xtpt^c)ij>eyg(g&R?~Ok=RfA7kMGlek;RM=ju0qps9m=sn&hBeJ zQ=&VAiTOSVs!HpkNFL_CP9pz`)@@guEQ7&sJ62IVw@|@<3+88vPTf1aR%d|^+VE@4 zK7;8Ztn)0!57oiiHMDunR`jvj*%(*S3~1QI^uRU1V%h;#sYyYn;TVZfeKZS1@g4!< zP1Sh82k*{ra=Bb%=ha)%!%*vc7u7G_-iM_>caj4JpkelaD8P?cL43e@H?sZH@jm!` z8m_x{zVQ6i_qXBUDU1IB*?4w3{Jj&B9CeMRzO^`ZD|1Qm-^b1h-JD%a#8jLdJ^Z@{ zziM5yNi#PSzi+zCa0F(MrxB;Ix`9KeP~RQwS;okgt5*iO{bc1q-vQL^0U}#4>}!S> zV3D|scT;OO&z=5WiKW1j`{qifUOI$z5$vA$K<#~a%j2(PZmZ?9TQ|5N@HbvcH$iDc ztldR)5yoXXt46LB&g1ET;n;^#o-%yX0P(9BzZCnoi!2cAd!8Mggx9ty-vQ6-3=~HA z)&B$=nujG1A-F5jB! zsb5}9XJCIf|G~?nB2oex1_l%@uV*GB21GYh)sf?^!?M*c`IQeI%;}$Q4z?`-tRuXU zL7l`XMQ@=(k}kmc?q#d(EK4bU;bx}nd{hl4v@#_dziiM0_{d5?4J~63NjE%NfDY}QP{`Fr8U5l zwIYWkqf?g~Hzpqyw7+QzUW(kNNKvV@bVw3uAvu}=Z&Wy~J>y9O7*vJAJmc(`d|WWV zaPcH!ytVX&F8n*@hYV?e^m9Ra-6cwfp&=w^a+Q@yjzkoaM@!0#T`Q=7`)#6o7iz}H zNpq90;$92`>i4I|OKY7J(ure$u&$@1?8Rhs2ylU9h@{$0*S?4^W?fRoIGeTYC##(y zn;cfk71a46`rI}bBAUc78Nu&>-nU+5YB%L_C%kS~GcmRq$255W;#iiQ5cRDt4kENzIfZDNPYQ+Zi80KfdP(@l9L zOVPEp0e7{w>XnS=9Ww$Z0|Sa&vcf%EOP{@aS80kOLBM@i1j(02y$a7p)%m9xAehL| zI1ipUg!3uEo*;?6%6Q`Qisaks{HDYL2-9K-k` zO4bI%nH9IDVVLzw+H@-B6`VJSrwIL8UFH3w2lg)mwDJ@14%fGP8S0RbV7Cmrn!46< z^jiAe0I3`1sISY&je-lrYTj({GM*l>Ufc8b4 zQ*tGin^=`n-rOBnJqn?^8L#`qY01G<7y72SU0CbYiBmh`0WTl|#s8#J@EN50?ExxI zUONWkB(6jtzM9ZEB7Ie7>UV%n%J|kY`X$`T{*3iEthxWmo%`p%vEptC59YyGOEcGR z9!8#*PQD5#66;3C4OtYWK*zE@3^t@l=aPOlWH@$`;EtLo0R(nFBF3d6HWB_R zD&otbQdM46Co;K@%0f+{#rSl#OC+FUvpx56{uKZ|g<>hN>|UhAewIDko^fvFZqc3d zQrb~C!}!pf#)+_7EAk2dSza|^KtqWG`R|jaFkcMImHYKVucdeTIT3d6cbMMv)4LqL zJr$C~mxuxvg?l!~CzFj@I%qrnG_cJ`bHw4|xMtYG2@p-qhgg1$g))x8u_rNa0lRhf zDf_N<);T21-*Ja^Tm?h+itp}3NvXNlV;2SZ>y%tO&L=MLK^psC;rkU3L68~U2eZtr zOM^{z^^Shi1FZ|zz-j1fr}AZ>$&cbzp4(`^F z1Z9MGO~D3K$0w^*7c;b#ky1;zG<-%Opoa*8SRRj}Joriw!4lTKb`p_X!PIB92c z>xl-JUzl|!x`ncjxEFi`;JEd0-p=#>ri^A#OS!Wqa#qYD<`e1BV&f~|>6zF)T%yRq z5{891dKxcDh<(|gQ)$!FJs)qzb(C2z)m&KUfy_(uImAHMz8$Hr--?obWzPiliZ&QCT2Hr)VZc{3lwD| zpWuDT$9V(Q=S3;gQ+O&Qb4`6Ex8LuN+4AofkWP9OBsP1v`9-jrv(p;7fsyp&{51k%rl(cO-!sRV(ZpQfvlHd>0_jR=U zJzZ%>r~NcC`HY3&-3u=#fDQ7qe`Y)p25w^0RgsXUA$-kv)b6PegmXUiGSHpJl3>TTJcjO* zcMijJArWDJ)Ys+;N;z4VE(W)~YwMfWB1PTbBI*bljO;VOW|yZ)LW>$!1f}2^f5Ybn zk?*5zx+A6LaijWpa~=BeCMKrM!|1}_)NFB>kg1N}d5A`47^x6c(Z$ERw-ag?$b(q= zp$%rJG+AR>@tOsi%h`h|DzReISpOy&i@fsE%|5Z7dbrRbiAQ$yIDnOUSYeF5qUKP$ zLaOf>UNG9>T>#3ve%?Z-K%SdA&tAW-xpC`(b=@|e_Ey|2c5w`SBHvmkulqO^=%rnP z%OO=rYl5qJvzz>U6)~JiB+_Qa3vjuF7HXTle_QL+Ml7@KT%Do9Q*usWs)6+VQqwP{ zm+zSRD%cn|rS3(@7a?}=>V8bL^Vs^77RW!%ul^$~HaOrY1@$my>Q3OQ_f;5@cDC~o zcVHBy$;MQ>wQD_w{J@Ib%KCO{JQLl`2J0?N-7>8#2tkqP0~!h<@K7#SNJcHqiy!mW z2^v@bpg7>iM8Z*eQ3MN=p+2eWVzsOLMH2e4OpZmnpM`FY;n3y(Dek(%;oAE3q~Ju9 za1h;u(GnyP1kqA3GSQ<)ixP|>7+uupEg8wEAt73n=)FbMAfiNX(HWx?b==KK&bg-~ z-0ytPbN}PnYp?xlYi7@Hz3YAF9YDzAIWE`V^qchsz><619`s2P-Xt!JG3t3E)O3bd z2C}-KfmB#?@_Ba%AdNt6gq(P&kd|JaEzmA&yP)}r_{h1m$buqgSj3dS!GoajQ};C} zc2ztGmM8_Drw&Z_WmLQ}l!zMq%Ax<RvUZM}=24yLuD5>T-_#Fv((f^NH?~+-R21F_dqWLCIDF0TYtW{q|$cXPNFS4U+tDP zOSu>QPg;Nkb-7*)ZSEY%HZmx$=tj0EDr@KG4qj8Qa z9%U=#urYLfXT9U@WtW!(D&;=z?T0;FpKmrcl59O4Wc^ThD=OjD^a`frjfPf<^fDg` zy4g?5j5Zb=A30Hl(Q*atfkHFvaaHziTfh8B;_KCdQUA{Sx#8BG;IJ=gbb}<@ii@~3 z?lIGMI+H__of4zGR^^xGsgFz9cwyxO-{Y8kVL5T?OZ4l7_KJ>meZ<#3E^Xxn@DhTyVBtbYCX}wS1YdZHXb}<6lA=9p!{NZ^tX6I$ zO4IFEzq_s`R@DZqjv_bRiCrfOk()`H(_77G0X38k*X`1A6e&j<87k5KDvO}V8h$Qk z`-he0<>t9%Xl-P~c(w@2H1A38r@nuqqgbN*4`|Rk8)18(bFydcM26>J@>iLLdU4cA z0E>&O+r);yYxquO^H|yucJYg6v10$wSrvW0vj=M3@h}5U^I%e2;6EladZiuuPvTsi z1qi#!5xUnc*wfXmnd(D>lBpWi=Gep{XM5u-yzx`sbwYv+k7V__|FQ%)oOdc!Pg}-q z;vGQ-F{SLMujIBBJSFX`Sh{Lgi!jDlEYocaVU5f;yllv&(H~$aIT=AlUlGy#mBK09 z^~ynVO2;0j_)t3>|6*h2w!K67t%vd;vtkpGN-mM&G$BNi>X)s<~d;T%h zF~z}6DQeAJAUYzG`xg26%Y6(I_C&>C#_Kfn%4JtC<+ZK#cY1bdj1>CSSRf2y&Rt{0ox zb+0|pZE|$$1Ws=q_>_Ih@b7r;)98Mn9awmX+@A+F84yBxi_y{>)lb8VZZ; zmqT~HyL4?8V;AQ4!efQdvH@%p(?u0qVCm$aD#N8ZN0|2%bjL7+j-g5r@(?-=zgexj z%qt1tZyxM{+AgYh+LEBT&4gXHjCwuC;D-1i(2q)YMH%EDy6w6wslZ?1AzTtp%4tb-4>&3XIuBW3AAZ^=>% z0yu?271`4j_gOmN;RR`5-f z(X2ygt*TrsO@0xI?#5e$In^&oPgVS)Bn0A9AmoD7^le?kUEL(%xWep4MeX^72gKbT zYw*C{)oW?}oEgoCL@h2U@Z7uSQG%c8>8(5m&lAfl`QBMf_Q{-E4Zfr^&<~rEXN|GO zKXrj)lbRCZ(R4;WNvLtx_3R1%j23pO>`sv@>BBNs4+~3>GUsn)zeRs&XErRbiHleY zt_s`%)hi1~Prflyw4J?O|d5u?wGa*T`jBj5x? z)P=kwyrE_C0Men)KEDWFz#Hh(*Z{hx$_3fQIiYN$*XAgemwdoXWmQNJxx86J1)64! zE)v1KtcOxHNx+SwpiJ&597*6KY!i_8m@H!A$a(Hpw6k=OcMWE;cc}ZF;j=of3~^6s zzJikeU=zEFO$njR&@x>a)X>qsMey7>U^xue@fhShQ3;0U9svj2O1$B-Me6Iy>`m2B zYtDVgWXpx*6z@p*2ZkwzenBkMn8|Y+7F=+YT9RGJa;6$yU1FX|XMH*@GX7}|{ri{8 zpe*n7KZ+>^d374Uc;%q6)f%oyS z?*9*{15!*9?5+MAa9Wd>B=N)b_Ul93vKAc7l2EY*^c(2i!u~9&}*XRQ7>s>t0KWyP2KeEVgV$}u&FJApDvmfbfo2XRFsySx*e1utSzfBgbt$ZDht z-ZZIsNNQFc@9q@6CAl8=CGHHJ|6`{C_$e}(2YgQ)E#5Dri8vCKjZKV`d&hA%-zT}2=19Z_KqcJwM8{Pq>u#7R#qB| zTZW|-6Xo8vZg$2ofaX9WggyY)@W)IuhpU9DQz#bM7I)knB_>Ue6r3scH1SoEvNV#T4OyXf|DU5D;_;->9iat(n^=o-4@YW@F?S$MQUtUAKW?GgIAW?@7DEdHeRpT zvgOO|sQy}Esko$BG!-MGCA*Rz#AkA~Vfv;Iora>Tg0x(6v0$xro&r<%fSp&}mU^j% zPoTYbJ4txqwxsL)VCl;E+PfKy3R4}7s1MSo9rQ#du`mC%r?bcTdv&#e$6ryn+ZW9` zuoN{;q$F$sKMz}chP#tDS#$SmS%AVFs5De=*s zp2)a(i^IvYy>9jJj@TgtO{$_4^9xp5Fxnx=XD4C2Dc zk_gx{;cNltm2z@83kG|Due}=NsYAN^HytXlE{crV2qG)L`&!6?`x=^f@)w&7KIfGE zT7NId3h4gZp3wQaPsNq`I~CWB5veONQUW}~cd`vac4v^H7Q_M_3fYyp&Q07m_+^wh z%feNqh|<$ld?)yasEJjVl$9BU5I zE)lo-@W1ZlCNsQ7%gJ(IYE|EdhTbdWF_J$_5`?^X7IKsRULI-_1qX?kuCgnm+lXBZT#lIR)beCuvq z!~47TmKZn8D$9>aA#53i@p$+I$M-X?~(Q}I!EjD&iFLUJm2YwQF? zrsyRpL{&UY=8u3}fZ2R`*0!V17@je73w_hP)t+V)N;psCmCEXHB2)I}zllTl+OGIH zZnd>tH|X@vVGI}bWReuV|F8Tav*9(a^kLBKoQlQ4fl9+r)5~VDnx(OtvK5NsO9P9b zX*`vZ&wRmZHDm)#_s#iA)hP|KG@_)QaBN2}3K>Jtf>rFPRlLz!E^aA-xDARpqr$PT zWNyR9(=r++FR%TOH)ICDCG9MR0(Ydr0eN^4X5gqa9*-7j#AHh5GtK_7-CMd}s}kl4 zfKHL(+1*8sEF1E-hp`wnF5#yk(#$w{;`DdpOer{t1ct1_@25<0Ni;&jI?7GyU~ZdV zfXO(;nk?hi_Kl2IbMoa6F$$9#P;%?182p1D?cJPYS)ckhslV zK`?*d>hZ2&@!5mFsQ&UC>E7ROde>}oR}FZstDDun*{+R1q{NnNaU=2XCxxOeByF=+ zh<6?sE7thUqdE*^u(_!7$;;9L2?A?aRjK*oacU_RhU zd}^}m-vY$3%~~m5v>y(2p%CMM8Sli(o$cEFpa7Bko-Dv_U^*L9%g~Ll2bni49NT3C zyjIjZFpdiSdldGK8T#W2F#ES)qyASAew%FHK_D?4xxd}~n`ssM zG5M`}E*?1j{W$^q;n^RW{1uPMuy79)yPxntpukKrqv!r?+d+oDhroq&)d5JiL>?eS z<9y&W7k&K|N#yYUByszffWUoE>-U@fo+020#ePJ;t&2y0arIAW`1;%0`I|?8-SvPC z-P@jjP3vnQ48Laxs9zvMz`ua2?0>1AI|#%QE*^-z5>VNp0|&(d6arA$ihry-pcuau jJ>V+8B(l=zd%S?!o;p~H@qj;f)#SK;PbE<6d%gbyI{a0I literal 0 HcmV?d00001 diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-3.JPG" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-3.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..563fbcc770e841930f798e9c7c932fae6a5a322b GIT binary patch literal 98385 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 Date: Sun, 21 Mar 2021 21:28:23 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis_test.py" | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/redis_test.py" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/redis_test.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/redis_test.py" new file mode 100644 index 00000000..4f8c55e6 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/redis_test.py" @@ -0,0 +1,5 @@ +import redis + +# 指定使用的database +redis_con = redis.Redis(host='localhost', port=6379, db=0) +redis_con.lpush() -- Gitee From ae7640e35d1ed581c0316e859c1c3be7dae1c662 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:29:55 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../11-4.JPG" | Bin 0 -> 57926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-4.JPG" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-4.JPG" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\270\200\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\270\200\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/11-4.JPG" new file mode 100644 index 0000000000000000000000000000000000000000..aa7fa0aae4f7b5f218c0702027033217882f9c06 GIT binary patch literal 57926 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 literal 0 HcmV?d00001 -- Gitee From 41a30dc5c4bb6fb9a03cf035c1c3f9ebfcc402c4 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:30:39 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=BA=8C=E5=91=A8=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From 7b6690684d686ef13f41a21719bf059d31c46272 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:31:02 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=BA=8C=E5=91=A8=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From cf541ce5a5c3e92d62283518afcdbf2afbc0d815 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:31:14 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=BA=8C=E5=91=A8=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From 2aba8b664b060e88e9d4b94dd62a378579894758 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 21:31:25 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E7=AC=AC=E5=8D=81?= =?UTF-8?q?=E4=BA=8C=E5=91=A8=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/.keep" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/.keep" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 00000000..e69de29b -- Gitee From 64754eed56192de9b60d225d1dada315e70d9f90 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 23:10:56 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=BA=8C=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../items.py" | 17 ++ .../jd_producer.py" | 28 +++ .../jd_search.py" | 66 +++++++ .../middlewares.py" | 182 ++++++++++++++++++ .../pipelines.py" | 33 ++++ .../run.py" | 4 + .../settings.py" | 129 +++++++++++++ 7 files changed, 459 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_producer.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" new file mode 100644 index 00000000..28ea2ab4 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/items.py" @@ -0,0 +1,17 @@ +# Define here the models for your scraped items +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/items.html + +import scrapy + + +class JdCrawlerScrapyItem(scrapy.Item): + sku_id = scrapy.Field() + img = scrapy.Field() + price = scrapy.Field() + title = scrapy.Field() + shop = scrapy.Field() + icons = scrapy.Field() + sta_time = scrapy.Field() + keyword = scrapy.Field() \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_producer.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_producer.py" new file mode 100644 index 00000000..65ee8a23 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_producer.py" @@ -0,0 +1,28 @@ +import redis +import time +import json + +redis_con = redis.Redis(host='localhost', port=6379, db=5) + + +def search_producer(): + for keyword in ["鼠标", "键盘", "电脑", "耳机"]: + for page_num in range(1, 11): + url = f"https://search.jd.com/Search?keyword={keyword}&pag={page_num}" + meta = { + "sta_date": time.strftime("%Y-%m-%d"), + "keyword": keyword, + "page_num": page_num + } + task = json.dumps({ + "url": url, + "body": '', + "method": "GET", + "meta": meta + + }) + redis_con.lpush("jd_search:start_urls", task) + + +if __name__ == "__main__": + search_producer() diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" new file mode 100644 index 00000000..3f255154 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/jd_search.py" @@ -0,0 +1,66 @@ +import json +from bs4 import BeautifulSoup +from jd_crawler_scrapy.items import JdCrawlerScrapyItem +from scrapy.exceptions import CloseSpider +from scrapy_redis.spiders import RedisSpider + +import scrapy +import time + +class JDSearch(RedisSpider): + name = "jd_search" + redis_key =f"{name}:start_urls" + def make_request_from_data(self, data): + task = json.loads(data.decode("utf-8")) + return scrapy.http.FormRequest(url=task['url'], + formdata=json.loads(task['body']) if task['body'] else '', + method=task['method'], + meta=task['meta'], + dont_filter=False, + callback=self.parse_search, + errback=self.process_error + ) + + + + def parse_search(self, response): + + soup = BeautifulSoup(response.text, "lxml") + item_array = soup.select("ul[class='gl-warp clearfix'] li[class='gl-item']") + for item in item_array: + try: + sku_id = item.attrs["data-sku"] + img = item.select("img[data-img='1']") + price = item.select("div[class='p-price']") + title = item.select("div[class='p=name p-name-type-2']") + shop = item.select("div[class='p-shop']") + icons = item.select("div[class='p-icons']") + + img = img[0].attrs['data-lazy-img'] if img else "" + price = price[0].strong.i.text if price else "" + title = title[0].text.strip() if title else "" + shop = shop[0].a.attrs['title'] if shop[0].text.strip() else "" + icons = json.dumps([tag_ele.text for tag_ele in icons[0].select('i')]) if icons else '[]' + + + item = JdCrawlerScrapyItem() + item["img"] = img + item["sku_id"] = sku_id + item["price"] = price + item["title"] = title + item["shop"] = shop + item["icons"] = icons + item["sta_date"] = response.meta["sta_date"] + item["keyword"] = response.meta["keyword"] + + yield item + except Exception as e: + print(e.args) + + def process_error(self, failure): + print(failure) + if "身份已过期" in str(failure.value): + raise CloseSpider + # 记录异常x + # 发送通知 + # 重做任务 \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" new file mode 100644 index 00000000..3929a301 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/middlewares.py" @@ -0,0 +1,182 @@ +# Define here the models for your spider middleware +# +# See documentation in: +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html + +from scrapy import signals +from scrapy.downloadermiddlewares.retry import RetryMiddleware +from scrapy.utils.response import response_status_message +from scrapy.dupefilters import RFPDupeFilter +import random + + + +# useful for handling different item types with a single interface +from itemadapter import is_item, ItemAdapter + +import hashlib +import weakref +from w3lib.url import canonicalize_url +from scrapy.utils.python import to_bytes, to_unicode + +_fingerprint_cache = weakref.WeakKeyDictionary() + + +class JdCrawlerScrapySpiderMiddleware: + # 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, 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 Request 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 JdCrawlerScrapyDownloaderMiddleware: + # 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 CookieMiddware: + def process_request(self,request, spider): + # cookie_pool = [] + # request.headers['cookie'] =cookie_pool.pop() + pass + def process_response(self, request, response, spider): + """ + 根据response返回的信息判断当前cookie身份是否已过期, + :param request: + :param response: + :param spider: + :return: + """ + if "身份过期" in response.text: + raise Exception("当前cookie身份已过期") + def process_exception(self, request, exception, spider): + # 如果异常是cookie池空了,可以在这里完场cookie池的补充 + # 补充cookie池 + if isinstance(exception, IndexError): + request.meta['retry_time'] -= 1 + return request + + +class UAMiddleware: + def process_request(self, request, spider): + """ + 在正式请求前为当前请求添加hearders + :param request: + :param spider: + :return: + """ + request.headers["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" + + +class MyretryMiddleware(RetryMiddleware): + """ + 解决对方服务器返回正常状态码200,但是根据IP需要进行验证码验证的情况。 + 我们可以通过换IP可以解决验证码,那么就应该重试 + """ + def process_response(self, request, response, spider): + if request.meta.get('dont_retry', False): + return response + if "验证码" in response.text : + reason = response_status_message(response.status) + return self._retry(request, reason, spider) or response + return response + + +class MyRFPDupeFilter(RFPDupeFilter): + """ + 过滤器是在到达下载器之前就生成了过滤指纹,如果我们的下载器中间件报错了,那么指纹过滤任然生效,但是没有实际请求, + 所以我们可以通过一些特殊参数来进行自定义过滤规则 + """ + def request_fingerprint(self, request, include_headers=None, keep_fragments=False): + cache = _fingerprint_cache.setdefault(request, {}) + cache_key = (include_headers, keep_fragments) + if cache_key not in cache: + fp = hashlib.sha1() + fp.update(to_bytes(request.method)) + fp.update(to_bytes(canonicalize_url(request.url, keep_fragments=keep_fragments))) + fp.update(request.body or b'') + fp.update(request.meta.get("batch_no" ,"").encode("utf-8")) + cache[cache_key] = fp.hexdigest() + return cache[cache_key] \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" new file mode 100644 index 00000000..b782279b --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/pipelines.py" @@ -0,0 +1,33 @@ +# Define your item pipelines here +# +# Don't forget to add your pipeline to the ITEM_PIPELINES setting +# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html + + +# useful for handling different item types with a single interface +from itemadapter import ItemAdapter +from jd_crawler_scrapy.items import JdCrawlerScrapyItem +import pymysql + + +class JdCrawlerScrapyPipeline: + def __init__(self): + self.mysql_con = None + + + def process_item(self, item, spider): + if not self.mysql_con: + self.mysql_con = pymysql.connect(**spider.settings["MYSQL_CONF"]) + + + + if isinstance(item, JdCrawlerScrapyItem): + cursor = self.mysql_con.cursor() + SQL = """INSERT INTO jd_search(sku_id, img, price, title, shop, icons, sta_time, keyword) + VALUES ('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}' )""".format( + item['sku_id'], item['img'], item['price'], item['title'], item['shop'], item['icons'], item['sta_time'], item['keyword'] + ) + cursor.execute(SQL) + self.mysql_con.commit() + cursor.close() + return item diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" new file mode 100644 index 00000000..d65b88a0 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/run.py" @@ -0,0 +1,4 @@ +from scrapy import cmdline + +command = "scrapy crawl jd_search".split() +cmdline.execute(command) \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" new file mode 100644 index 00000000..fef41fdf --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/settings.py" @@ -0,0 +1,129 @@ +# Scrapy settings for jd_crawler_scrapy project +# +# For simplicity, this file contains only settings considered important or +# commonly used. You can find more settings consulting the documentation: +# +# https://docs.scrapy.org/en/latest/topics/settings.html +# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +# https://docs.scrapy.org/en/latest/topics/spider-middleware.html + +BOT_NAME = 'jd_crawler_scrapy' + +SPIDER_MODULES = ['jd_crawler_scrapy.spiders'] +NEWSPIDER_MODULE = 'jd_crawler_scrapy.spiders' + +# Crawl responsibly by identifying yourself (and your website) on the user-agent +# USER_AGENT = 'jd_crawler_scrapy (+http://www.yourdomain.com)' + +# Obey robots.txt rules +# 默认为False,无论当前网页允不允许爬 +ROBOTSTXT_OBEY = False + +#Enable redirect +REDIRECT_ENABLE = False + +# Retry +RETRY_ENABLE = False +RETRY_HTTP_CODES = [500, 502, 503, 504, 408, 429] + +# Configure maximum concurrent requests performed by Scrapy (default: 16) +CONCURRENT_REQUESTS = 1 + + +# Configure a delay for requests for the same website (default: 0) +# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay +# See also autothrottle settings and docs +DOWNLOAD_DELAY = 3 +# 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://docs.scrapy.org/en/latest/topics/spider-middleware.html +# SPIDER_MIDDLEWARES = { +# 'jd_crawler_scrapy.middlewares.JdCrawlerScrapySpiderMiddleware': 543, +# } + +# Enable or disable downloader middlewares +# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html +DOWNLOADER_MIDDLEWARES = { + # 'jd_crawler_scrapy.middlewares.JdCrawlerScrapyDownloaderMiddleware': 543, + 'jd_crawler_scrapy.middlewares.UAMiddleware': 100, + 'jd_crawler_scrapy.middlewares.MyretryMiddleware': 200, + 'jd_crawler_scrapy.middlewares.CookieMiddware': 150, +} + +# Enable or disable extensions +# See https://docs.scrapy.org/en/latest/topics/extensions.html +# EXTENSIONS = { +# 'scrapy.extensions.telnet.TelnetConsole': None, +# } + +# Configure item pipelines +# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html +ITEM_PIPELINES = { + 'jd_crawler_scrapy.pipelines.JdCrawlerScrapyPipeline': 300, +} + +# Enable and configure the AutoThrottle extension (disabled by default) +# See https://docs.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://docs.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' + + +# MYSQL CONF +MYSQL_CONF = { + "host": "127.0.0.1", + "user": "root", + "password": "123456", + "db": "tunan_class" +} + + +# LOG +# LOG_FILE = "D:/pythonProject/log/jd_search.log" +LOG_LEVEL = "DEBUG" +# LOG_LEVEL = "ERROR" + + +# DUP +# DUPEFILTER_CLASS = 'jd_crawler_scrapy.middlewares.MyRFPDupeFilter' + +# Scrapy-redis settings +SCHEDULER = 'scrapy_redis.scheduler.Scheduler' +SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue' +DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' + +# Redis setings +REDIS_HOST = 'localhost' +REDIS_PORT = 6379 +# Redis 参数配置 +REDIS_PARAMS = {'db': 5} \ No newline at end of file -- Gitee From 18ebf7902f5543aae1f18b41252c7d0dc4c8efe8 Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 23:13:17 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=BA=8C=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jd_search.py" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" new file mode 100644 index 00000000..5e0ee072 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/jd_search.py" @@ -0,0 +1,34 @@ +from selenium import webdriver +from jd_crawler.jd_parser import search +import time + + +class webdriver_set: + driver_path = r"D:\drivers\chromedriver.exe" + chrome_options = webdriver.ChromeOptions() + chrome_options.add_argument("disable-blink-features=AutomationControlled") + + + +class webdriver_com: + def sim_search(keyword, url): + browser.get(url) + search_input = browser.find_element_by_css_selector('input[aria-label="搜索"]') + print(search_input) + search_input.send_keys(keyword) + search_button = browser.find_element_by_css_selector('button[aria-label="搜索"]') + search_button.click() + +browser = webdriver.Chrome(executable_path=webdriver_set.driver_path, chrome_options=webdriver_set.chrome_options) + +def main(keyword, url): + webdriver_com.sim_search(keyword, url) + time.sleep(5) + item_array = search.parse_jd_item(browser.page_source) + print(item_array) + browser.close() + + +if __name__ == "__main__": + jd_url = "https://www.jd.com/" + main("鼠标", jd_url) -- Gitee From fbface5d555339eec097bca4974c55a24d9cb74a Mon Sep 17 00:00:00 2001 From: banchui <1204335622@qq.com> Date: Sun, 21 Mar 2021 23:14:29 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=BA=8C=E5=91=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jd_search.py" | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 "\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/jd_search.py" diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/jd_search.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/jd_search.py" new file mode 100644 index 00000000..4216bf3b --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/5\347\217\255/5\347\217\255_\345\271\264\350\275\273\344\272\272\344\270\215\350\256\262\345\220\276\345\276\267/\347\254\254\345\215\201\344\272\214\345\221\250\344\275\234\344\270\232/\347\254\254\345\215\201\344\272\214\345\221\250\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/jd_search.py" @@ -0,0 +1,68 @@ +from selenium import webdriver +from jd_crawler.jd_parser import search +from selenium.webdriver import ActionChains +from selenium.webdriver.common.keys import Keys +import time + + +driver_path = r"D:\drivers\chromedriver.exe" + + + + +class Jdsearch: + def __init__(self, proxy=None, ua=None, headless=False, user_dir=None): + chrome_options = webdriver.ChromeOptions() + chrome_options.add_argument("disable-blink-features=AutomationControlled") + if proxy: + chrome_options.add_argument(f"--proxy-server={proxy}") + if ua: + chrome_options.add_argument(f"--user-agent={ua}") + if headless: + chrome_options.add_argument("--headless") + if user_dir: + chrome_options.add_argument(f"--user-data-dir={user_dir}") + self.browser = webdriver.Chrome(executable_path=driver_path, chrome_options=chrome_options) + self.browser.maximize_window() + # self.browser.set_window_size(width=1660,height=960) + self.browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{ + "source":""" + Object.defineProperty(navigator, 'webdriver', { + get:()=> 'my_webdriver' + }) + """ + }) + + + def sim_search(self, keyword, url): + self.browser.get(url) + search_input = self.browser.find_element_by_css_selector('input[aria-label="搜索"]') + print(search_input) + search_input.send_keys(keyword) + # search_button = self.browser.find_element_by_css_selector('button[aria-label="搜索"]') + # search_button.click() + + + + def main(self, keyword, url): + self.sim_search(keyword, url) + time.sleep(5) + # self.browser.execute_script("window.open('http://baidu.com')") + # self.browser.switch_to.window(self.browser.window_handles[-1]) + ac = ActionChains(self.browser) + search_button = self.browser.find_element_by_css_selector('button[aria-label="搜索"]') + ac.send_keys(Keys.ENTER).perform() + ac.move_to_element(search_button).click().perform() + item_array = search.parse_jd_item(self.browser.page_source) + print(item_array) + self.browser.close() + + +if __name__ == "__main__": + jd_url = "https://www.jd.com/" + proxy = "127.0.0.1:8888" + ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + # user_dir = r"D:\user_data\tmp" + # jd_search = Jdsearch(proxy, ua, headless=False, user_dir=user_dir) + jd_search = Jdsearch(proxy, ua, headless=False) + jd_search.main("鼠标", jd_url) -- Gitee