【问题标题】:this program is not working for that url only... for other urls it working [duplicate]该程序仅适用于该网址......对于其他网址它有效[重复]
【发布时间】:2019-06-06 08:35:36
【问题描述】:

我想从这个可用的数据表中获取数据 提到的网址。

这不适用于此网址,仅适用于其他网址,它可以正常工作。

这是网页抓取的代码,但问题是该网址不起作用。

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class GetData {
   public static void main(String[] args) throws InterruptedException {

      String html = "http://programs.dsireusa.org/system/program";
      try {
         Document doc = Jsoup.connect(html).get();
         Elements tableElements = doc.select("table");

         Elements tableHeaderEles = tableElements.select("thead tr th");
         System.out.println("headers");
         Thread.sleep(5000);
         System.out.println(tableHeaderEles.size());

         for (int i = 0; i < tableHeaderEles.size(); i++) {
            System.out.println(tableHeaderEles.get(i).text());
         }
         System.out.println();

         Elements tableRowElements = tableElements.select(":not(thead) tr");

         for (int i = 0; i < tableRowElements.size(); i++) {
            Element row = tableRowElements.get(i);
            System.out.println("row");
            Elements rowItems = row.select("td");
            for (int j = 0; j < rowItems.size(); j++) {
               System.out.println(rowItems.get(j).text());
            }
            System.out.println();
         }

      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

我期望这个数据表中所有可用数据的输出 url 这个程序适用于其他其他 url。

http://programs.dsireusa.org/system/program

【问题讨论】:

  • 这和python有什么关系?
  • 如果页面使用 JavaScript 加载内容,那么您将不得不使用 ie。 Selenium 控制可以运行 JavaScript 的网络浏览器。或者你可以在 Chrome/Firefox 中使用DevTools 来查找 JavaScript 用来从服务器获取数据的 url,然后你可以使用这个 url 来获取数据。 JavaScript 主要使用 JSON 从服务器获取数据,因此您不必抓取它。

标签: java python web-scraping datatable


【解决方案1】:

问题在于该 url 在页面加载后加载其元素(通过 javascript)。如果您在抓取之前可能等待 2 秒,则应该加载页面

编辑:您将需要使用除 beautifulSoup 之外的其他东西,因为 bs jsut 会在页面加载时读取所有内容。你可以使用 selenium 来制作一个真正的浏览器来读取数据

【讨论】:

  • 不,它不会被加载。没有可以加载它的 JavaScript 运行时环境。见here。
  • @RobbyCornelissen 该页面是用角度编写的,所以我猜它不完全是 javascript。但事实是网站的一部分是动态加载的
  • 它是 JavaScript,而且,是的,在浏览器中它会动态加载,因为浏览器会加载它。像 JSoup 这样的 HTML 解析器不会。
  • @RobbyCornelissen 这就是你的意思。我相应地编辑了我的答案。造成误会请见谅
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 2023-04-04
  • 2021-07-30
  • 2014-01-04
  • 2013-10-07
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多