C # HTML 민첩성 팩 단일 선택 노드가 null을 반환합니다.

c# html-agility-pack web-scraping winforms

문제

C #, Windows 양식 및 HTML 민첩성 팩을 사용하여 개발 한 웹 스크레이퍼가 있습니다.

나는 사이트가 코드를 변경하고 그것을 부러 뜨리면 모두 잘 작동했다. 웹 스크래퍼와 함께 자주 발생하지만 이제는 문제를 해결하는 방법을 찾는 데 어려움이 있습니다.

현재 스크레이퍼는 여러 개의 URL을 통해 반복되고 각 페이지에서 데이터를 스크랩합니다.

내가 겪고있는 문제는 그것이 반복되는 사이트의 템플릿이 프로그램에서 정의한 동일한 HTML 클래스와 ID를 가지고 있지 않은 최신 템플릿을 무작위로 표시한다는 것입니다. 하나의 노드가 null 인 경우 검사하고 새 템플릿에 대해 별도의 코드 집합을 실행하는 경우 간단한 작업을 실행하려고합니다.

문제는 내 프로그램이 내 if 문에서 NullReferenceException을 throw한다는 것입니다.

다음은 null인지 확인하기 위해 사용하는 문입니다.

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']").InnerText;

 if (varitem == null) MessageBox.Show("no titles");

그것은 varitem을 정의하는 첫 번째 줄에 예외를 던지고 심지어 if 문으로 넘어 가지 않습니다.

어떤 조언을 부탁드립니다!

수락 된 답변

먼저,

 doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']")

null를 돌려줍니다.

null 인 경우 null.InnerText 에서 NullReferenceException 가져 null.InnerText


인기 답변

아래에서 시도하십시오

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");

SelectSingleNode 는 null을 반환 할 수 있으며 InnerText 도 null이 아니거나 비어 있는지 확인하는 것이 좋습니다.

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");



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