标签: anglesharp

使用AngleSharp在C#中解析JavaScript网页

网页使用javascript来构建其html所以我需要支持js的html解析器.
我发现了角度锐利,但我不能让它起作用.

using AngleSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace AngleSharpScraping
{
    class Program
    {
        static void Main(string[] args)
        {
            GetMkvToolNix();
            Console.ReadKey();
        }

        static async void GetMkvToolNix()
        {
            // Create a new configuration with javascript interpreter.
            var config = new Configuration().WithJavaScript();

            // Parsing process.
            var document = await BrowsingContext.New(config).OpenAsync(Url.Create("http://www.fosshub.com/MKVToolNix.html"));
            var link = document.QuerySelector("body > div.container.page-content > div > div.col-sm-9 > article > div.main-dl-box > p:nth-child(2) > a.dwl-link.xlink").GetAttribute("data");

            Console.WriteLine(link);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript c# web-scraping anglesharp

6
推荐指数
2
解决办法
7577
查看次数

在解析片段时,我可以阻止AngleSharp外推完整的HTML文档吗?

无论如何都要让AngleSharp 在解析片段时创建完整的HTML文档.例如,如果我解析:

<title>The Title</title>
Run Code Online (Sandbox Code Playgroud)

我得到一个完整的HTML文档DocumentElement.OuterHtml:

<html><head><title>The Title</title></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)

如果我解析:

<p>The Paragraph</p>
Run Code Online (Sandbox Code Playgroud)

我得到另一个完整的HTML文档:

<html><head></head><body><p>Hey</p></body></html>
Run Code Online (Sandbox Code Playgroud)

请注意,AngleSharp足够聪明,可以知道我的片段应该去哪里.在一种情况下,它将它放在HEAD标签中,而在另一种情况下,它将它放在BODY标签中.

这很聪明,但如果我只想让片段退出,我不知道从哪里得到它.所以,我不能只是调用Body.InnerHtml因为根据我解析的HTML,我的片段可能在其中Head.InnerHtml.

有没有办法让AngleSharp不能创建一个完整的文档,还是有其他方法可以在解析后将我的孤立片段退出?

anglesharp

6
推荐指数
2
解决办法
649
查看次数

Anglesharp - 如何从Yelp网站获得评分和评论?

我想尝试我的手和webscraping.我注意到Anglesharp非常适合.Net环境.我正在尝试从yelp网站获取所有描述和评级的列表,我不会收到任何错误或任何结果.这是html的一部分(在" https://www.yelp.ca/biz/walmart-toronto-12 "中更详细):

<div class="rating-very-large">
    <i class="star-img stars_2" title="2.0 star rating">
        <img alt="2.0 star rating" class="offscreen" height="303" src="//s3-media4.fl.yelpcdn.com/assets/srv0/yelp_styleguide/c2252a4cd43e/assets/img/stars/stars_map.png" width="84">
    </i>
        <meta itemprop="ratingValue" content="2.0">
</div>
<p itemprop="description" lang="en">This Walmart still terrifies me<br><br>Baby things can be found on the back right of the lower level. Godspeed.</p> 

<div class="rating-very-large">
    <i class="star-img stars_1" title="1.0 star rating">
        <img alt="1.0 star rating" class="offscreen" height="303" src="//s3-media4.fl.yelpcdn.com/assets/srv0/yelp_styleguide/c2252a4cd43e/assets/img/stars/stars_map.png" width="84">
    </i>
        <meta itemprop="ratingValue" content="1.0">
</div>
<p itemprop="description" lang="en">Wow I don&#39;t even know where to begin, </p> 
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

var config = …
Run Code Online (Sandbox Code Playgroud)

linq web-scraping c#-4.0 anglesharp

6
推荐指数
1
解决办法
253
查看次数

AngleSharp解析

当您没有要使用的类名或ID时,找不到使用AngleSharp进行解析的许多示例.

HTML

<span><a href="google.com" title="Google"><span class="icon icon_none"></span></a></span>
<span><a href="bing.com" title="Bing"><span class="icon icon_none"></span></a></span>
<span><a href="yahoo.com" title="Yahoo"><span class="icon icon_none"></span></a></span>
Run Code Online (Sandbox Code Playgroud)

我想从任何<a>标题= Bing的标签中找到href

在Python BeautifulSoup我会用

item_needed = a_row.find('a', {'title': 'Bing'})
Run Code Online (Sandbox Code Playgroud)

然后抓住href属性

或jQuery

a[title='Bing']
Run Code Online (Sandbox Code Playgroud)

但是,我坚持使用AngleSharp,例如.以下示例 https://github.com/AngleSharp/AngleSharp/wiki/Examples#getting-certain-elements

c#AngleSharp

var parser = new AngleSharp.Parser.Html.HtmlParser();
var document = parser.Parse(@"<span><a href=""google.com"" title=""Google""><span class=""icon icon_none""></span></a></span>< span >< a href = ""bing.com"" title = ""Bing"" >< span class=""icon icon_none""></span></a></span><span><a href = ""yahoo.com"" title=""Yahoo""><span class=""icon icon_none""></span></a></span>");

//Do something with LINQ
var blueListItemsLinq = document.All.Where(m => m.LocalName == "a" && //stuck);
Run Code Online (Sandbox Code Playgroud)

c# html-parsing anglesharp

5
推荐指数
1
解决办法
1万
查看次数

AngleSharp 的 HtmlParser 线程安全吗?

我可以创建一个private static readonly HtmlParser HtmlParser = new HtmlParser();并在多个线程中安全地使用它吗?

或者我应该为每个线程或每个使用创建一个解析器以避免并发问题?

.net c# html-parsing anglesharp

5
推荐指数
1
解决办法
556
查看次数

AngleSharp:在查找元素之前运行所有 JavaScript

我目前正在使用 AngleSharp 构建一个用于网络自动化的应用程序。我已成功登录网站,但无法使用 context.Active.QuerySelectorAll 找到我要查找的元素。

我知道这可能是因为某些 JavaScript 尚未在我正在搜索的 HTML 中运行,按照此链接:Is the HTML shown via 'View Source' different from the HTML shown in (Firebug) Developer Tools?

在查找特定元素之前,如何强制 AngleSharp 执行所有 JavaScript?

代码:

var config = AngleSharp.Configuration.Default.WithDefaultLoader().WithCookies().WithJavaScript().WithCss();
            var browsingContext = BrowsingContext.New(config);

            await browsingContext.OpenAsync("https://users.premierleague.com/");
            await browsingContext.Active.QuerySelector<IHtmlFormElement>("form[action='/accounts/login/']").SubmitAsync(new
            {
                login = "abc@gmail.com",
                password = "password"
            });
            await browsingContext.OpenAsync("https://fantasy.premierleague.com/a/team/my/");
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切工作正常,我可以确认我已登录。但是,我似乎无法获得以下返回的值:

var x = browsingContext.Active.QuerySelectorAll("*").Where(m => m.ClassName == "ismjs-link ism-link ism-link--more");
Run Code Online (Sandbox Code Playgroud)

我知道这个元素存在,因为我已经通过 Google Chrome 上提供的“检查”功能检查了多次。

我缺少什么/如何让 JavaScript 运行?

谢谢!

javascript c# anglesharp

5
推荐指数
0
解决办法
2396
查看次数

在 .Net 4.7.2 中导入 AngleSharp 时绑定重定向以某种方式尝试将 NetStandard 2 作为 dll 引入

我有一个旧版应用程序在旧的 Windows 2008 R2 服务器上运行。该应用程序经历了许多 .Net 版本,目前在 4.7.2 上。多年来,它一直稳定如磐石,虽然有迁移计划以摆脱旧的物理服务器,但它必须存活一段时间。

一项新功能表明需要一些 HTML 抓取。我为 AngleSharp v0.12.0 添加了 NuGet 包,经过单元测试,在我的 Win10 开发机器上一切正常。使用 AngleSharp 的新类很简单。

所以我部署到 prod 服务器,包括对 app.config 的更改;

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
Run Code Online (Sandbox Code Playgroud)

这些是我可以从旧版本中识别出的唯一更改。

当我在生产中运行该应用程序时,它崩溃了。

System.IO.FileLoadException: Could not load file or assembly 'System.Text.Encoding.CodePages, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the …
Run Code Online (Sandbox Code Playgroud)

c# assembly-binding-redirect anglesharp .net-4.7.2

5
推荐指数
2
解决办法
1387
查看次数

如何只加载AngleSharp中的特定元素?

我正在使用AngleSharp解析HTML5,我正在做的是用一些HTML包装我想要解析的元素,使其成为有效的HTML5然后使用解析器,是否有更好的做法它?意思是,直接解析特定元素并验证结构确实是HTML5?

c# html5 parsing anglesharp

4
推荐指数
1
解决办法
2022
查看次数

AngleSharp 提取格式化文本

我想知道是否可以使用 AngleSharp 从 HTMLDocument 中提取格式化文本。我正在使用以下代码来提取文本。我遇到的问题是提取的文本一起运行,每个元素之间没有中断。

var parser = new HtmlParser();
var document = parser.Parse("<script>var x = 1;</script> <h1>Some example source</h1><p>This is a paragraph element</p>");
var text = document.Body.Text();
Run Code Online (Sandbox Code Playgroud)

这将返回以下文本

一些示例源这是一个段落元素

理想情况下,我希望它返回 Some example source 这是一个段落元素 ,其中每个节点文本值之间有一些分隔。

c# anglesharp

4
推荐指数
1
解决办法
2024
查看次数

Html 解析器。无法加载文件或程序集

错误报告

System.TypeInitializationException  
  HResult = 0x80131534  
  Message = Initializer type "AngleSharp.Configuration" threw an exception.  
  Source = AngleSharp  
  Stack trace:  
   in AngleSharp.Configuration.get_Default ()  
   in AngleSharp.BrowsingContext.NewFrom [TService] (TService instance)  
   in AngleSharp.Html.Parser.HtmlParser..ctor ()  
   in rsh.Parser_test..ctor () in Z: \ vs \ csharp \ prb \ rsh \ rsh \ Parser_test.cs: line 19  
   in rsh.Form1..ctor () in Z: \ vs \ csharp \ prb \ rsh \ rsh \ Form1.cs: line 18  
   in rsh.Program.Main () in Z: \ vs \ csharp \ prb \ rsh …
Run Code Online (Sandbox Code Playgroud)

c# anglesharp

4
推荐指数
1
解决办法
2181
查看次数