怎么在Scrapy的ItemLoader中使用输出处理器排序列表?

2 投票
1 回答
1052 浏览
提问于 2025-04-18 04:13

我想从一个网站上获取一些文本,把它分割成单词,然后返回一个有序的单词列表。我已经完成了所有的步骤,就是排序这一步遇到了问题。我觉得可以通过项目的字段输出处理器(ItemLoader)来实现排序,但我一直搞不定。
这是我的代码:

from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import TakeFirst, MapCompose, Join
from w3lib.html import replace_escape_chars, remove_tags
from nltk.corpus import stopwords
import string

from newsScrapy.items import NewsItem

class NewsLoader (ItemLoader):

    def filterStopWords(x):
        return None if x in stopwords.words('english') or x=='' else x

    default_item_class = NewsItem

    body_in = MapCompose(lambda v: v.split(), lambda v: v.strip(string.punctuation).strip(), lambda v: v.lower(), filterStopWords, replace_escape_chars)

‘body’字段是从网站抓取的数据,它会把文本分割成单词,同时去掉标点符号和其他一些小的处理。这样就能返回一个单词列表。我只想对这个列表进行排序。
非常感谢!

1 个回答

0

我终于通过ItemPipeline实现了这个功能。

def process_item(self, item, spider):
    return sorted(item['body'])

撰写回答