私はR3.3.1でWindows 7を使用しています。私はidsFinal_Attack
という2つの列を持つデータフレームを持っています。readLines()ウェブスクレイピングがrで接続を開くことができません
Attack Type
1 40674
2 Netcore.Netis.Devices.Hardcoded.Password.Security.Bypass
3 DNS.Invalid.Size.Attack
4 Acunetix.Web.Vulnerability.Scanner
5 SIPVicious.SIP.Scanner
6 17799
New
1 SIPVicious.SIP.Scanner
2 Netcore.Netis.Devices.Hardcoded.Password.Security.Bypass
3 DNS.Invalid.Size.Attack
4 Acunetix.Web.Vulnerability.Scanner
5 SIPVicious.SIP.Scanner
6 MS.SMBv2.Infinite.Loop.DoS
最初は、文字IDと数値IDの両方からなる「攻撃タイプ」です。 2番目の列は、以下のコードで記入したいものです。文字列が含まれている「攻撃タイプ」の行のために
URL = 'http://www.fortinet.com/ids/VID'
idsFinal_Attack$New = character(length = nrow(idsFinal_Attack))
for (i in 1:nrow(idsFinal_Attack)) {
if (is.na(as.numeric(idsFinal_Attack$`Attack Type`[i]))) {
idsFinal_Attack$New[i] = idsFinal_Attack$`Attack Type`[i]
} else {
fortinetPage = readLines(paste0(URL, idsFinal_Attack$`Attack Type`[i]))
fortinetPage = grep("id=\"ency_title\">Vulnerability:", fortinetPage,
value = TRUE)
idsFinal_Attack$New[i] =
gsub("<h1 id=\"ency_title\">Vulnerability: |</h1>", "", fortinetPage)
}
}
、私はコラム「新」の隣接するセルにその文字列をコピー&ペーストしたいです。行1のような数字の入った行の "Attack Type"の行については、その数値を変数 "URL"の最後に貼り付けてから、readLines()
関数を使用して、拡張された "URL"変数は私を、すなわちhttp://www.fortinet.com/ids/VID40674に連れて行きます。私は、Webページの「脆弱性」というタイトルの小さなセクションだけを、後続のテキストとともに必要とします。 readLines()
はウェブページからすべてのテキストを返し、grepとgsubを使って目的のセクションを取得できます。データフレームidsFinal_Attack
には145行があり、そのうち67行は数値で、readLines()コマンドが必要です。以下のコードは、その約半分で動作し、以下に示すエラーがスローされます。
Error in readLines(url(paste0(URL, idsFinal_Attack$`Attack Type`[i]), : cannot open the connection
これは私の最初の試みであり、コードを簡潔にすることができます。私はちょうど実際のバージョンを手に入れたいと思った。私は簡単にXMLとrvestパッケージを試しましたが、幸運なことはありませんでした。誰か提案はありますか?
正規表現でHTMLを解析しないでください。 'rvest'や' XML'のようなHTMLパーサーを使いましょう。 – alistaire