2011-12-24 19 views
2

What popular startup advice is plain wrong?」のようなページがあれば、右上のトピック見出しの下にある「Common Misconceptions」の最初のトピックを抽出できます。WebページからHTMLトピック見出しを抽出するにはどうすればよいですか?

Rubyでこれを行うにはどうすればいいですか?それはノコギリや正規表現とは違いますか?おそらく私はいくつかのHTML解析を行う必要がありますか?

答えて

1

まず、正規表現を使用してXML/HTMLを解析/抽出/折りたたむ/スピン/カットすることはほとんどありません。それは間違って行くことができる方法が多すぎます。正規表現はいくつかの仕事にとって素晴らしいですが、XML/HTML抽出はあまり適切ではありません。

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open('http://www.quora.com/What-popular-startup-advice-is-plain-wrong')) 

topic = doc.at('span a.topic_name span').content 
puts topic 

出力があること実行:

Common Misconceptions 

コードは、カップルのショートカットを取っている、それが一貫して動作する必要があります言っ

は、ここで私が使用して行うだろうと何鋸山だ

  1. RubyのOpenURIを使用すると、インターネットリソースに簡単にアクセスできます。私は、平均的なアプリを作るのが最も簡単です。より強力なツールがありますが、便利なツールはありません。
  2. doc.atは、Nokogiriにドキュメントをトラバースするように指示し、CSSアクセサー 'span a.topic_name span'の最初の出現を見つけます。これは、そのページで最初のエントリと一致する必要があります。

ノコギリは、ノードを検索するいくつかのバリエーションをサポートしています(atsearch)。 at%のようなものとcss_atのようなものは最初の出現を見つけ、Nodeを返します。これは個々のタグまたはテキストまたはコメントです。 search,/であり、これらのバリアントはノードの配列のようなNodeSetを返します。あなたは、そのリストを歩かなければならないか、Arrayアクセサのようなものを使用したい個々のノードを抽出する必要があります。上記のコードでは、私が望むノードを得るためにdoc.search(...).firstと言っていたかもしれません。

NokogiriはXPathアクセサを使用することもサポートしていますが、ほとんどの場合、通常はCSSを使用します。それは簡単で読みやすいですが、あなたの走行距離は変わるかもしれません。

+0

こんにちは、これは本当に役に立ちました。突然、私は503 Service Unavailable(OpenURI :: HTTPError)を取得し始めました。私は、これは、サーバーに行われたリクエストについて不安を感じているウェブサイトだと仮定しています。回避策はありますか? –

+0

あなたを禁止している場合は回避できません。だからこそ、彼らのルールに従うことが重要であり、彼らの利用規約を尊重することが重要です。 503は、そのサーバーがオフラインであることを意味する可能性があります。 –

関連する問題