我在scrapy中的缓存后端存储了大量的http数据。某些页面包含错误数据。这些网址需要重新安排下次scrapy下载。
我想出了修改scrapy附带的虚拟缓存策略的想法。不幸的是,这似乎不起作用。
任何人都可以看到方法 is_cached_response_fresh 中出现了什么问题?:
import os
import cPickle as pickle
from time import time
from weakref import WeakKeyDictionary
from email.utils import mktime_tz, parsedate_tz
from w3lib.http import headers_raw_to_dict, headers_dict_to_raw
from scrapy.http import Headers
from scrapy.responsetypes import responsetypes
from scrapy.utils.request import request_fingerprint
from scrapy.utils.project import data_path
from scrapy.utils.httpobj import urlparse_cached
class DummyPolicy(object):
def __init__(self, settings):
self.ignore_schemes = settings.getlist('HTTPCACHE_IGNORE_SCHEMES')
self.ignore_http_codes = [int(x) for x in settings.getlist('HTTPCACHE_IGNORE_HTTP_CODES')]
def should_cache_request(self, request):
return urlparse_cached(request).scheme not in self.ignore_schemes
def should_cache_response(self, response, request):
return response.status not in self.ignore_http_codes
def is_cached_response_fresh(self, response, request):
if "thisstring" in response.body.lower():
print "got mobile page. redownload"
return False
else:
return True
def is_cached_response_valid(self, cachedresponse, response, request):
return True
答案 0 :(得分:0)
我认为这里的答案是你的内容很可能是gzip压缩或缩小。
尝试
from scrapy.utils.gz import gunzip
if "thisstring" in gunzip(response.body).lower()
不能说解决方案是多功能的,但很可能它会在你的情况下起作用。