我搜索了一下,但找不到任何对我有用的东西。
不久前,我开始使用C#,我的第一个个人项目是一个简单的WebCrawler。它应该检查源代码的特殊字符串,以确定,例如,谷歌分析或类似的东西包括在内。
因此,它的工作很好,但当然,我错过了JS和Iframes,因为HttpWebRequest没有呈现网站,我知道。
例如,我想检查一下"<script src=""
,然后通过拆分获得URL。但这并不像预期的那样有效,我不认为这是一种干净和好的方式。
由于我正在检查字符串,所以可以通过简单地将字符串从"<script"
更改为"< script"
来销毁,因此我不知道如何从大字符串中获取特定的字符串。
我找到了正则表达式( rex )和拆分,但我不确定rex和拆分是否好,因为可能有更多类型的"src="
或split("\"", "\"", text)
我不想要“给你走”,我当然想要理解,自己去做,但是我不知道从这里往哪里走。
对于冗长的文本和示例,我很抱歉,但目前我没有访问权限,除了rex和split的文件之外,没有其他任何内容。
编辑:我想我会创建一个类来检查每个字符是否有一个特殊的行,比如“
最好的,迈克
发布于 2014-06-24 01:48:05
试试Html敏捷性包
我没有亲自使用过它,但是像这样的东西应该可以工作(我还没有测试它):
string url = "some/url";
var request = (HttpWebRequest)HttpWebRequest.Create(url);
var webResponse = (HttpWebResponse)request.GetResponse();
var responseStream = webResponse.GetResponseStream();
var streamReader = new StreamReader(responseStream);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(streamReader.ReadToEnd());
var scripts = doc.DocumentNode.Descendants()
.Where(n => n.Name == "script");
这将使您所有的脚本节点都能按您的意愿处理它们。)
发布于 2014-06-30 01:42:29
所以我找到了一种获得JS URL的方法--这是我的代码
List<string> srcurl = new List<string>();
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("some/url");
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//script[@src]");
foreach (HtmlNode linkNode in linkNodes)
{
HtmlAttribute link = linkNode.Attributes["src"];
srcurl.Add(link.Value);
}
关于@avidenic的代码,如果您想使用它,请注意使用
doc.LoadHtml(streamReader.ReadToEnd());
最好的,迈克
https://stackoverflow.com/questions/24370113
复制相似问题