문제
Ok Ive는이 코드를 얻었습니다.
public static string ScreenScrape(string url)
{
System.Net.WebRequest request = System.Net.WebRequest.Create(url);
// set properties of the request
using (System.Net.WebResponse response = request.GetResponse())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
}
이제 텍스트를 필터링하여 div class = "comment"를 가져 오기 위해 일반 표현식을 사용하는 것 외에 다른 옵션이 있습니까? 아니면 그게 유일한 방법인가요?
감사해요
해결책
당신은 그것을 사용해야합니다 HTML 민첩성 팩.
예를 들어:
var doc = new HtmlWeb().Load(url);
var comments = doc.Descendants("div")
.Where(div => div.GetAttributeValue("class", "") == "comment");
이것은 찾을 수 없습니다 <div class="OtherClass comment">
; 당신이 그것을 찾고 있다면, 당신은 전화 할 수 있습니다 IndexOf
.
다른 팁
htmlagilitypack은 패키지 일뿐 아니라 HTML 파일을 조작 할 수있는 패키지 일뿐입니다. 그러나 Phantomjs를 사용하여 셀레늄 웹 드라이버 스크랩 스크랩 스크랩을하려면 더 나은 솔루션입니다. Phantomjs는 헤드리스 웹 브라우저이므로 정말 빠릅니다. 또한 HTML 민첩성 팩에 비해 훨씬 더 나은 기능을 갖추고 있습니다. 짧은 것이 있습니다 강의 이 주제에 대해.
당신은 html을 구문 분석하기 위해 정규 표현식을 사용하지 않습니다 - 그들은 너무 복잡하기 때문에 작업에 잘못된 도구입니다.
HTML 파서를 사용해야합니다.
또한보십시오:C# HTML 파서를 찾고 있습니다
당신은 첫 번째 호출 포트가되어야합니다 HTML 민첩성 팩.
정규 표현식은 .NET이 아닌 언어에 대한 이러한 종류의 입력을 구문 분석하는 고전적인 방법입니다.
추가로,이를 XML 변형 (예 : XHTML)으로 정규화 할 수 있다면 XPath를 사용하여 쿼리를 사용하고 필요한 노드를 검색 할 수 있습니다.
당신이하고 싶지 않은 것은 자신의 파서를 구현하는 것입니다.