2016-10-10 5 views
0

웹 스크래핑을 수행하고 있으며 가능한 모든 조합을 시도했지만 XPath가 null 값을 반환합니다.Xpath가 null을 반환합니다. 웹 스크래핑

대괄호를 제거하고 //을 추가했지만 매번 null을 반환합니다. 이들은 실제 XPath이고 내가 작성한 형식의 코드를 첨부했습니다.

//*[@id="agent_list_wrapper"]/div[2]/div[2]/div/div[1]/a 
//*[@id="agent_list_wrapper"]/div[2]/div[2]/div/div[3] 

아래 코드는 제 코드입니다.

private async Task<List<NameAndphone>> WebDateFromPage(int pagenum) 
{ 
    string url = "http://www.realtor.com/realestateagents/New-York_NY/photo-1"; 

    if (pagenum != 0) 
     url = "http://www.realtor.com/realestateagents/New-York_NY/photo-1/pg-" + pagenum.ToString(); 

    var doc = await Task.Factory.StartNew(() => web.Load(url)); 
    var name = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div/div//a"); 
    var phone = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div//div"); 
    if (name == null || phone == null) 
     return new List<NameAndPhone>(); 

    var names = name.Select(node => node.InnerText); 
    var phones = phone.Select(node => node.InnerText); 

    return names.Zip(phones, (name, phone) => new NameAndPhone() { Name = name, Phone = phone }).ToList(); 
} 
+1

xpath가 XML 파일에 실제로 존재하는지 확인할 수 있습니까? XML 문서의 스 니펫을 게시 할 수 있습니까? – Shredderroy

+1

정확히 무엇을 원하는지 자세히 설명해 주실 수 있습니까? 나는 이것에 대해 새롭고, 이것에 대해별로 생각하지 않습니다.이 점에서 저를 도울 수 있다면 매우 감사 할 것입니다. –

+0

나는 내 코드를 편집하려고했습니다. 첨부 된 웹 사이트에서 이름과 전화 번호를 얻으십시오. –

답변

1

XPATH은 잘 작동합니다 (데이터 자체는 약간의 청소가 필요함).

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.OptionFixNestedTags = true; 
doc.Load("data.xml"); 

var name = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div/div//a"); 
var phone = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div//div"); 


var names = name.Select(node => node.InnerText); 
var phones = phone.Select(node => node.InnerText); 

var result = names.Zip(phones, (n, p) => new { Name = n, Phone = p }).ToList(); 
//Result has 58 items 

테스트 데이터에 대한이 URL을 사용 : 시험이 코드를 사용 http://www.realtor.com/realestateagents/New-York_NY/photo-1/pg-1

enter image description here


내가 너무 특정 있기 때문에 당신이 당신의 XPATH를-생각을 다시하는 것이 좋습니다 것입니다 구조에 달려 있습니다. 다음 속성을 사용하십시오 : itemprop="name"itemprop="telephone" - 웹 사이트의 레이아웃을 변경하면 변경 가능성이 낮음

관련 문제