【问题标题】:Scrapy: use pipeline to replace unwanted non-ASCII codeScrapy:使用管道替换不需要的非 ASCII 代码
【发布时间】:2015-10-18 05:22:53
【问题描述】:

根据 Scrapy 结果,标题中有一个不需要的非 ASCII 代码 \u2013(又名 character(150)en dash),例如 u'Director/Senior Director \u2013 Pathology'。我正在尝试使用管道通过常规的, 删除\u2013。但是下面的代码不起作用。也不会报错。

from datetime import datetime
from hashlib import md5
from scrapy.exceptions import DropItem
from twisted.enterprise import adbapi
import re
import string

class ReplaceASC2InTitlePipeline(object):
"""replace unwanted ASCII characters in titles"""

ascii_to_filter = ["\u2013",]

def process_item(self, item, spider):
    for word in self.ascii_to_filter:
        desc = item.get('title')

        if (desc) and word in desc:
            spider.log("\u2013 in '%s' was replace" % (item['title']) )

            item['title']=item['title'].replace("\u2013", ",")
            return item
    else:
        return item

【问题讨论】:

  • 我对 else 部分感到困惑。如果它是一个 for...else 子句,通常会有一个 for 块的中断。还是缩进错了?
  • 该代码是根据我在 Github 上找到的一些代码修改的,这些代码用于丢弃不需要的项目。但我对 Python 没有太多经验。

标签: scrapy scrapy-pipeline


【解决方案1】:

"\u2013" 应该是 unicode,所以只需替换:

ascii_to_filter = ["\u2013",]

与:

ascii_to_filter = [u"\u2013",]

【讨论】:

    【解决方案2】:

    在阅读了这篇 stackoverflow 帖子 Replace non-ASCII characters... 之后,我想出了这段代码,它将过滤掉标题中的所有非 ASCII 字符。对于我的情况,不需要非 ASCII 字符,所以它非常适合我。

    from datetime import datetime
    from hashlib import md5
    from scrapy.exceptions import DropItem
    from twisted.enterprise import adbapi
    import re
    import string
    
    class ReplaceASC2InTitlePipeline(object):
    """replace unwanted non-ASCII characters in titles"""
    
    def process_item(self, item, spider):
    
        def remove_non_ascii(text):
            return ''.join(i for i in text if ord(i)<128)
    
        orig_titl = item.get('title')
        item['title'] = remove_non_ascii(orig_titl) 
    
        if item['title'] != orig_titl:
            spider.log("Non-ASCII character(s) was removed in '%s'" % (item['title']) )
    
        return item
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 2013-12-29
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多