HTMLAgilityPack(VB.Net)を使用してWebサイトをスクレイプする方法
私は、htmlagilitypackがこれを達成する最も簡単な方法であることに同意します。正規表現を使用するよりもエラーが発生しにくくなります。以下は、私がスクレイピングに対処する方法です。
htmlagilitypack * dllをダウンロードした後、新しいアプリケーションを作成し、nugetを介してhtmlagilitypackを追加し、それを参照します。Chromeを使用できる場合は、ページを調べて、情報の場所に関する情報を取得できます。キャプチャする値を右クリックして、その値が含まれているテーブルを探します(HTMLを少しフォローアップします)。
次の例では、「価格設定」テーブル内のそのページからすべての値を抽出します。作成するドキュメントが特定の値を検索できるように、テーブルのXPath値(この値はhtmlagilitypackに検索対象を指示するために使用されます)を知る必要があります。これは、値が含まれている構造を見つけて、XPathを右クリックしてコピーすることで実現できます。これから私たちは得る...
//*[@id="pricing"]
Chromeから取得するXPathがかなり大きい場合があることに注意してください。多くの場合、値が含まれているテーブルに固有の何かを見つけることで単純化できます。この例では「id」ですが、他の状況では、見出しやクラスなどになります。
このXPath値は、idがpriceingに等しいもの、つまりテーブルを探します。さらに詳しく調べると、値がtbody、tr、およびtdタグ内にあることがわかります。HtmlAgilitypackはtbodyでうまく機能しないため、無視してください。新しいXPathは...
//*[@id='pricing']/tr/td
このXPathは、ページ内で価格設定IDを探してから、trタグとtdタグ内のテキストを探すことを示しています。次に、コードを追加します...
Dim Web As New HtmlAgilityPack.HtmlWeb
Dim Doc As New HtmlAgilityPack.HtmlDocument
Doc = Web.Load("http://www.digikey.ca/product-search/en?lang=en&site=ca&KeyWords=AE9912-ND")
For Each table As HtmlAgilityPack.HtmlNode In Doc.DocumentNode.SelectNodes("//*[@id='pricing']/tr/td")
Next
値を抽出するには、ループで作成されたテーブル値とその内部テキストメンバーを参照するだけです。
Dim Web As New HtmlAgilityPack.HtmlWeb
Dim Doc As New HtmlAgilityPack.HtmlDocument
Doc = Web.Load("http://www.digikey.ca/product-search/en?lang=en&site=ca&KeyWords=AE9912-ND")
For Each table As HtmlAgilityPack.HtmlNode In Doc.DocumentNode.SelectNodes("//*[@id='pricing']/tr/td")
MsgBox(table.InnerText)
Next
これで、値をポップアップするメッセージボックスができました...配列リストのメッセージボックスを切り替えて、入力するか、値を格納する方法を選択できます。次に、取得したい他のテーブルについても同じことを行います。
作成されたDoc変数は再利用可能であるため、同じページ内の別のテーブルを循環する場合は、ページをリロードする必要がないことに注意してください。これは、特に多くのリクエストを行う場合、Webサイトをバタンと閉めたくない場合、および多数のスクレイプを自動化する場合は、リクエストの間に時間がかかる場合に適しています。
スクレイピングは本当に簡単です。それが基本的な考え方です。楽しむ!