2016-04-26 130 views
0

扩大之前总结一下我的几个要点查询:Scrapy:自动填充提取的字段

  • 目标网站是一个体育网站,我想凑100+领域。
  • 我想声明一个空的类来填充字段名称并填充相关的值。
  • 我不清楚你如何改变项目文件的情况下,你没有明确声明你的scraped项目。

现在要下定决心。我想找a rugby database。代码的片段如下:

<TeamData Possession="0.50" Score="40" Side="Home" TeamRef="t1550" Territory="0"> 
    <Stat Type="restart_opp_player">0</Stat> 
    <Stat Type="kick_oppn_collection">0</Stat> 
    <Stat Type="kicks_from_hand">0</Stat> 
    <Stat Type="penalty_conceded_killing_ruck">0</Stat> 
    ... 

此代码继续对周边的其他140线,使东西,将是一个痛苦的定义每个属性明确。

与其逐一提取每个属性,我希望能够定义一个空类,然后用各种属性填充它。这在shell中很容易实现。

class RugbyItem(params): 
def __init__(self, params) 
    selc.__dict__.update(params) 

home_attribute_names = response.xpath('//TeamData[@Side="Home"]/Stat/@Type').extract() 
home_attribute_stats = response.xpath('//TeamData[@Side="Home"]/Stat/text()').extract() 
concat = {k: v for (k, v) in (zip(home_names, home_stats))} 

home_data = RugbyItem(concat) 

基于上述,可能有人帮助我搞清楚我应该结构中的项目文件

class RugbyItem(scrapy.Item): 
??? = scrapy.Field() 

和蜘蛛类什么样的方式。

class MySpider(BaseSpider): 
name  = "rugbyspider" 
allowed_domains = ["opta.net"] 
start_urls = ["http://omo.akamai.opta.net/?feed_type=ruf9&game_id=113013&user=OWV3&psw=trDd59TW"] 

def parse(self, response): 
    home_attribute_names = response.xpath('//TeamData[@Side="Home"]/Stat/@Type').extract() 
    home_attribute_stats = response.xpath('//TeamData[@Side="Home"]/Stat/text()').extract() 
    concat = {k: v for (k, v) in (zip(home_names, home_stats))} 
    home_data = RugbyItem(concat) 
    yield home_data 

感谢您的帮助!

回答

0

你没有义务产生一个scrapy.Item实例,你也可以产生一个dict,它不会受限于你想要的限制。

+0

我必须承认你应该得到我的赞赏。 –