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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1071閲覧

【ruby】htmlのコメントアウト間のソースの取得の正規表現について

kaori_oka

総合スコア176

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/06/22 09:56

前提・実現したいこと

フォームログイン後のページ(会員しか見れないページ)にて、
HTML の抜き取りをしております。
現行の WYSIWYG 部分を、リニューアル後の WYSIWYG 部分に移設します。

現行の DB には下記のように、ソースコードが補完される前の状態で入っています。

html

1こんにちは。<br>本日の<strong>重要事項</strong>です。

このままでは、移設した際に崩れが起きてしまうため、下記のように取得したいです。

html

1<!-- WYSIWYG_START --><div>こんにちは。<br>本日の<strong>重要事項</strong>です。</div><!-- WYSIWYG_END -->

そのため、selenium-webdriver にて、当該ページへアクセスし、
その HTML コードを取得して CSV に落とし込む方法を考えております。

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

ページへアクセスし、ソースコードを取得するところはできていて、下記のように取得しています。

html

1<html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""ja"" lang=""ja""> ~ </html>

できれば下記のように WYSIWYG エリアのみのデータにしたいと思っています。

html

1<!-- WYSIWYG_START --> ~ <!-- WYSIWYG_END -->

正規表現で抜き出そうとしているのですが、抜き出せるページと、nil で返答するページがあります。
基本的には対象ページに<!-- WYSIWYG_START --> ~ <!-- WYSIWYG_END -->の記述があるため取れるはずなのですが...

ソースコードを csv に入れているので、スペースやダブルコーテーションで切れてしまって上手くとれていないなどの現象が起こっているのでしょうか。

該当のソースコード

ruby

1 2# csv_import_urlはCSVから取得したURL一覧の配列となります 3 4page_htmls = [] 5 6time_out = 0 7 8csv_import_url.each do |url| 9 try = 0 10 try_remit = 3 11 begin 12 try = try + 1 13 driver.navigate.to(url) 14 sleep 1 15 page_source_html = driver.page_source.match(/<!-- WYSIWYG_START -->+.+<!-- WYSIWYG_END -->/) 16 meta_result = {url: url, page_source_html: page_source_html} 17 page_htmls << meta_result 18 19 rescue Net::ReadTimeout # タイムアウト対策 20 meta_result = {url: url, page_source_html: "timeout"} 21 page_htmls << meta_result 22 time_out = time_out + 1 23 retry if try < try_remit 24 25 end 26end 27 28 29CSV.open("source_code.csv","w") do |m| 30 m << ["pageurl", "page_source_html"] 31 page_htmls.each do |pm| 32 m << [pm[:url], pm[:page_source_html]] 33 end 34end

試したこと

上記コードで問題の部分はこの部分かと思われます。

ruby

1page_source_html = driver.page_source.match(/<!-- WYSIWYG_START -->+.+<!-- WYSIWYG_END -->/)

このコードで、うまく取得できるページもありますが、nilで出力される場合もあり、
正規表現の許容範囲を調整する必要がある?と感じているのですが、どこから手をつけたらいいかわからず..

諸事情により実際のページのURL(HTMLを取得したいページ)を掲載できませんが、
もし、このようにコメントアウト~コメントアウトの経験者様いればお知恵を拝借したく。

お願いいたします。

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

win10
ruby 2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32]
chrome ver.79

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

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

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

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

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

gouf

2020/06/23 01:05

「前後に改行があるかもしれない」の記述を追記した場合、なにか変化は見られますか : 「<!-- WYSIWYG_START -->(\n?+.+\n?+)<!-- WYSIWYG_END -->」 Rubular - https://rubular.com/r/5AEmCUrsLa2dar
kaori_oka

2020/06/24 03:59

ご回答ありがとうございます。 たまにnilになる現象は防げました! そのあとソース内の改行が悪さしてCSVデータのレコードが崩れてしまう現象があったため別の方法で解決しました。
guest

回答2

0

コメントアウトの中身が改行されているものとされていないもので結果が別れて居ませんか?もしそうでしたら /...../m と最後に mオプションしてください。

投稿2020/06/22 22:50

winterboum

総合スコア23329

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

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

kaori_oka

2020/06/24 03:59

ご回答ありがとうございます。 たまにnilになる現象は防げました! そのあとソース内の改行が悪さしてCSVデータのレコードが崩れてしまう現象があったため別の方法で解決しました。
guest

0

自己解決

当該コード下に、取得した文字列から改行コードをとっぱらう旨のコードを入れて
CSVデータが改行でごちゃっとなるのを防ぎました

ruby

1page_source_html = driver.page_source.match(/<!-- WYSIWYG_START -->+.+<!-- WYSIWYG_END -->/) 2page_source_html = page_source_html[0].gsub(/\r\n|\r|\n/, "<br/>") 3

参考記事

改行っぽいものすべてにマッチする正規表現

投稿2020/06/24 03:57

kaori_oka

総合スコア176

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問