C #을 사용하여 HTML 정리

html html-agility-pack malformed screen-scraping

문제

C #을 사용하여 조작 된 HTML을 어떻게 수정합니까? 좋은 대답은 HTML 민첩성 팩 샘플이 될 것입니다!


나는 합법적 인 사용을 위해 사이트를 긁어 모으고있다. 사이트의 HTML은 괜찮지 만 몇 가지 성가신 문제가 있습니다.

내가 갈 수있는 한 가지 방법은 정규 표현식을 이용하는 것입니다. Expression Web을 사용하여 문제점을 분석하고이를 해결하는 데 필요한 정규 표현식을 분석했습니다. 따라서 한 가지 방법은 RegexBuddy 와 같은 도구를 사용하여 이러한 정규 표현식에 대한 C # 코드를 생성하는 것입니다.

그러나 C #에서 잘못된 형식의 HTML을 처리하는 데 권장되는 도구는 HTML Agility Pack (HAP)입니다. 더욱이, 나는 소수의 페이지만을 분석했으며, 앞으로의 페이지에는 아직 풀지 않은 패턴이 포함될 것 같아서 "다음 몇 페이지의 오류를 찾아서 정정"하기를 싫어합니다. 사업. 따라서 HAP에 이미 견고하고 항상 작동하는 솔루션이 있다면 이는 아주 좋습니다. 문제는 여기에있는 몇 가지 언급을 제외하고는 개체 별 API 도움말 파일을 제외하고는이 도구에 대한 사용법 설명서를 찾을 수 없었습니다.

따라서 RegexBuddy (무료 평가판이 아님)에서 $ 시간과 학습을하기 전에 또는 HAP의 API 문서에서 내 문제를 해결하기 전에 손쉽게이 작업을 수행 할 수 있습니까? HAP 샘플은 도움이 될 것입니다 :-)

수락 된 답변

내가 여기에서 한 대답은 다음과 같습니다. 1) 제어 할 수없는 웹 사이트를 긁어 모으는 경우, 변경하려는 페이지의 레이아웃이 변경 될 때마다 항상 스크래퍼를 수정해야하는 유지 관리 모드로 들어갑니다. . 2)이 알려진 사이트에 국한되는 경우, 문제를 조정하기 위해 스크레이퍼를 쓰지 마십시오.

따라서 유지 관리 모드로 들어가야하는 경우 가능한 한 쉽습니다. 따라서 내 프로세스는 다음과 같습니다.

  1. Webius의 SWExplorerAutomation 을 사용하여 웹 페이지의 장면을 탐지합니다. 아이디어는 장면이 IE 용으로 정의한 조건 모음입니다. 웹 페이지가로드되면 IE는 어떤 조건이 충족되는지 확인하려고합니다 (예 : 페이지 제목이 "계정 로그인"이고 페이지에 "로그인"텍스트 상자, "암호"텍스트 상자가 있음). 장면에 대응하는 조건 세트가 검출되면, IE는 장면이 검출되었음을보고한다. 이 모델은 추상화 레이어를 제공합니다. 웹 페이지의 일부 변경 사항은 장면 파일의 변경 사항으로 변환 될 수 있으므로 코드를 변경하지 않아도됩니다. 또한 IE의 이벤트 구동 모델에서 나를 보호 할 수 있습니다. 나는 "장면"이라고 부릅니다.이 제품을 평가하고 있지만 아직 사용하지 않을 것이라고합니다. 주로 문서가 끔찍하기 때문입니다. 또 다른 대안은 Watin 이고 다른 하나는 SWEA를 아직 구입하지 않은 이유는 Watin에 대한 스패밍의 저자를 비난하는 이 기사 입니다.
  2. 웹 페이지를 가져 오면 Expression Web을 사용하여 호환성 검사를 실행하고 오류를 식별합니다.
  3. RegexMagic 을 사용하여 오류를 제거하고 수정합니다. 나는이 도구를 정말로 좋아한다. 물론, 때로는 당신이 살인 적으로 화를내는 이유는 그것이 정말로 쉬운 일을하지 못하게하기 때문입니다. 그러나 그것은 달콤하고 달콤한 도구이며, 문서는 훌륭합니다.
  4. 마지막으로, 내가 아는 모든 오류가 해결 된 후에 HTML 애자 팩을 사용하여 XHTML로 변환합니다. 즉, 모든 소문자, 속성에 대한 따옴표 등이 있습니다.

희망이 도움이!

아비


인기 답변

어떤 종류의 성가신 문제가 있는지 알려주실 수 있습니까?
하지만 당신은 HTML을 청소하는 정규식을 사용할 필요가 없다. HAP은 Xpath 쿼리를 사용하여 조작 된 html의 요소에 액세스 할 수있게 해준다.
기본적으로 원하는 HTML 요소를 얻는 방법을 알기 위해서는 Xpath를 배워야합니다.
그것은 정말로 HAP을 사용하여 파싱하는 html의 종류에 달려 있습니다.
하지만 요소를 가져 오는 데는 여러 가지 방법이 있습니다.
id 나 class와 같거나 심지어 "name :"과 같은 주어진 텍스트를 포함하는 또 다른 요소를 따르는 요소를 얻을 수 있습니다.
너는 좋은 xpath 자습서를 위해 W3 학교 Xpath 자습서 에 갈 수있다



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.