2016-04-26 172 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

我必須承認你應該得到我的讚賞。 –