0

BeautifulSoup と Requests を使用して、サイトのページをスクレイピングして試合のスケジュール (および可能な場合は結果) を取得するスクレイパーを作成しています。これは私がこれまでに持っているものです:

    def getMatches(self):
        url = 'http://icc-cricket.yahoo.net/match_zone/series/fixtures.php?seriesCode=ENG_WI_2012' # change seriesCode in URL for different series.
        page = requests.get(url)
        page_content = page.content
        soup = BeautifulSoup(page_content)

    result = soup.find('div', attrs={'class':'bElementBox'})
    tags = result.findChildren('tr')

    for elem in tags:
        x = elem.getText()
        print x

そして、これらは私が得る結果です:

Date & Time (GMT)fixture
Thu, May 17, 2012 10:00 AMEngland  vs  West Indies
3rd TESTA full scorecard will be available shortly.Venue: Edgbaston,    BirminghamResult: England won by 5 wickets
Fri, May 25, 2012 11:00 AMEngland  vs  West Indies
2nd TESTClick here for the full scorecardVenue: Trent Bridge, NottinghamResult:     England won by 9 wickets
Thu, Jun 7, 2012 10:00 AMEngland  vs  West Indies
1st TESTClick here for the full scorecardVenue: Lord'sResult: Match Drawn
Sat, Jun 16, 2012 9:45 AMEngland  vs  West Indies
1st ODIClick here for the full scorecardVenue: The Rose Bowl, SouthamptonResult:     England won by 114 runs (D/L Method)
Tue, Jun 19, 2012 9:45 AMEngland  vs  West Indies
2nd ODIVenue: KIA Oval
Fri, Jun 22, 2012 9:45 AMEngland  vs  West Indies
3rd ODIVenue: Headingley Carnegie
Sun, Jun 24, 2012 12:00 AMEngland  vs  West Indies
1st T20Venue: Trent Bridge, Nottingham

ここで、データを構造化された形式で分類したいと思います。
それぞれが単一の一致に関する情報を含む辞書のリストが理想的です。しかし、私はそれを達成する方法にこだわっています。結果の出力文字列には のような文字が含まれて&nbspおり、時刻は のように奇妙に配置されていAMEnglandます。スペース文字を区切り文字として使用して文字列を分割すると、西インド諸島のような 2 つの単語を持つ国が分割され、それを解析する統一された方法がなくなるという問題もあります。

このデータを一様に解析できる方法があるので、フォームに入ることができます。ちょっと好き:

[ {'date': match_date, 'home_team': team1, 'away_team': team2, 'venue': venue},{ same for match 2}, { match 3 }...]

どんな助けにも感謝します。:)

4

2 に答える 2

1

日付/時刻と国を区別することはそれほど難しくありませんでした。「会場」と「結果」についても同じことができます。

>>> import re
>>> s = "Sun, Jun 24, 2012 12:00 AMEngland  vs  West Indies"
>>> match = re.search(r"\b[AP]M", s)
>>> s[0:match.end()]
'Sun, Jun 24, 2012 12:00 AM'
>>> s[match.end():]
'England  vs  West Indies'
于 2012-06-19T16:05:35.657 に答える
0

代わりにスクレイピーを見てください。この作業がずっと簡単になります。

そのサイトからスクレイピングするアイテムを定義します。

from scrapy.item import Item, Field

class CricketMatch(Item):
    date = Field()
    home_team = Field()
    away_team = Field()
    venue = Field()

次に、XPath 式を使用してローダーを定義し、これらの項目を埋めます。その後、これらのアイテムを直接使用するか、JSON 出力などを生成できます。

于 2012-06-19T16:06:14.350 に答える