2012-01-29 5 views
0

Когда я царапаю сайт с помощью jsoup, я получаю дополнительные значения, которые я не хочу получать. Я только хочу получить его имя, а не его команду и должность. В настоящее время он также очищает позицию и команду. Я хочу только получить имя.Скребок сайта с jsoup проблемой

Страница Источник:

<td class="playertableData">5</td><td class="playertablePlayerName" id="playername_515" style=""><a href="" class="flexpop" content="tabs#ppc" instance="_ppc" fpopHeight="357px" fpopWidth="490px" tab="null" leagueId="0" playerId="515" teamId="-2147483648" cache="true">Derrick Rose</a>, Chi&nbsp;PG<a href="" class="flexpop" content="tabs#ppc" 

Мой код:

while (tdIter.hasNext()) { 
         int tdCount = 1; 
         Element tdEl = tdIter.next(); 
         name = tdEl.getElementsByClass("playertablePlayerName") 
           .text(); 

         Elements tdsEls = tdEl.select("td.playertableData"); 
         Iterator<Element> columnIt = tdsEls.iterator(); 

         namelist.add(name); 

ВЫВОД:

name: Derrick Rose, Chi PG 

ответ

1

Вы делаете это неправильно. По линии,

name = tdEl.getElementsByClass("playertablePlayerName").text(); 

вы получите полный текст с классом = «playertablePlayerName», который включает в себя якорь тег и текст плоскости вне любого тега. Значит, вы получите

Derric Rose, Chi PG 

Какой у вас выход. Чтобы решить эту проблему, вы должны также включить условие для тега anchor. Попробуйте использовать линию belove в качестве замены.

doc = Jsoup_Connect.doHttpGet(); 
Elements tdsEls = doc.getElementsByClass("playertablePlayerName"); 
name = tdsEls.get(0).child(0).text(); 

Вы можете пройти через ребенка, которого вы уже получили. Когда вы получите правильный тег, используйте метод clained text().

Не стесняйтесь спрашивать, есть ли у вас какие-либо сомнения.

+0

Спасибо Но получить следующее сообщение об ошибке: Метод getElementsByTagname (строка) undefined для типа Elements – user1163234

+0

Ок, очевидно, я допустил ошибку. name = tdEl.getElementsByClass ("playertablePlayerName") вернет список объектов. Я исправил свой ответ. Посмотрите еще раз. Если он работает, не забудьте принять ответ, нажмите на отметку слева. –

+0

попробовал снова, но тот же результат: name = tdEl.getElementsByClass ("playertablePlayerName"). Get (0) .text(); – user1163234

0

Вы можете, вероятно, взломать этот код, чтобы получить то, что вы хотите:

Document doc = Jsoup.connect("http://games.espn.go.com/fba/playerrater?&slotCategoryId=0").get(); 
    for (Element e : doc.select(".playertablePlayerName")) { 
     //this assumes the name is in the first anchor tag 
     //which it seems to be according to the url in your pastbin 
     System.out.println(e.select("a").first().text()); 
    } 

Чтобы перевести в код, я думаю, что это будет работать ...

name = tdEl.select("a").first().text(); 

Позвольте мне знать, если это работает для вас.

0

Другие решения:

1.- Имя

String url = "http://games.espn.go.com/fba/playerrater?&slotCategoryId=0"; 

    //First Name 
    try { 
     Document doc = Jsoup.connect(url).get(); 
     Element e = doc.select("td.playertablePlayerName > a").first(); 
     String name = e.text(); 
     System.out.println(name);     
     } 
    catch (IOException e) {    
    } 

2.- Все имена

//All Names 
    try { 
     Document doc = Jsoup.connect(url).get(); 
     Elements names = doc.select("td.playertablePlayerName > a"); 
     for(Element e : names) { 
      String name = e.text(); 
      System.out.println(name); 
     } 

     } 
    catch (IOException e) {    
    }