【问题标题】:Scraping site with jsoup issue使用 jsoup 问题抓取网站
【发布时间】:2012-01-29 09:25:53
【问题描述】:

当我使用 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

【问题讨论】:

    标签: android jsoup


    【解决方案1】:

    你做错了。顺带一提,

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

    您将获得 class="playertablePlayerName" 的完整文本,其中包括锚标记和任何标记外的平面文本。意味着,你会得到

    Derric Rose, Chi PG
    

    你的输出是什么。要解决此问题,您还必须包含锚标记的条件。尝试使用 belove 线作为替代品。

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

    你可以遍历你已经得到的 td 的孩子。当你得到正确的标签时,使用链式 text() 方法。

    如果您有任何疑问,请随时询问。

    【讨论】:

    • 谢谢!但出现以下错误:方法 getElementsByTagname(String) 未定义元素类型
    • 好吧,显然我犯了一个错误。 name = tdEl.getElementsByClass("playertablePlayerName") 将返回一个对象列表。我已经更正了我的答案。再看看。如果有效,别忘了接受答案,点击左边的勾号。
    • 再次尝试但结果相同:name = tdEl.getElementsByClass("playertablePlayerName").get(0).text();
    • 好的,你能粘贴你的 HTML 和你用来解析它的代码吗?我会尝试测试我这边的代码。
    • 您好,我今天才看到您的粘贴!我为这个问题做了一个简单的应用程序,代码在这里可用:pastie.org/3300889 也更新了我的答案。谢谢
    【解决方案2】:

    你可以破解这段代码来得到你想要的:

        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();
    

    让我知道这是否适合你。

    【讨论】:

      【解决方案3】:

      另一种解决方案:

      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) {             
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 2013-08-11
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多