Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

RubyでHTMLを解析する方法

RubyでHTMLを解析しようとしていますか?

適切なツールがない場合、このタスクは少し難しい場合があります 。

しかし、今日は運がいいです!

RubyにはNokogiriという素晴らしいライブラリがあるからです 、これにより、HTML解析が公園を散歩します。

いくつかの例を見てみましょう。

まず、のこぎり宝石をインストール と:

gem install nokogiri

gemのインストールで問題が発生した場合は、次のことを試してください:

gem install nokogiri -- --use-system-libraries

タイトルを抽出する方法

次に、次のスクリプトを作成します。このスクリプトには、 nokogiriによって解析される基本的なHTMLスニペットが含まれています。 。

このコードを実行してページタイトルを取得します

require 'nokogiri'

html        = "testactual content here..."
parsed_data = Nokogiri::HTML.parse(html)

puts parsed_data.title
=> "test"

HTML文字列ではなく、URLから直接データを解析する場合…

これを行うことができます

require 'open-uri'

Nokogiri::HTML.parse(open('https://example.com')).title

これにより、HTMLがダウンロードされ、タイトルが取得されます。

タイトルを取得するのは良いことですが、おそらくもっと高度な例を見たいと思うでしょう。

でしょ?

ウェブサイトからリンクを抽出する方法を見てみましょう。

アンカーリンクの抽出

最初にページからのすべてのリンクが必要な場合は、HTMLが必要です。

同じopen-uriを使用できます 公開ウェブサイトのHTMLをダウンロードする手法。

次に、それをNokogiriで解析して、ドキュメントオブジェクトを取得します。

このように

document = Nokogiri::HTML.parse(open('https://example.com'))

document.class
# Nokogiri::HTML::Document

次の2つの方法のいずれかで、このオブジェクトに情報を照会できます。

  • XPathクエリの使用
  • CSSセレクターの使用

最初にXPathを使用してこれを行う方法を見てみましょう。

コードは次のとおりです

tags = document.xpath("//a")

それは何をしますか?

これはページ内のすべてのHTMLタグをフィルタリングします 、そしてあなたが要求しているものをあなたに与えます。

この場合、「a」タグ。

HTMLのリンクを含むタグはどれですか。

あなたが持っているのはNokogiri::XML::Elementの配列です これらのタグを表します。

リンクのURLとテキストを取得したい場合は、次のようにします。

tags.each do |tag|
  puts "#{tag[:href]}\t#{tag.text}"
end

これにより、すべてのリンクが1行に1つずつ画面に印刷されます。

リンクの代わりに、ページで利用可能な画像のリストなど、他の情報を廃棄したい場合は、同じプロセスに従うことができます。

変更する必要があるのは、必要なタグのタイプだけです。

tags        = document.xpath("//img")
images_urls = tags.map { |t| t[:src] }

imgの場所 画像のHTMLタグであり、src 画像のURLが保存されている属性です。

正しいCSSセレクターと属性を見つけるには、ブラウザーの開発者ツールを使用してください。

NokogiriでのCSSセレクターの使用

xpathを置き換えることで、CSSセレクターを使用できます cssを使用したメソッド メソッド。

ここに例があります

headers    = document.css("h1")
paragraphs = document.css("p")

at_cssの違い &css つまり、最初の要素は最初に一致した要素のみを返しますが、後者はすべての一致した要素を返します。

CSSを使用しても同じ結果が得られます。重要なのは、どのHTML要素を操作するかをNokogiriに指示することです。

ほとんどの開発者はXPathよりもCSSに精通しているため、CSSを使用する必要があります。

概要

Nokogiriのドキュメントはここにあります:

https://www.rubydoc.info/github/sparklemotion/nokogiri

あなたも好きかもしれません:

Ruby文字列形式


  1. マトリックスとは何ですか?Rubyでそれを使用する方法は?

    マトリックスは、スプレッドシートのようなデータを保存および操作するために使用できる2D(2次元)配列です。 次の用途に使用できます : テーブルゲーム(チェス、チェッカーなど)でボードを表す 統計とデータ分析 プロットとグラフの生成 これは強力なデータ構造であるため、使用方法を学ぶのに役立ちます。 Rubyでマトリックスを作成する方法 配列を使用して行列を作成できます。 このように : matrix = [ [1,2,3], [4,5,6], [7,8,9] ] これにより、3×3のマトリックスが生成されます。これは、2次元データをボードまたは位置のセットとして保

  2. RubyでStructとOpenStructを使用する方法

    Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた