Javascript 刮削某些部分的冬虫夏草网

Javascript 刮削某些部分的冬虫夏草网,javascript,c#,scrape,awesomium,Javascript,C#,Scrape,Awesomium,我早些时候问过这个问题,但我想重新措辞这个问题。我正在为我的项目做一个刮刀。我想让它显示链接的某一部分。链接中唯一更改的部分是编号。这个号码是我想要的。链接如下所示: <a href="/link/player.jsp?user=966354" target="_parent" "=""> string html = webControl2.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].i

我早些时候问过这个问题,但我想重新措辞这个问题。我正在为我的项目做一个刮刀。我想让它显示链接的某一部分。链接中唯一更改的部分是编号。这个号码是我想要的。链接如下所示:

<a href="/link/player.jsp?user=966354" target="_parent" "="">
string html = webControl2.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML");
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(html);

var playerIds = new List<string>();

var playerNodes = htmlDoc.DocumentNode.SelectNodes("//a[contains(@href, '/link/profile-view.jsp?user=')]");

if (playerNodes != null)
{
    foreach (var playerNode in playerNodes)
    {
        string href = playerNode.Attributes["href"].Value;

        var parts = href.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
        if (parts.Length > 1)
        {
            playerIds.Add(parts[1]);
        }
    }

    id.DataSource = playerIds;
}

这段代码是废弃的,但不是我想要的方式,请有人帮帮忙。

使用下面这样的示例html文件,我无法复制异常

<html>
<a href="/link/player.jsp?user=966354" target="_parent" "="">test</a>
</html>
将在我的示例中返回“test”。你可能想要的是

 document.getElementsByTagName('a')[0].href
这将返回href部分

“innerHTML”属性将返回开始标记和结束标记之间的所有内容(例如)。这可能是您在获取“html”元素时获得更好成功的原因——您最终解析了整个链接

仅供参考,作为测试,您可以使用浏览器测试javascript输出。

我将使用(通过NuGet安装)和XPath查询来解析HTML

大概是这样的:

<a href="/link/player.jsp?user=966354" target="_parent" "="">
string html = webControl2.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML");
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(html);

var playerIds = new List<string>();

var playerNodes = htmlDoc.DocumentNode.SelectNodes("//a[contains(@href, '/link/profile-view.jsp?user=')]");

if (playerNodes != null)
{
    foreach (var playerNode in playerNodes)
    {
        string href = playerNode.Attributes["href"].Value;

        var parts = href.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
        if (parts.Length > 1)
        {
            playerIds.Add(parts[1]);
        }
    }

    id.DataSource = playerIds;
}
string html=webControl2.ExecuteJavascriptWithResult(“document.getElementsByTagName('html')[0].innerHTML”);
var htmlDoc=新的HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(html);
var playerIds=新列表();
var playerNodes=htmlDoc.DocumentNode.SelectNodes(//a[contains(@href,“/link/profile view.jsp?user=”)];
if(playerNodes!=null)
{
foreach(playerNodes中的变量playerNode)
{
string href=playerNode.Attributes[“href”].Value;
var parts=href.Split(新字符[]{'='},StringSplitOptions.RemoveEmptyEntries);
如果(零件长度>1)
{
添加(第[1]部分);
}
}
id.DataSource=playerIds;
}
此外,您可能会发现这两个简单的帮助器类很有用:


第一个用于WebView/WebControl,第二个用于生成JS代码,用于通过XPath+获取JSObject的坐标来检索元素(JSObject)

我也尝试过这个方法。它拉了链接,但错误的链接也拉了整个链接,这是我不想要的。我只想抓取数字“966354”而不是整个链接。但感谢您的回复。您需要以某种方式从页面中的其他链接中识别该链接(最好是通过ID,但在您的示例中似乎不可用,因此可能是通过“target=“\u parent”的存在'属性。在获得正确的链接后,只需正则表达式解析链接'user='部分后的位。感谢您的帮助。编辑,它只是因为一个错误而崩溃:未处理NullReferenceException指向foreachplayerNodes,如果没有合适的元素,则节点将为null。因此,如果有时在没有这些元素的页面上执行它。
 document.getElementsByTagName('a')[0].href
string html = webControl2.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML");
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(html);

var playerIds = new List<string>();

var playerNodes = htmlDoc.DocumentNode.SelectNodes("//a[contains(@href, '/link/profile-view.jsp?user=')]");

if (playerNodes != null)
{
    foreach (var playerNode in playerNodes)
    {
        string href = playerNode.Attributes["href"].Value;

        var parts = href.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
        if (parts.Length > 1)
        {
            playerIds.Add(parts[1]);
        }
    }

    id.DataSource = playerIds;
}