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이 아니거나 비어 있는지 확인하는 것이 좋습니다.
if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
MessageBox.Show("no titles");