Python 痒蜘蛛:唐';t爬网列表中的站点

Python 痒蜘蛛:唐';t爬网列表中的站点,python,scrapy,Python,Scrapy,目前,我在我的刮痧蜘蛛中有一条规则: rules = [Rule(SgmlLinkExtractor(allow=['/item/\d+']), 'parse_item')] 这意味着所有像www.site.com/item/123654这样的链接都会被提取,然后被解析。/item/后面的数字是唯一的id。爬网的结果将存储在json文件中 此外,我有一个csv文件,其中包含大约200000个已经被爬网的ID,我不希望这些站点再次被爬网以减少服务器负载。假设我创建了一个csv的python列表,

目前,我在我的刮痧蜘蛛中有一条规则:

rules = [Rule(SgmlLinkExtractor(allow=['/item/\d+']), 'parse_item')]
这意味着所有像www.site.com/item/123654这样的链接都会被提取,然后被解析。/item/后面的数字是唯一的id。爬网的结果将存储在json文件中

此外,我有一个csv文件,其中包含大约200000个已经被爬网的ID,我不希望这些站点再次被爬网以减少服务器负载。假设我创建了一个csv的python列表,如下所示:

dontparse = [123111, 123222, 123333, 123444, ...]
现在,我不希望在爬行过程中发现这些链接时忽略这些ID,我希望它们存储在json文件中,只需要info available=true。 如何做到这一点?我应该在*parse_item*函数中添加第二条规则吗

编辑

我的parse_item函数如下所示

def parse_item(self, response):
    sel = Selector(response)
    item = MyItem()
    item['url'] = response.url
    item['name'] = sel.xpath("//h1/text()").extract()
    return item
接受
process\u值
可调用:

一种函数,用于接收从标记中提取的每个值,并 已扫描属性,可以修改该值并返回新值,或 返回
None
以完全忽略链接。如果不给,,
process\u值
默认为
lambda x:x

所以像这样的事情应该会有帮助:

def process_value(value):
    unique_id = re.search(r"/item/(\d+)", value).group(1)
    if unique_id in already_crawled_site_ids:
        return None
    return value

rules = [Rule(SgmlLinkExtractor(allow=['/item/\d+']), 'parse_item', process_value=process_value)]

我没有使用scrapy的经验,但是为什么不在以后使用
if
-子句过滤掉
dontparse
列表呢?或者可以使用SgmlLinkExtractor类的参数之一,请参见此处:。deny_domain等)(顺便说一句:您应该公开更多代码,尤其是
parse_项
-函数,以获得详细答案)