WebClient GodLikeClient = new WebClient();
HtmlAgilityPack.HtmlDocument GodLikeHTML = new HtmlAgilityPack.HtmlDocument();
GodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt");
したがって、このコードは、「Skaitytojo klausimas psichologui:kas lemiahomoseksualumÄ…?-Naujienųportalas Alfa.lt」の代わりに「Skaitytojo klausimas psichologui:kas lemiahomoseksualumą?-Naujienųportalas Alfa.lt」を返します。
このWebページは1257(バルト)でエンコードされていますが、textBox1.Text = GodLikeHTML.DocumentNode.OuterHtml;
は、歪んだテキストを返します-バルト発音区別符号は、いくつかの奇妙ないくつかの長い文字列に変換されます:(
そして、はい、私はHtmlAgilityPackフォーラムを試しました。彼らは吸う。
追伸私はプログラマーではありませんが、コミュニティプロジェクトに取り組んでおり、このコードを機能させる必要があります。ありがとう;}
実際、ページはUTF-8でエンコードされています。
GodLikeHTML.Load(GodLikeClient.OpenRead("http://www.alfa.lt"), Encoding.UTF8);
動作します。
または、httpヘッダーまたはメタタグからエンコーディングを検出するmy SO answer のコードを使用して、enを適切に再エンコードできます。 (ダウンロードを最小限に抑えるためにgzipもサポートしています)。
ダウンロードクラスを使用すると、コードは次のようになります。
HttpDownloader downloader = new HttpDownloader("http://www.alfa.lt",null,null);
GodLikeHTML.LoadHtml(downloader.GetPage());
同様のエンコードの問題がありました。 HtmlAgilityPackの最新バージョンでは、WebClientの初期化に以下を追加することで修正しました。
var htmlWeb = new HtmlWeb();
htmlWeb.OverrideEncoding = Encoding.UTF8;
var doc = htmlWeb.Load("www.alfa.lt");
UTF8は私にとっては機能しませんでしたが、このようにエンコードを設定した後、スクレイピングしようとしているほとんどのページはちょうどうまくいきました:
web.OverrideEncoding = Encoding.GetEncoding( "ISO-8859-1");
多分それは誰かを助けるかもしれません。
HtmlAgilityPack.HtmlDocument doc = new HtmlDocument();
StreamReader reader = new StreamReader(WebRequest.Create(YourUrl).GetResponse().GetResponseStream(), Encoding.Default); //put your encoding
doc.Load(reader);
それが役に立てば幸い :)
それをGodLikeHTML.Load(GodLikeClient.OpenRead("www.alfa.lt"), Encoding.GetEncoding(1257));
に変更してみてください
これは私のためにエンコーディングについて何かを知る必要性を取り除くように見えました:
using System;
using HtmlAgilityPack;
using System.Net;
using System.IO;
class Program
{
static void Main(string[] args)
{
Console.Write("Enter the url to pull html documents from: ");
string url = Console.ReadLine();
HtmlDocument document = new HtmlDocument();
var request = WebRequest.Create(url);
var response = request.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream()))
{
document.LoadHtml(reader.ReadToEnd());
}
}
}
これは私の解決策です
HttpWebRequest request =(HttpWebRequest)WebRequest.Create("http://www.sina.com.cn");
HttpWebResponse response =(HttpWebResponse)request.GetResponse();
long len = response.ContentLength;
byte[] barr = new byte[len];
response.GetResponseStream().Read(barr, 0, (int)len);
response.Close();
string data = Encoding.UTF8.GetString(barr);
var encod = doc.DetectEncodingHtml(data);
string convstr = Encoding.Unicode.GetString(Encoding.Convert(encod, Encoding.Unicode, barr));
doc.LoadHtml(convstr);
これらの投稿がすべて機能しない場合は、次のように使用してください:WebUtility.HtmlDecode("Your html text");