我正在使用ScrapingHub API,并使用shub来部署我的项目。但是,项目结果如下所示:
不幸的是,我按以下顺序需要它 - >标题,发布日期,描述,链接。如何让输出完全符合每个项目类的顺序?
以下是我的蜘蛛的简短样本:
import scrapy
from scrapy.spiders import XMLFeedSpider
from tickers.items import tickersItem
class Spider(XMLFeedSpider):
name = "Scraper"
allowed_domains = ["yahoo.com"]
start_urls = ('https://feeds.finance.yahoo.com/rss/2.0/headline?s=ABIO,ACFN,AEMD,AEZS,AITB,AJX,AU,AKERMN,AUPH,AVL,AXPW
'https://feeds.finance.yahoo.com/rss/2.0/headline?s=DRIO
'https://feeds.finance.yahoo.com/rss/2.0/headline?s=IDXG,IMMU,IMRN,IMUC,INNV,INVT,IPCI,INPX,JAGX,KDMN,KTOV,LQMT
)
itertag = 'item'
def parse_node(self, response, node):
item = {}
item['Title'] = node.xpath('title/text()',).extract_first()
item['Description'] = node.xpath('description/text()').extract_first()
item['Link'] = node.xpath('link/text()').extract_first()
item['PublishDate'] = node.xpath('pubDate/text()').extract_first()
return item
此外,这是我附加的items.py文件,它与我的蜘蛛的顺序相同,所以我不知道为什么输出不按顺序。
Items.py:
import scrapy
class tickersItem(scrapy.Item):
Title = scrapy.Field()
Description = scrapy.Field()
Link = scrapy.Field()
PublishDate = scrapy.Field()
我的代码的语法是为了项目和蜘蛛文件,我不知道如何解决它。我是一名新的python程序员。
答案 0 :(得分:1)
您可以使用collections.OrderedDict,而不是在items.py
中定义项目。只需导入collections
模块,然后在parse_node
方法中更改行:
item = {}
到行:
item = collections.OrderedDict()
或者,如果您想要定义项目,可以使用此answer中概述的方法。然后,您的items.py
将包含此代码:
from collections import OrderedDict
from scrapy import Field, Item
import six
class OrderedItem(Item):
def __init__(self, *args, **kwargs):
self._values = OrderedDict()
if args or kwargs: # avoid creating dict for most common case
for k, v in six.iteritems(dict(*args, **kwargs)):
self[k] = v
class tickersItem(OrderedItem):
Title = Field()
Description = Field()
Link = Field()
PublishDate = Field()
然后,您还应该修改您的蜘蛛代码以相应地使用此项目。请参阅documentation。