This commit is contained in:
cwx committed 2023-06-20 21:40:56 +08:00
1 parent e8b153dfbf
commit e6eadefe34
6 files changed
+24 -15

No files matched your search

+6 -2
View File
@@ -29,7 +29,10 @@ def _serialize_to_images(value, result_type=None):
blocks_num = imageUtils.encodeImage(de_str) blocks_num = imageUtils.encodeImage(de_str)
image_name = ComicPath.getFileScrambleImageName(count=count_image, block=blocks_num, suffix=suffix) image_name = ComicPath.getFileScrambleImageName(count=count_image, block=blocks_num, suffix=suffix)
#images_item.append(ImagesItem(image_name=count_image + suffix, image_url=image_src, image_path=image_name)) #images_item.append(ImagesItem(image_name=count_image + suffix, image_url=image_src, image_path=image_name))
if str(image_src).startswith('http'):
images_item.append(image_name) images_item.append(image_name)
else:
images_item.append(image_src)
image_urls.append(image_src) image_urls.append(image_src)
count += 1 count += 1
logging.info(f"images_len: {len(images_item)}") logging.info(f"images_len: {len(images_item)}")
@@ -71,6 +74,7 @@ class ComicItem(Item):
# 年龄分级 # 年龄分级
age_rating = Field(output_processor=TakeFirst()) age_rating = Field(output_processor=TakeFirst())
count = Field()
images_old = Field(serializer=serialize_to_images) images_old = Field(serializer=serialize_to_images)
images = Field(serializer=serialize_to_images) images = Field(serializer=serialize_to_images)
image_urls = Field(serializer=serialize_to_image_urls) image_urls = Field(serializer=serialize_to_image_urls)
@@ -141,8 +145,8 @@ class ComicInfoItem(Item):
Genre = Field(info='genre')# ","流派",True] Genre = Field(info='genre')# ","流派",True]
Tags = Field(info='tags')# ","标签",True] Tags = Field(info='tags')# ","标签",True]
Web = Field()# ","主页",False] Web = Field()# ","主页",False]
#PageCount = Field()# ","总页数",True] PageCount = Field(info='count')# ","总页数",True]
PageCount = Field(info='images',serializer=serializer_info_images_count)# ","总页数",True] #PageCount = Field(info='count',serializer=serializer_info_images_count)# ","总页数",True]
LanguageISO = Field()#","语言",True] LanguageISO = Field()#","语言",True]
AgeRating = Field(info='age_rating')#","年龄分级",False] AgeRating = Field(info='age_rating')#","年龄分级",False]
#Pages = Field(info='images_name', serializer=serializer_info_images_completed)#","页码",True] #Pages = Field(info='images_name', serializer=serializer_info_images_completed)#","页码",True]
+5 -1
View File
@@ -1,4 +1,4 @@
import json import json,logging
from scrapy.loader import ItemLoader from scrapy.loader import ItemLoader
class ComicLoader(ItemLoader): class ComicLoader(ItemLoader):
@@ -33,7 +33,11 @@ class ComicLoader(ItemLoader):
if exec is not None: if exec is not None:
values = self.parseExec(values, exec) values = self.parseExec(values, exec)
if index is not None: if index is not None:
try:
values = values[index] values = values[index]
except Exception as e:
logging.error(f"values [{values}] error index [{index}]")
logging.error(e)
self.add_value(field_name, values, *processors, re=re, **kw) self.add_value(field_name, values, *processors, re=re, **kw)
def add_exec(self, field_name, value, str_exec=None, *processors, re=None, **kw): def add_exec(self, field_name, value, str_exec=None, *processors, re=None, **kw):
+6 -3
View File
@@ -25,15 +25,18 @@ class ProxyMiddleware(object):
if len(PROXY_LIST) != 0: if len(PROXY_LIST) != 0:
request.meta["proxy"] = random.choice(PROXY_LIST) request.meta["proxy"] = random.choice(PROXY_LIST)
################################################################
# HTTP/HTTPS文件缓存中间件
################################################################
class MyFilesystemCacheStorage(FilesystemCacheStorage): class MyFilesystemCacheStorage(FilesystemCacheStorage):
def verify_next(self, url): def verify_next(self, url):
logging.info(f"cache url=== {url} {str(url).split('.')[-1]}") logging.debug(f"cache url=== {url} {str(url).split('.')[-1]}")
if str(url).split('.')[-1] not in HTTPCACHE_ALLOW_PREFIXS: if str(url).split('.')[-1] not in HTTPCACHE_ALLOW_PREFIXS:
logging.info(f"取消缓存 === {url}") logging.debug(f"取消缓存 === {url}")
return False return False
else: else:
logging.info(f"开始缓存 === {url}") logging.debug(f"开始缓存 === {url}")
return True return True
def retrieve_response(self, spider: Spider, request: Request): def retrieve_response(self, spider: Spider, request: Request):
+4 -6
View File
@@ -7,15 +7,10 @@
# useful for handling different item types with a single interface # useful for handling different item types with a single interface
import os, scrapy,logging,time,random import os, scrapy,logging,time,random
from Comics import settings from Comics import settings
from Comics.utils.FileUtils import imageUtils
from Comics.utils.FileUtils import fileUtils
from Comics.utils.Constant import ComicPath from Comics.utils.Constant import ComicPath
from Comics.items import ComicItem from Comics.items import ComicItem
from Comics.items import ImagesItem
from scrapy.pipelines.images import ImagesPipeline from scrapy.pipelines.images import ImagesPipeline
from Comics.exporters import ComicInfoXmlItemExporter from Comics.exporters import ComicInfoXmlItemExporter,JsonExport
from Comics.exporters import ItemExporter
from Comics.exporters import JsonExport
from Comics.utils.FileUtils import CBZUtils from Comics.utils.FileUtils import CBZUtils
class ComicsPipeline: class ComicsPipeline:
@@ -25,6 +20,9 @@ class ComicsPipeline:
def process_item(self, item, spider): def process_item(self, item, spider):
if isinstance(item, ComicItem): if isinstance(item, ComicItem):
file = os.path.join(settings.OUTPUT_DIR,"json", item['name'], item['chapter']) file = os.path.join(settings.OUTPUT_DIR,"json", item['name'], item['chapter'])
item['count'] = len(item['images'])
item['images'].append({'src':'icon.jpg', 'scramble': False})
item['image_urls'].append({'src': item['icon'] , 'scramble': False})
data = JsonExport(file=file).export_json(item, if_return=True) data = JsonExport(file=file).export_json(item, if_return=True)
#item['images'] = data['images'] #item['images'] = data['images']
return data return data
+2 -2
View File
@@ -49,8 +49,8 @@ class RmComicSpider(scrapy.Spider):
comic_item = ComicLoader(item=response.meta['item'], response=response) comic_item = ComicLoader(item=response.meta['item'], response=response)
data = comic_item.get_xpath('//script[@id="__NEXT_DATA__"]/text()')[0] data = comic_item.get_xpath('//script[@id="__NEXT_DATA__"]/text()')[0]
str_exec = "props.pageProps." str_exec = "props.pageProps."
#comic_item.add_exec('name', data, str_exec=str_exec+"bookName") comic_item.add_exec('name', data, str_exec=str_exec+"bookName")
#comic_item.add_exec('dep', data, str_exec=str_exec+"description") comic_item.add_exec('dep', data, str_exec=str_exec+"description")
comic_item.add_value('index', response.meta['num']) comic_item.add_value('index', response.meta['num'])
comic_item.add_exec('chapter', data, str_exec=str_exec + "chapterName") comic_item.add_exec('chapter', data, str_exec=str_exec + "chapterName")
comic_item.add_exec('image_urls', data, str_exec+"images") comic_item.add_exec('image_urls', data, str_exec+"images")
+1 -1
View File
@@ -275,7 +275,7 @@ class CBZUtils:
y = 0 y = 0
for filename in filenames: for filename in filenames:
y = y + 1 y = y + 1
print("打包中:" + str(y) + "/" + str(len(filenames)), os.path.join(source_dir, filename)) logging.info(f"打包中:" + str(y) + "/" + str(len(filenames)), os.path.join(source_dir, filename))
zf.write(path.joinpath(filename), arc_dir.joinpath(filename)) zf.write(path.joinpath(filename), arc_dir.joinpath(filename))
zf.close() zf.close()
logging.info(f"打包完成:{target_file}") logging.info(f"打包完成:{target_file}")