是否可以抓取动态网页生成的数据?我的意思是例如This website使用一些java脚本生成标签<font>
document.write("<font class=spy2>:<\/font>"+(v2j0j0^o5r8)+(r8d4x4^y5i9)+(b2r8e5^u1p6)+(r8d4x4^y5i9))
每次刷新页面的值都会发生变化。每个生成的代码表示一个从0到9的数字,例如(code1)+(code2)+(code3)+(code4)
,在后端编写一些类型的解析器,它可以理解它并相应地生成数字。
一旦页面被渲染,例如code1
被设置为数字4的位置,数字4的生成位置就会在解析之后来自此代码。
如果我们使用HtmlAgilityPack
,我们会看到java脚本代码,但不会看到它生成的输出。我们有什么办法可以在呈现页面时读取它创建的标记吗?
答案 0 :(得分:0)
感谢您指出。我看到通过实施.same结果,但后来又看了一个评论谁说使用IE引擎我转过身并做了一个小应用程序来完成工作。我添加了IE并导航到网站,阅读内容。这是代码
private void webBrowser1_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
{
System.Windows.Forms.HtmlElementCollection elementsforViewPost =
webBrowser1.Document.GetElementsByTagName("font");
foreach (System.Windows.Forms.HtmlElement current2 in elementsforViewPost)
{
if (current2.InnerText != null && CheckForValidProxyAddress(current2.InnerText) &&
ObtainedProxies.Where(index=>index.ProxyAddress == current2.InnerText.Trim()).ToList().Count == 0)
{
Proxy data = new Proxy();
data.IsRetired = false;
data.IsActive = true;
int result = 1;
data.DomainsVisited = 0;
data.ProxyAddress = current2.InnerText.Trim();
ObtainedProxies.Add(data);
}
并且检查收到的文本是否有效代理这是我很久以前通过googling从一些页面获得的
private bool CheckForValidProxyAddress(string address)
{
//create our match pattern
//string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$:([0-9][0-9][0-9][0-9])";
string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b\:[0-9]{0,4}";
//create our Regular Expression object
Regex check = new Regex(pattern);
//boolean variable to hold the status
bool valid = false;
//check to make sure an ip address was provided
if (address == "")
{
//no address provided so return false
valid = false;
}
else
{
//address provided so use the IsMatch Method
//of the Regular Expression object
valid = check.IsMatch(address, 0);
}
//return the results
return valid;
}
答案 1 :(得分:0)
我认为你不得不以某种方式使用IE引擎。