-1

このサイトをスクレイピングしようとしています: http://stats.swehockey.se/ScheduleAndResults/Schedule/3940

そして、(alecxe のおかげで) 日付とチームを取得することができました。

from scrapy.item import Item, Field
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector


class SchemaItem(Item):
    date = Field()
    teams = Field()


class SchemaSpider(BaseSpider):
    name = "schema"
    allowed_domains = ["http://stats.swehockey.se/"]
    start_urls = [
        "http://stats.swehockey.se/ScheduleAndResults/Schedule/3940"
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        rows = hxs.select('//table[@class="tblContent"]/tr')

        for row in rows:
            item = SchemaItem()
            item['date'] = row.select('.//td[2]/div/span/text()').extract()
            item['teams'] = row.select('.//td[3]/text()').extract()

            yield item

そこで、私の次のステップは、「AIK」または「ユールゴーデン IF」のホーム ゲームではないものを除外することです。その後、Google カレンダーに追加できる .ics ファイルに再フォーマットする必要があります。

編集:だから私はいくつかのことを解決しましたが、まだやるべきことがたくさんあります。私のコードは今このようになります..

# -*- coding: UTF-8 -*-
from scrapy.item import Item, Field
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector


class SchemaItem(Item):
    date = Field()
    teams = Field()


class SchemaSpider(BaseSpider):
    name = "schema"
    allowed_domains = ["http://stats.swehockey.se/"]
    start_urls = [
        "http://stats.swehockey.se/ScheduleAndResults/Schedule/3940"
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        rows = hxs.select('//table[@class="tblContent"]/tr')

        for row in rows:
            item = SchemaItem()
            item['date'] = row.select('.//td[2]/div/span/text()').extract()
            item['teams'] = row.select('.//td[3]/text()').extract()

            for string in item['teams']:

                teams = string.split('-') #split it

                home_team = teams[0]#.split(' ') #only the first name, e.g. just 'Djurgårdens' out of 'Djurgårdens IF'
                away_team = teams[1]
                #home_team[0] = home_team[0].replace(" ", "") #remove whitespace
                #home_team = home_team[0]

                if "AIK" in home_team:
                    for string in item['date']:
                            year = string[0:4]
                            month = string[5:7]
                            day = string[8:10]
                            hour = string[11:13]
                            minute = string[14:16]

                            print year, month, day, hour, minute, home_team, away_team  
                elif u"Djurgårdens" in home_team:
                    for string in item['date']:
                        year = string[0:4]
                        month = string[5:7]
                        day = string[8:10]
                        hour = string[11:13]
                        minute = string[14:16]

                        print year, month, day, hour, minute, home_team, away_team     

そのコードは、「AIK」、「Djurgårdens IF」、および「Skellefteå AIK」のゲームを出力します。したがって、ここでの私の問題は明らかに、「Skellefteå AIK」ゲームを除外する方法と、このプログラムを改善する簡単な方法があるかどうかです。これについての考えは?

よろしくお願いします!

4

2 に答える 2

1

ホームゲームは、あなたが最初に(ダッシュの前に)探しているチームとのゲームだと推測しています。

これは、XPath または Python から実行できます。XPath で実行する場合は、ホーム チーム名を含む行のみを選択します。

//table[@class="tblContent"]/tr[
    contains(substring-before(.//td[3]/text(), "-"), "AIK")
  or
    contains(substring-before(.//td[3]/text(), "-"), "Djurgårdens IF")
]

すべての空白 (改行を含む) を安全に削除できます。読みやすくするために追加しました。

python の場合、ほとんど同じことができるはずですが、正規表現を使用するとさらに簡潔になるかもしれません。

于 2013-09-13T22:11:01.880 に答える
1

いくつかの注意点:

  1. stringは組み込み型であるため、通常は独自の変数に使用しないことをお勧めします
  2. 空白を削除home_teamすることは、必要な「AIK」と直接比較するのに十分なクリーンアップ方法でした。使っstring.strip()ていたので少しきれいになってhome_teamいますが、それは個人的なことですaway_teamstring.replace(" ", "")
  3. printまた、テスト中にホームチームとアウェイチームをより明確に区別するために、行のホームチームとアウェイチームの間に「:」を追加したので、その変更を自由に削除してください

チェックを入れて、他に問題がある場合はお知らせください。:)

   def parse(self, response):
        hxs = HtmlXPathSelector(response)
        rows = hxs.select('//table[@class="tblContent"]/tr')

        for row in rows:
            item = SchemaItem()
            item['date'] = row.select('.//td[2]/div/span/text()').extract()
            item['teams'] = row.select('.//td[3]/text()').extract()

            for fixture in item['teams']:
                teams = fixture.split('-') #split it
                home_team = teams[0].strip()
                away_team = teams[1].strip()

                if home_team == "AIK":
                    for fixDate in item['date']:
                            year = fixDate[0:4]
                            month = fixDate[5:7]
                            day = fixDate[8:10]
                            hour = fixDate[11:13]
                            minute = fixDate[14:16]
                            print year, month, day, hour, minute, home_team, ":", away_team
                elif home_team == u"Djurgårdens IF":
                    for fixDate in item['date']:
                        year = fixDate[0:4]
                        month = fixDate[5:7]
                        day = fixDate[8:10]
                        hour = fixDate[11:13]
                        minute = fixDate[14:16]
                        print year, month, day, hour, minute, home_team, ":", away_team
于 2013-09-14T19:25:51.067 に答える