2012-03-27 9 views
0

私はこれを達成したいプロジェクトに合わせてチュートリアルを進めてきました。私は何かが間違っているように見えるので、私はエラーを見つけることができません。// tdのテキストと数字を抽出するアドバイス

私が期待しているレスポンスを得るには、 'scrap shell'を使用してください。だからこのサイトのためNrl Ladder

In [1]: hxs.select('//td').extract() 
Out[1]: 
[u'<td>\r\n<div id="ls-nav">\r\n<ul><li><a href="http://www.nrlstats.com/"><span>Home</span></a></li>\r\n<li class="ls-nav-on"><a href="/nrl"><span>NRL</span></a></li>\r\n<li><a href="/nyc"><span>NYC</span></a></li>\r\n<li><a href="/rep"><span>Rep Matches</span></a></li>\r\n\r\n</ul></div>\r\n</td>', 
u'<td style="text-align:left" colspan="5">Round 4</td>', 
u'<td colspan="5">Updated: 26/3/2012</td>', 
u'<td style="text-align:left">1. Melbourne</td>', 
u'<td>4</td>', 
u'<td>4</td>', 
u'<td>0</td>', 
u'<td>0</td>', 
u'<td>0</td>', 
u'<td>122</td>', 
u'<td>39</td>', 
u'<td>83</td>', 
u'<td>8</td>', 
u'<td style="text-align:left">2. Canterbury-Bankstown</td>', 

そしてそれに行く。

チュートリアルプロジェクトを変更して別のデータ型に変更する方法を理解するのは本当に苦労しています。

「td」やその他のアイテムを使用しているときに、アイテムに使用する必要があるタイプを確認するためのヘルプやドキュメントのリストがありますか。私はそれがシェルで簡単に動作すると言うように、私はファイルに変換することはできません。具体的には、チーム名とポイントの両方が「td」ですが、チーム名はテキストです。

ここに私が行ったことがあります。

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

from nrl.items import NrlItem 

class nrl(BaseSpider): 
    name = "nrl" 
    allowed_domains = ["http://live.nrlstats.com/"] 
    start_urls = [ 
     "http://live.nrlstats.com/nrl/ladder.html", 
     ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//td') 
     items = [] 
     for site in sites: 
      item = nrlItem() 
      item['team'] = site.select('/text()').extract() 
      item['points'] = site.select('/').extract() 
      items.append(item) 
     return items 
+0

あなたはBeautifulSoupを試みたことがありますか?これはもう少し手作業ですが、あなたはそのような方法でもう少しコントロールを得ることができるかもしれません。 –

+0

いいえ、まだ動作しないかもしれません。 – sayth

+0

@PreetKukretiそれはscrapyもbeautifulsoupを使うことができることが分かりましたhttp://doc.scrapy.org/en/latest/topics/spiders.html – sayth

答えて

2

私はかなり(テストしていません。コード内のいくつかのコメントを参照してください)芋、あなたの質問を理解しますが、ここでの出発点ではありませんでした。

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

from nrl.items import NrlItem 

class nrl(BaseSpider): 
    name = "nrl" 
    allowed_domains = ["live.nrlstats.com"] # domains should be like this 
    start_urls = [ 
     "http://live.nrlstats.com/nrl/ladder.html", 
     ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     rows = hxs.select('//table[@class="tabler"]//tr[starts-with(@class, "r")]') # select team rows 
     items = [] 
     for row in rows: 
      item = nrlItem() 
      columns = row.select('./td/text()').extract() # select columns for the selected row 
      item['team'] = columns[0] 
      item['P'] = int(columns[1]) 
      item['W'] = int(columns[2]) 
      ... 
      items.append(item) 
     return items 

はUPDATE:

//table[@class="tabler"//tr[starts-with(@class, "r")]はxpathクエリです。いくつかのxpath examples hereを参照してください。

hxs.select(xpath_query)は常に、指定されたクエリに該当するノードのリスト(タイプもHtmlXPathSelector)を返します。

hxs.extract()は、ノードの文字列表現を返します。

P.S. XPath 1.0はサポートしていますが、2.0はサポートしていないことに注意してください(Linuxでは少なくとも、Windowsについてはわかりません)ので、最新のxpath機能の一部が動作しない可能性があります。

も参照してください:

+0

この行のようなものに関する追加情報を見つけるには行= hxs.select(チュートリアルの「// table [@ class = "tabler" // tr [starts-with(@class、 "r")] ')私がやることは明らかではありません。 – sayth

+1

これはxpathに関する質問であり、治療とは関係ありません。私はscrapyのdocsがこれを持っているとは思わない。私の更新を参照してください。私はあなたの質問に[tag:xpath]タグを追加しました。 – warvariuc

+0

Xpathセレクタでこのエラーが発生します。ValueError( "無効なXPath:%s"%xpath) \t exceptions.ValueError:無効なXPath://テーブル[@ class = "tabler" // tr [starts-with(@ (@class、 "r")] – sayth

関連する問題