質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2622閲覧

C# スクレイピング フォームアプリケーション

hemegi

総合スコア1

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/08/18 03:14

編集2020/08/18 05:26

前提・実現したいこと

C#のフォームアプリケーションで
取得したWEBページのソースを解析して、
任意の文字列がある行のみ抜き出したファイルを生成したいです。
求人サイトのURLから、
会社名のみを抽出をしたいです。
それができたらテキストボックスで会社名を指定し、
該当の会社名の情報を取得し、ファイルに保存するという処理をしたいです。

今回は全ての会社名を抜き出す処理を実現したいです。

発生している問題・エラーメッセージ

WEBページのソースを取得することはできたのですが、解析ができないです。
取得したHTMLをParseDocumentで解析したら、会社名ではなく
AngleSharp.Html.Dom.HtmlParagraphElement
という文字列が代入されてしまいます。

該当のソースコード

C#

1 private void ParseHtmlButton_Click(object sender, EventArgs e) 2 { 3 string Url = UrlNameTextbox.Text; 4 5 var scraping = new Scraping(); 6 7 //htmlには正しくHTMLが入る 8 string html = scraping.GetData(Url); 9 10 var parser = new HtmlParser(); 11 12 //docにAngleSharp.Html.Dom.HtmlParagraphElement という文字列が入ってしまう 13 var doc = parser.ParseDocument(html); 14 15 var companyList = doc.GetElementsByClassName("company"); 16 17 using (var wt = new StreamWriter(@"get.txt", false, Encoding.GetEncoding("shift_jis"))) 18 { 19 foreach (var c in companyList) 20 { 21 //生成されたファイルを確認すると AngleSharp.Html.Dom.HtmlParagraphElement が複数行入力されている 22 wt.WriteLine(c); 23 } 24 } 25 }

HTML取得のクラス

Scrapingcs

1 public String GetData(string Url) 2 { 3 HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(Url); 4 WebResponse myRes = myReq.GetResponse(); 5 6 using (var rd = new StreamReader(myRes.GetResponseStream(), Encoding.GetEncoding("shift_jis"))) 7 { 8 string result = rd.ReadToEnd(); 9 return result; 10 } 11 12 }

試したこと

基本的に下記サイトを参考にしました。
https://emotionwave.hatenablog.com/entry/2020/01/31/100000

ParseDocument ではなく、 Parse を使用しているサイトがあったので、
使用したところCS1061エラーが出ました。

補足情報(FW/ツールのバージョンなど)

AngleSharp 0.14.0
VisualStudio 2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/08/18 03:46

c が文字列でないのでしょう。ブレークポイントを張り、どのようなオブジェクトでどのようなプロパティを持っているかを確かめてください。
退会済みユーザー

退会済みユーザー

2020/08/18 04:42

アクセス先のサイトの所有者・管理者に許可は得ているのでしょうか?
hemegi

2020/08/18 05:24

Zuishin様 ありがとうございます。 ブレークポイントを張り確認することで解決ができました。 SurferOnWww様 ご指摘ありがとうございます。 学習用にサイトを使用していたので許可が必要なことを知らなかったです。 自作のHTMLを使用するようにします。 公開されているサイトを使用する場合は許可を取ります。
guest

回答1

0

自己解決

ファイルに書き込みの箇所を以下のように変更し、解決しました。

foreach (var c in companyList) { wt.WriteLine(c.TextContent); }

投稿2020/08/18 05:31

hemegi

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問