{"id":372763,"date":"2023-07-26T14:38:23","date_gmt":"2023-07-26T13:38:23","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=dotnet&#038;p=372763"},"modified":"2023-07-26T14:42:22","modified_gmt":"2023-07-26T13:42:22","slug":"oss-powerups-anglesharp-webinar-recording","status":"publish","type":"dotnet","link":"https:\/\/blog.jetbrains.com\/en\/dotnet\/2023\/07\/26\/oss-powerups-anglesharp-webinar-recording","title":{"rendered":"OSS Power-Ups: AngleSharp \u2013 Webinar Recording"},"content":{"rendered":"\n<p>The recording of our webinar, <strong>OSS Power-Ups: AngleSharp<\/strong>, with <a href=\"https:\/\/twitter.com\/florianrappl\" target=\"_blank\" rel=\"noreferrer noopener\">Florian Rappl<\/a>, is available. This was the <strong>eleventh episode<\/strong> of our <a href=\"https:\/\/lp.jetbrains.com\/oss-powerups\/\" target=\"_blank\" rel=\"noreferrer noopener\">OSS Power-Ups<\/a> series, where we put a spotlight on open-source .NET projects. <a href=\"https:\/\/www.jetbrains.com\/community\/newsletters\/\" target=\"_blank\" rel=\"noreferrer noopener\">Subscribe to our community newsletter<\/a>\u00a0to receive notifications about future webinars.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p><em>Ever wanted to know the internals of an evergreen web browser? How does HTML5 error correction work and why is it the cure to different looking webpages? But most importantly: How can we deal with webpages most efficiently in .NET? The <a href=\"https:\/\/anglesharp.github.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">AngleSharp<\/a> project gives answers to all of these questions. It is &#8211; at its core &#8211; a headless browser engine, which has a modular architecture. If we only want to parse HTML then we get a state of the art HTML5 parser. In this session we cover the project and dive into some of the lesser known, but very important, parts of HTML5.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"OSS Power-Ups: AngleSharp\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/6ZCCTXv9Evk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Webinar agenda:<\/strong><\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=0\" target=\"_blank\" rel=\"noreferrer noopener\">00:00<\/a> &#8211; Welcome!<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=66\" target=\"_blank\" rel=\"noreferrer noopener\">01:06<\/a> &#8211; About OSS PowerUps<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=241\" target=\"_blank\" rel=\"noreferrer noopener\">04:01<\/a> &#8211; Hello Florian!<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=500\" target=\"_blank\" rel=\"noreferrer noopener\">08:20<\/a> &#8211; What is AngleSharp?<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=785\" target=\"_blank\" rel=\"noreferrer noopener\">13:05<\/a> &#8211; AngleSharp Hello World Example<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=1000\" target=\"_blank\" rel=\"noreferrer noopener\">16:40<\/a> &#8211; Content Parsing and HTML5<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=1570\" target=\"_blank\" rel=\"noreferrer noopener\">26:10<\/a> &#8211; DOM Object Model and Query Selectors<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=1950\" target=\"_blank\" rel=\"noreferrer noopener\">32:30<\/a> &#8211; XPath vs. CSS Selectors<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=2030\" target=\"_blank\" rel=\"noreferrer noopener\">33:50<\/a> &#8211; Document Manipulation<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=2198\" target=\"_blank\" rel=\"noreferrer noopener\">36:38<\/a> &#8211; HTML Pitfalls AngleSharp saves you from<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=2450\" target=\"_blank\" rel=\"noreferrer noopener\">40:50<\/a> &#8211; HTML vs. JSX Formatting (Pretty Markup Formatting)<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=2796\" target=\"_blank\" rel=\"noreferrer noopener\">46:36<\/a> &#8211; Using HttpClient over WebRequest<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=3038\" target=\"_blank\" rel=\"noreferrer noopener\">50:38<\/a> &#8211; Question: Can AngleSharp detect unused CSS?<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=3123\" target=\"_blank\" rel=\"noreferrer noopener\">52:03<\/a> &#8211; Question: Quirky URLs (Uri vs. Url)<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=3725\" target=\"_blank\" rel=\"noreferrer noopener\">62:05<\/a> &#8211; About Performance<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=4070\" target=\"_blank\" rel=\"noreferrer noopener\">67:50<\/a> &#8211; About HTML &amp; CSS Specifications<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=4444\" target=\"_blank\" rel=\"noreferrer noopener\">74:04<\/a> &#8211; Where is AngleSharp being used? (Blazor, bUnit)<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=4774\" target=\"_blank\" rel=\"noreferrer noopener\">79:34<\/a> &#8211; JavaScript Support<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6ZCCTXv9Evk&amp;t=5267\" target=\"_blank\" rel=\"noreferrer noopener\">87:47<\/a> &#8211; Outro<\/li>\n<\/ul>\n\n\n\n<p><strong>Resources:<\/strong><\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/anglesharp.github.io\" target=\"_blank\" rel=\"noopener\">AngleSharp Website<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/AngleSharp\" target=\"_blank\" rel=\"noopener\">AngleSharp GitHub Organization<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/sponsors\/FlorianRappl\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Sponsor Florian<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>About the presenter:<\/strong><\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/07\/profile_square.jpg\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Florian Rappl<\/h4>\n                                                <p>Dr. Florian Rappl is Solution Architect for IoT and distributed web applications at smapiot. His main interest lies in the creation of innovative architectures that scale in development and usage. He won several prizes for his work and is a Microsoft MVP in the area of developer technologies. He regularly blogs and writes articles for popular magazines and websites in the web development space.<\/p>\n<p><a href=\"https:\/\/twitter.com\/FlorianRappl\" target=\"_blank\" rel=\"noopener\">Follow Florian on Twitter<\/a>.<\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":553,"featured_media":370039,"comment_status":"closed","ping_status":"closed","template":"","categories":[4992,1401,30],"tags":[1269,184,558,6442,6183],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet\/372763"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/dotnet"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/553"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=372763"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet\/372763\/revisions"}],"predecessor-version":[{"id":376322,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/dotnet\/372763\/revisions\/376322"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/370039"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=372763"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=372763"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=372763"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=372763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}