求助!网页分页数据如何抓取?一个很奇怪的疑问,望解答

cdminer 2015-09-02 09:25:47
抓取http://search.10jqka.com.cn/stockpick/search?typed=1&preParams=&ts=1&f=1&qs=1&selfsectsn=&querytype=&searchfilter=&tid=stockpick&w=2014年4月18号+上证50+pe+pb这个网页的分页数据,点击下页那的源码是<a onclick="mylog('ts|1、qs|flip、tid|stockpick','pick','')" class="next " href="javascript:;" id="next">下页</a>,我用webBrowser来抓取,第一种方式是直接添加一个webBrowser控件,但是程序一直卡在while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)这行,webBrowser1.ReadyState状态一直是interactive,我也试过去掉这条判断,延时执行后面的语句,但是始终找不到下页这个元素,感觉就是一直没有加载完成。

private void button1_Click(object sender, EventArgs e)
{
const string url = "http://search.10jqka.com.cn/stockpick/search?typed=1&preParams=&ts=1&f=1&qs=1&selfsectsn=&querytype=&searchfilter=&tid=stockpick&w=2014年4月18号+上证50+pe+pb";
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate(url);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
foreach (HtmlElement element in webBrowser1.Document.All)
{
if (element.InnerText == "下页")
{
element.InvokeMember("click");//点击
}
}
}

第二种我是动态实例化一个WebBrowser对象,代码如下,这种方式代码可以顺利运行,但是我如何获取点击后的页面数据呢?这两种方式有什么不一样的?或者有其他方式能解决的也请指导一下,本人业余新手,谢谢!

public static void GetHisData(string url)
{
WebBrowser browser = new WebBrowser();
browser.ScriptErrorsSuppressed = true;
browser.Navigate(url);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
foreach (HtmlElement element in browser.Document.All)
{
if (element.InnerText == "下页")
{
element.InvokeMember("click");//点击
}
}
}
...全文
381 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡龙 2015-09-04
  • 打赏
  • 举报
回复
先用fiddler抓包弄清楚网页是怎么提交的
devmiao 2015-09-04
  • 打赏
  • 举报
回复
加上延迟看看,网页没有正确载入。
cdminer 2015-09-03
  • 打赏
  • 举报
回复
你好,谢谢回答,我试了你的代码,在获取的页面文件中检索不到"mylog('ts|1、qs|flip、tid|stockpick','pick','')",我当时是用火狐浏览器查的元素源文件,因为这个页面的页数是动态的,不是固定页数的,我理解是不是页数,包括下页这些元素都是js运行出来的结果,不知道我的理解是否正确?
ajianchina 2015-09-02
  • 打赏
  • 举报
回复
mylog这个js方法你完全能够解析拼接出新的url,所以就别用WebBrowser了,先给一个通过HttpWebRequest抓取页面文件的方法:

public static string UrlToString(string Url)
{
	HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
	request.Method = "GET";
	request.ContentType = "text/ html;charset=UTF-8";
	string str = string.Empty;
	HttpWebResponse response = (HttpWebResponse)request.GetResponse();
	using (Stream myResponseStream = response.GetResponseStream())
	{
		using (StreamReader myStreamReader = new StreamReader(myResponseStream, System.Text.Encoding.UTF8))
		{
			str = myStreamReader.ReadToEnd();
		}
	}
	return str;
}
然后你在抓到的文件中检索"mylog('ts|1、qs|flip、tid|stockpick','pick','')",根据mylog的方法逻辑重新拼出新的url,再次调用UrlToString方法抓取页面文件。
内容概要:本文提出了一种基于高保真电磁暂态仿真的智能电网虚假数据注入攻击(FDIA)数据集构建与影响分析方法,依托PSCAD与MATLAB联合仿真平台,构建IEEE标准测试系统(如9节点或39节点系统)的精细化电磁暂态模型,精确模拟电网在正常运行及遭受FDIA下的动态响应过程,采集高精度、高时间分辨率的电压、电流、功率等电气量时序数据,生成具有强物理约束性和可复现性的攻击数据集。研究进一步结合现代状态估计理论、残差检测机制与机器学习分类算法,对FDIA的隐蔽性特征、攻击传播路径、系统关键变量偏移程度及暂态稳定性影响进行系统性量化评估,旨在为智能电网安全防护体系的设计、入侵检测模型的训练与攻防策略的有效性验证提供高可信度的数据基础与理论支撑。; 适合人群:面向电力系统自动化、能源互联网安全、工业控制系统安全等方向的研究生、科研人员及工程技术人员,要求具备电力系统分析、状态估计基础、MATLAB/PSCAD联合仿真能力以及基本的网络安全背景知识。; 使用场景及目标:① 复现和验证主流FDIA相关学术论文中的攻击模型与检测算法;② 构建符合实际物理规律、可用于训练深度学习或机器学习驱动的入侵检测系统(IDS)的真实攻击数据集;③ 深入探究虚假数据注入对电网暂态稳定性、继电保护动作逻辑、频率调节等关键功能的影响机理。; 阅读建议:本资源以高保真仿真为核心,强调数据生成的真实性与实验可重复性,读者应重点关注PSCAD与MATLAB之间的数据交互机制、攻击向量的设计原则与注入方式、以及多维度影响评估指标体系的构建方法,建议结合所提供的仿真模型与代码进行动手实践与结果验证。
内容概要:本文系统阐述了基于格子Boltzmann方法(Lattice Boltzmann Method, LBM)对二维通道内多孔介质流动进行数值模拟的理论体系、Matlab代码实现流程及结果验证方法。深入剖析了LBM在处理复杂流体系统尤其是不规则几何结构多孔介质流动中的独特优势,详细介绍了模型构建过程、边界条件设定、碰撞与传播环节的算法实现机制,并通过Matlab编程完成仿真运算,实现了对速度场、压力场等关键物理量的可视化分析与精度验证,确保模拟结果具备良好的准确性与可靠性。; 适合人群:具备流体力学基础知识和一定Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事多孔介质流动、计算流体力学(CFD)或LBM方法研究的相关领域研究人员。; 使用场景及目标:①掌握格子Boltzmann方法的核心原理及其在多孔介质流动模拟中的具体应用;②学习利用Matlab实现LBM算法并开展科学计算与结果可视化的方法;③为相关科研项目、学术论文复现或实际工程仿真提供可复用的代码框架与技术实施路径。; 阅读建议:建议读者结合流体力学与数值计算相关背景知识,逐步理解算法推导过程,动手运行并调试所提供的Matlab代码,通过调整参数或几何模型加深对LBM方法灵活性与适用性的认识,同时鼓励将该方法拓展至三维流动或多物理场耦合问题的研究中。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧