WebページをダウンロードしてSQL Server 2012でアクセス可能な形式で保存しようとしています。私は動的SQLを使用していましたが、もっとクリーンで簡単な方法がありますこれを行う。私は正常に私のローカルドライブに下のコードを使用してhtmファイルをダウンロードすることができましたが、私はhtml自体で作業するのが難しいです。私はXMLにWebページを変換しようとしているとそこから解析するが、私は適切にXML変換にHTMLを扱っていないと思う。WebページをダウンロードしてSQLで解析する方法
私は、「許可されていない内部サブセットのDTDとXMLを解析。限られた内部サブセットDTDのサポートを有効にするために、スタイルオプション2でCONVERT使用する」、次のエラーを取得する
DECLARE @URL NVARCHAR(500);
DECLARE @Ticker NVARCHAR(10)
DECLARE @DynamicTickerNumber INT
SET @DynamicTickerNumber = 1
CREATE TABLE Parsed_HTML(
[Date] DATETIME
,[Ticker] VarChar (8)
,[NodeName] VarChar (50)
,[Value] NVARCHAR (50));
WHILE @DynamicTickerNumber <= 2
BEGIN
SET @Ticker = (SELECT [Ticker] FROM [Unique Tickers Yahoo] WHERE [Unique Tickers Yahoo].[Ticker Number]= @DynamicTickerNumber)
SET @URL ='http://finance.yahoo.com/q/ks?s=' + @Ticker + '+Key+Statistics'
DECLARE @cmd NVARCHAR(250);
DECLARE @tOutput TABLE(data NVARCHAR(100));
DECLARE @file NVARCHAR(MAX);
SET @file='D:\Ressources\Execution Model\Execution Model for SQL\DB Temp\quoteYahooHTML.htm'
SET @cmd ='powershell "(new-object System.Net.WebClient).DownloadFile('''[email protected]+''','''[email protected]+''')"'
EXEC master.dbo.xp_cmdshell @cmd, no_output
CREATE TABLE XmlImportTest
(
xmlFileName VARCHAR(300),
xml_data xml
);
DECLARE @xmlFileName VARCHAR(300)
SELECT @xmlFileName = 'D:\Ressources\Execution Model\Execution Model for SQL\DB Temp\quoteYahooHTML.htm'
EXEC('
INSERT INTO XmlImportTest(xmlFileName, xml_data)
SELECT ''' + @xmlFileName + ''', xmlData
FROM
(
SELECT *
FROM OPENROWSET (BULK ''' + @xmlFileName + ''' , SINGLE_BLOB) AS XMLDATA
) AS FileImport (XMLDATA)
')
DECLARE @x XML;
DECLARE @string VARCHAR(MAX);
SET @x = (SELECT xml_data FROM XmlImportTest)
SET @string = CONVERT(VARCHAR(MAX), @x, 1);
INSERT INTO [Parsed_HTML] ([NodeName], [Value])
SELECT [NodeName], [Value] FROM dbo.XMLTable(@string)
--above references XMLTable Parsing function that works consistently
END
残念ながら、これは範囲内で実行する必要があります私の理解は、HTMLアジリティパックはすぐには互換性がないということです。中間のテーブルXMLimportTestには決してデータが格納されないので、不正なHTMLの機能ではない可能性があります。
HTMLは必ずしもXMLに変換できません。クローズされていない
タグや、解析できない< or >を含むスクリプトなどが含まれている可能性があります。そのため、私はHTML AgilityPackのようなライブラリをスクレイプすることを使用しています。さらに、いくつかのウェブページはHTML構文エラーを有する。閉じられていないdivタグまたはpタグ – derloopkat
[SQL Server:XPATHクエリに失敗しました]の重複している可能性があります(http://stackoverflow.com/questions/15981636/sql-server-xpath-query-failing) – derloopkat
使用しているコードはOKと思われます。クリーンなXHTMLであなた自身のWebサイトを作ったのですが、それをXMLにキャストし、その妥当性に頼っているかもしれません。しかし、それ以外の場合はできません。ファイルを 'NVARCHAR(MAX)'型のカラムに最初にインポートしてみてください。あなたがそれをキャストすることができるなら( 'CONVERT(XML、YourData、2)'を試してください)、満足してください!そうでなければ、データを解析する必要があります( 'SUBSTRING'、' PATINDEX'、 'CHARINDEX' ...) – Shnugo