Fizzler和QuerySelectorAll

时间:2012-06-04 10:19:47

标签: c# html-agility-pack

我发现Fizzler为html解析器,jQuery为selector。但似乎visual studio无法解析QuerySelectorAll方法。

这是我的代码:

using HtmlAgilityPack;
HtmlAgilityPack.HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument document = web.Load(url);
var c = document.QuerySelectorAll('div');

我错过了任何推荐信吗?

编辑: 经过一些搜索,我发现这个代码使用了Fizzler

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
const string search = "td";
SelectorGenerator<HtmlNode> selectorGenerator1 = new SelectorGenerator<HtmlNode>(new HtmlNodeOps());
HumanReadableSelectorGenerator selectorGenerator2 = new HumanReadableSelectorGenerator();
Parser.Parse(search, new SelectorGeneratorTee(selectorGenerator1, selectorGenerator2));
var c =  selectorGenerator1.Selector(Enumerable.Repeat(doc.DocumentNode, 1)).ToList();

我仍在寻找我的问题的好答案。

5 个答案:

答案 0 :(得分:4)

可能这个:

using Fizzler.Systems.HtmlAgilityPack;

还要点击CsQuery,我的C#jQuery端口:https://github.com/jamietre/CsQuery

var dom = CQ.CreateFromUrl(url);
var c = dom["div"];

..加上你习惯使用jQuery的所有内容。

答案 1 :(得分:2)

老问题,但是有效:

using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;

var web = new HtmlWeb();
var document = web.Load("some-url");
var c = document.DocumentNode.QuerySelectorAll("div");

QuerySelectorAllHtmlNode类型的扩展方法,但您尝试在HtmlDocument上使用它。

答案 2 :(得分:1)

您很可能缺少对Fizzler.Systems.HtmlAgilityPack

的引用

我建议添加这个nuget包。 Fizzler

using Fizzler.Systems.HtmlAgilityPack;
using HtmlAgilityPack;    
using HtmlDoc = HtmlAgilityPack.HtmlDocument;

然后你可以像

一样使用它
var html = new HtmlDoc();
html.LoadHtml(HtmlText);

// Fizzler for HtmlAgilityPack is implemented as the 
// QuerySelectorAll extension method on HtmlNode

var document = html.DocumentNode;

// yields: [<p class="content">Fizzler</p>]
document.QuerySelectorAll(".content");

答案 3 :(得分:0)

如果使用QuerySelectorAll,你应该创建一个数组来检查div是否为null然后你可以使用queryselector

 HtmlNode[] test= html.DocumentNode.QuerySelectorAll("div.hlogo").ToArray();
      for (int rowcounter = 0; rowcounter < test.Count(); rowcounter++)
       {
      var logoname = test[rowcounter].QuerySelector("a").InnerText;    
       }

答案 4 :(得分:0)

我有同样的问题并解决了它。也许你犯了同样的错误。我在几个配置文件中定义了程序集。当我删除所有并再次安装软件包时,一直运行良好。

  • 在nuget管理器中卸载FizzlerFizzler.Systems.HtmlAgilityPack
  • 从bin和debug文件夹中删除所有这些dll。
  • 删除appconfig和webconfig中有关这些dll的所有依赖项程序集
  • 在manage nuget包中安装最新版本的FizzlerFizzler.Systems.HtmlAgilityPack个包。

    之后,您可以随时随地使用QuerySelectorAll和其他方法。

不要只安装HtmlAgilityPack。当您安装Fizzler时,HtmlAgilityPack将自动安装。