Как да се направи разбор на HTML в
Трябва да премахнете всички URL адреса на атрибутите на тага в HTML HREF страница. Опитах се да използвате регулярни изрази:
Но има много потенциални проблеми:
Регулярните изрази е много бързо се превръща в чудовищно и може да бъде прочетен и проблемните области разкриват все повече и повече.
Регулярните изрази са предназначени да се справят относително прости текстове, които са дадени редовни езици. Регулярните изрази от времето на външния му вид е много по-сложни, особено в Perl, редовно изпълнение израз, който е вдъхновение за други езици и библиотеки, но регулярни изрази все още са зле подготвени (и едва ли някога ще), за да се справят със сложни езици като HTML. HTML трудност обработка е и много сложни правила за обработка на невалиден код, които са били наследени от времето на първите приложения на раждането на интернет, когато няма стандарти не се виждаха, и всеки производител браузъри струпаните уникална и изключителна възможност.
Така че, като цяло, регулярният израз - не най-добрият кандидат за HTML обработка. Обикновено по-мъдро да се използва специализиран парсъри HTML.
Един от днешния HTML анализатора за .NET. В основата взето validator.nu анализатора за Java, а това, от своя страна, е пристанище на анализатора двигателя, Gecko (Firefox). Това гарантира, че парсера ще обработва кода по същия начин, както и модерни браузъри.
API черпи вдъхновение от JQuery, за да изберете елементи, използвайки CSS селектори език. името на метод копирани почти едно към едно, че е за програмисти, които са запознати с JQuery, изследването ще бъде просто.
Той има висока производителност. За да надвишава HtmlAgilityPack + Fizzler на сложни заявки за скорост.
Ако искате по-сложен въпрос, кодът на практика не се усложни:
Най-старият и поради това най-популярният парсера за .NET. Но възрастта не означава, че качеството на, например, в продължение на пет години (.) Висящи разкри критичен бъг Неправилно разбор на HTML4 желание краен маркери. което води до неправилно боравене с HTML тагове, затваряне тагове, които са по желание. Този интерфейс съдържа странности, например, ако нищо не е намерено, той се връща нула. вместо празен колекция.
За да изберете елементи, използващи XPath език, а не на CSS селектори. На поискване код е повече или по-малко се чете:
Все пак, ако имате нужда от сложни заявки, на XPath не е особено пригоден за симулиране CSS селектори:
Надстройка на HtmlAgilityPack, което позволява използването на CSS селектори.
Лиценз: BSD (3-клауза)
Нов играч на полеви ПАРСЕРИ на. За разлика от CsQuery, написан от нулата с ръка в C #. Също така включва парсъри на други езици.
Сред другите странности - Библиотека влека Microsoft BCL преносимост Pack. Ето защо, когато тапата през AngleSharp NuGet, не се изненадвайте, ако Приложено три допълнителни пакети: Microsoft.Bcl, Microsoft.Bcl.Build, Microsoft.Bcl.Async.
HTML обработка е проста:
Това не е сложно, и ако имате нужда от по-сложна логика:
Страшен и ужасен регулярни изрази. Нанесете ги не е желателно, но понякога е необходимо, тъй като парсъри, които изграждат на DOM, особено лакоми, отколкото по регулярни изрази. и те консумират повече време процесора и паметта.
Ако сте влезли в регулярния израз, тогава ще трябва да се разбере, че не може да се гради върху тях гъвкав и абсолютно надеждно решение. Все пак, ако искате да се направи разбор на определен сайт, проблемът може да не е толкова критичен.
За Бога, не е нужно да конвертирате регулярни изрази нечетлив бъркотия. Вие не пиша C # код в един ред с едно писмо имена на променливи, или регулярни изрази не е нужно да се развали. Регулярният израз на двигателя в .NET е достатъчно мощен, за да можете да пишете на качеството код.
Например, тук е малко променен код за извличане на връзки от един въпрос:
@Serginio Използването outerHTML. Селенът е средства на трети страни, за HTML, и все още го правя разбор парсъри, и за които има реч. Сега, ако се използва директно - да, се оказва, след парсерът DOM, две в едно. Селенът може само XPath или CSS-заявки, също? - Squidward 26 април '16 в 10:56
Използвайте CefSharp библиотека за решаване на тези проблеми.
Защо да използваме този подход?
Ако proskrollite надолу, ще забележите, че в допълнение към написването на малък код слой и initsialiatsii решение отнема един или два реда:
Какво е това?
Той успя обвивка над МСЕ (Chromium Embedded рамка). Това означава, че можете да получите силата на Chromium, която се контролира от софтуер.
Защо CEF / CefSharp?
сортове CefSharp
Първите две се използват, ако трябва да даде на потребителите контрола на "Browser". Концептуално, подобен на уеб браузъра на Windows Forms, което е обвивка на IE контрол, вместо на хром, както е в нашия случай.
Ето защо, ние ще използваме CefSharp.OffScreen (дикторски) видове.
писане на код
Да кажем, че имаме конзолно приложение, но това зависи от вас.
Nuget инсталиране пакет CefSharp.OffScreen 57-ма версия:
Инсталирайте Пакет CefSharp.OffScreen -версия 57.0.0
Можете да имате начин да се справят с грешки.
Създаване на клас CefSharpWrapper:
Следваща ние наричаме нашия CefSharpWrapper клас метод на Майн.
Също така задайте x64 или x86 като платформата. Всяка платформа CPU поддържа, но изисква допълнително код.
Може би е недостатъците на подхода също пише: тече пълноправен браузър двигател 100 пъти по-бавно, отколкото да се направи разбор на DOM, и 1000 пъти по-бавно от разбор на редовния сезон. ) Така че много се забавляват с бинарни файлове, добавени. Логично е да се използва с изключение на изцяло динамичен сайт, в който да се разбере, мързел вътрешности и други закоравели случаи. - Squidward 28 Ноември '16 в 11:29
Силно несъгласие за изпълнение. Аз не забелязах някаква значима разлика между разбор HtmlAgilityPack, редовен сезон и по моя начин. - Вадим Овчинников 28 ноември '16 в 11:38