使用以下方法加载页面时是否可以设置自定义编码?
HtmlWeb hwWeb = new HtmlWeb();
HtmlDocument hd = hwWeb.load("myurl");
Run Code Online (Sandbox Code Playgroud)
我想将编码设置为“iso-8859-9”。
我使用 C# 4.0 和 WPF。
编辑:该问题已在 MSDN 上得到解答。
我正在编写自己的C#4.0 WPF特定网络爬虫.目前我正在使用htmlagilitypack来处理html文档.
现在下面的方式我正在下载页面
HtmlWeb hwWeb = new HtmlWeb();
hwWeb.UserAgent = lstAgents[GenerateRandomValue.GenerateRandomValueMin(irAgentsCount, 0)];
hwWeb.PreRequest = OnPreRequest;
HtmlDocument hdMyDoc;
hwWeb = new HtmlWeb
{
AutoDetectEncoding = false,
OverrideEncoding = Encoding.GetEncoding("iso-8859-9"),
};
hdMyDoc = hwWeb.Load(srPageUrl);
private static bool OnPreRequest(HttpWebRequest request)
{
request.AllowAutoRedirect = true;
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我希望能够确定给定的URL是text/html(可爬行内容)还是image/pdf简单的其他类型.我怎样才能做到这一点 ?
非常感谢您的回答.
C#4.0,WPF应用程序
这是我的清单
List<KeyValuePair<string, int>> lstRodsMonsterPool = new List<KeyValuePair<string, int>>();
Run Code Online (Sandbox Code Playgroud)
现在我想尝试这样排序,但它给出了错误
lstRodsMonsterPool = (from entry in lstRodsMonsterPool
orderby entry.Value ascending
select entry)
.ToList<new KeyValuePair<string,int>(pair => pair.Key, pair => pair.Value)>;
Run Code Online (Sandbox Code Playgroud)
C#4.0
谢谢
Dictionary<string, DataRow> dtUsers;
using (DataSet dsmyTable = DbConnection.db_Select_Query
("use myDb select * from myTable"))
{
dtUsers= dsmyTable .Tables[0].AsEnumerable().
ToDictionary(row => row.Field<string>("UserId"));
}
Run Code Online (Sandbox Code Playgroud)
好的UserId是一个smallint列但我想把它作为字符串.
我该如何修改上面的linq?
我能够分配如下变量:
if (Session["myVariable"] != null)
{
string variAble = Session["myVariable"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
是否有方法检查对象是否为null,然后分配是否为空?
好的,这就是我现在所做的,但我想知道有没有更好的方法呢?
if (vrChildNode.SelectNodes("//href") != null)
foreach (var vrNodes in vrChildNode.SelectNodes("//href"))
{
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我实际上是在查询2次.首先是空检查,第二个是foreach.
如果我按照下面的方式执行,如果没有节点则会抛出错误
foreach (var vrNodes in vrChildNode.SelectNodes("//href"))
{
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答
c#.net 4.5
好的,我如何在这种特殊情况下防止代码重复
由于流读取器字符编码而发生重复.
在某些情况下,我想使用默认值,在某些情况下,我想定义自己.
irCustomEncoding 是一个整数
当我不提供编码默认情况下应用程序做什么?
using (Stream strumien = response.GetResponseStream())
{
if (irCustomEncoding == 0)
{
using (StreamReader sr = new StreamReader(strumien))
{
srBody = sr.ReadToEnd();
}
}
else
{
using (StreamReader sr = new StreamReader(
strumien, System.Text.Encoding.GetEncoding(irCustomEncoding)))
{
srBody = sr.ReadToEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我要问的是我如何编写单个 using (StreamReader...代码而不是复制代码
很多
c#wpf .net 4.5
好的标题很难让我表达,所以可以编辑
我的问题是我可以用更短的方式写下面的查询
在所有情况下,何时相同
SQL server 2014
这里是查询
update
tblCrawlUrls
set
cl_LastCrawlDate = case
when Len(@cl_CrawlSource) > 2 then SYSUTCDATETIME()
else cl_LastCrawlDate
end ,
cl_TotalCrawlTimes = case
when Len(@cl_CrawlSource) > 2 then @cl_TotalCrawlTimes
else cl_TotalCrawlTimes
end ,
cl_Ignored_By_Containing_Word = case
when Len(@cl_CrawlSource) > 2 then @cl_Ignored_By_Containing_Word
else cl_Ignored_By_Containing_Word
end ,
cl_PageProcessed = case
when Len(@cl_CrawlSource) > 2 then 0
else cl_PageProcessed
end ,
cl_CertainlyNotProductPage = case
when Len(@cl_CrawlSource) > 2 then @cl_CertainlyNotProductPage
else cl_CertainlyNotProductPage
end ,
cl_CrawlSource = case
when Len(@cl_CrawlSource) …Run Code Online (Sandbox Code Playgroud) 好吧,就我从线程中读到的而言,这是不可能的,但在我的情况下肯定会发生.
取决于我开始执行多少后台任务,即使它们与ui线程有0关系,也肯定会影响我的gui响应
所以我的问题是,是否有人知道其他线程如何使ui变得反应迟钝?
我100%确定这些非ui线程导致其缓慢,因为它发生,即使我禁用所有gui更新事件.它肯定受我的案例中有多少个线程(抓取网址任务和处理这些抓取的页面任务)的影响
这是我的ui线程以及我如何开始后台任务:
InitializeComponent();
this.DataContext = this;
ThreadPool.SetMaxThreads(10000, 10000);
ThreadPool.SetMinThreads(10000, 10000);
PublicVariables.initPublicVariables();
PublicStaticFunctions.func_initLists();
PublicSettings.func_init_Settings_Messages();
Task.Factory.StartNew(() =>
{
CheckCrawlURLs.func_StartCrawlingWaitingUrls();
AddUrlsToDB.func_StartUrlAddProcess();
LoadCrawlingUrlsFromDatabase.func_StartLoadingUrlsFromDB();
GlobalStats.startUpdatingGlobalStatValues();
PagesProcessor.func_StartProcessingWaitingPages();
}, CancellationToken.None,
TaskCreationOptions.LongRunning,
TaskScheduler.Default);
AppDomain currentDomain = AppDomain.CurrentDomain;
Application.Current.DispatcherUnhandledException +=
new DispatcherUnhandledExceptionEventHandler(CloseCrashHandlers.AppDispatcherUnhandledException);
currentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CloseCrashHandlers.CrashCloseHandler);
Closing += new CancelEventHandler(CloseCrashHandlers.CloseHander);
set_Buttons_Status();
_timer = new Timer(updateGlobalStatistics,
null,
PublicSettings.irTimers_Delayed_Start_MiliSeconds,
PublicSettings.ir_RefreshUI_MS);
WebConnectionStats.Init();
Run Code Online (Sandbox Code Playgroud) 好的,这是一本简单的字典
Dictionary<string,int> dicClusters=new Dictionary<string,int>();
dicClusters.Add("A",1);
dicClusters.Add("B",1);
dicClusters.Add("C",2);
dicClusters.Add("D",3);
Run Code Online (Sandbox Code Playgroud)
所以我想从下面编写如下列表
List<List<string>> lstGroupedByKeys=dicClusters.GroupBy(pr => pr.Value)...
Run Code Online (Sandbox Code Playgroud)
结果将是
first list {"A","B"}
second list {"C"}
third list {"D"}
Run Code Online (Sandbox Code Playgroud)
我可以用多个foreach或使用for循环来编码它,但我相信它可以用linQ完成,我想学习ty
c#.NET 4.5.2