【发布时间】:2021-07-22 15:41:05
【问题描述】:
我正在尝试想出一个简洁的解决方案来在我的 aspx pages 上创建自动化的 json 架构标记。有问题的标记是 FAQPage,但这无关紧要。
我决定我需要抓取当前页面的内容以查找问题和答案。在一些错误的开始之后,我遇到了 HtmlAgilityPack 插件,它使我能够实现我想要的,但我遇到了一些问题。
可以通过多种方式启动 HtmlAgililtyPack 解析器,但唯一可以为我和我的场景(抓取当前页面)工作的方式是输入一个字符串。
首先,我创建了一个asp ID with a runat="server" 标签。
为了获取字符串,我使用了 HTMLTextWriter;这是代码:
static string ConvertControlToString(Control ctl)
{
string s = null;
var sw = new StringWriter();
using (var w = new HtmlTextWriter(sw))
{
ctl.RenderControl(w);
s = sw.ToString();
}
return s;
}
现在,一切正常 - 在大多数情况下。
但是,我遇到了使用脚本管理器和更新面板的极端情况。我怀疑还会有更多。错误是:... must be inside a form control with a runat="server"。当然可以,但是rendercontrol没有意识到。
那么,两个问题:
- 有没有办法以另一种方式提供 HtmlAgilityPack 解析器 需要一个字符串(并且不会循环)?
- 除了 Control.RenderControl() 之外,还有其他不会导致错误的更好的方法来抓取文本吗?
顺便说一句,我找到了解决我遇到的问题的方法,但它涉及操纵每个受影响的页面,这不是很好。
所以,我想我会把它扔出去,看看是否有更好的解决方法或更好的解决方案。
【问题讨论】:
标签: asp.net web-scraping html-agility-pack