Scrapy:自动填充提取的字段

时间:2016-04-26 22:30:59

标签: python web-scraping scrapy

在扩展之前,在几个要点中总结我的查询:

  • 目标网站是一个体育网站,有100多个字段,我想抓一下。
  • 我想声明一个空类来填充字段名称并用相关值填充它。
  • 我不清楚如何更改项目文件,以确定您没有明确声明已删除项目的情况。

现在开始讨论。

我希望从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)

基于以上所述,有人可以帮我弄清楚我应该以什么方式构建Items文件

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您没有义务提供scrapy.Item个实例,您也可以获得dict,但不会受到您想要的限制。