怎么在Scrapy的ItemLoader中使用输出处理器排序列表?
我想从一个网站上获取一些文本,把它分割成单词,然后返回一个有序的单词列表。我已经完成了所有的步骤,就是排序这一步遇到了问题。我觉得可以通过项目的字段输出处理器(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'])