当前位置: 首页 > 知识库问答 >
问题:

如何使用jSoup访问子类

陈毅
2023-03-14

我想访问此网页:https://www.google.com/trends/explore#q=ice在中心线图中筛选并提取数据。html文件是(在这里,我只粘贴我使用的部分):

  <div class="center-col">
       <div class="comparison-summary-title-line">...</div>
       ...
       <div id="reportContent" class="report-content">
            <!-- This tag handles the report titles component -->
       ...
       <div id="report">
         <div id="reportMain">
           <div class="timeSection">
              <div class = "primaryBand timeBand">...</div>
                  ...
                 <div aria-lable = "one-chart" style = "position: absolute; ...">
                 <svg ....>
                 ...
                 <script type="text/javascript">
                 var chartData = {...}

并且我使用的数据存储在脚本部分(最后一行)。我的想法是先获取类“报告-内容”,然后选择脚本。我的代码如下:

  String html = "https://www.google.com/trends/explore#q=ice%20cream";
  Document doc = Jsoup.connect(html).get();

  Elements center = doc.getElementsByClass("center-col");
  Element report = doc.getElementsByClass("report-content");

  System.out.println(center);
  System.out.println(report);

打印“中心”类时,可以得到除“报表内容”之外的所有子类内容,打印“报表内容”时,结果只有:

      <div id="reportContent" Class="report-content"></div>

我也尝试这样做:

  Element report = doc.select(div.report-content).first();

但仍然不起作用。我怎么能在这里得到脚本中的数据?我感谢你的帮助!!!

共有2个答案

屠昌胤
2023-03-14

试着用身份证得到相同的,你会得到完整的标签

吕承福
2023-03-14

请改为尝试此url:

https://www.google.com/trends/trendsReport?hl=en&q=${keywords}&tz=${timezone}&content=1

在哪里

  • ${关键字}是一个编码的空格分隔的关键字列表
  • ${timezone}是Etc/GMT*表单中的编码时区

演示

String myKeywords = "ice cream";
String myTimezone = "Etc/GMT+2";

String url = "https://www.google.com/trends/trendsReport?hl=en&q=" + URLEncoder.encode(keywords, "UTF-8") +"&tz="+URLEncoder.encode(myTimezone, "UTF-8")+"&content=1";

Document doc = Jsoup.connect(url).timeout(10000).get();
Element scriptElement = doc.select("div#TIMESERIES_GRAPH_0-time-chart + script").first();

if (scriptElement==null) {
   throw new RuntimeException("Unable to locate trends data.");
}

String jsCode = scriptElement.html(); 
// parse jsCode to extract charData...

参考资料:

  • 如何提取一个的文本

 类似资料:
  • 我有一个基本的SpringMVC应用程序,运行(和映射)很好。现在我想用MockMvc设置我的单元测试来执行get请求和其他东西。但如果我运行测试,则会出现断言错误状态: 以下是我的短期测试课程: 所以我希望MockMvc在默认情况下获得DispatcherServlet的位置。但它实际上并不是用来映射的。 我的“web.xml”和“dispatcher servlet.xml”位于“web-IN

  • 我有一些url。我想从url指向的html中获取所有href,从所有获取的hrefs中获取所有href(递归)。关键是我想设置“递归”的深度。例如,如果深度=1,我只需要来自超文本标记语言的href。如果深度=2,我需要来自超文本标记语言的hrefs(假设为list1)和来自list1的每个href的hrefs,依此类推 以下是我使用jsoup得到的结果: 我应该如何修复递归条件以使其正确?

  • 问题内容: 我正在使用Passport.js来实现对我的Node-App的登录。但是在我的应用程序中,我需要访问用户的ID,目前,我不知道如何实现此目的! 我该如何访问用户ID或自己将其发送到Cookie中? 问题答案: 您应该在策略的配置旁边,在您的应用中引入以下代码: 这样,当您通过身份验证的用户调用该函数时,password会负责将userId存储在cookie中。每当您要访问userId时

  • 我的子类是,我需要在我的超类中使用字段和。我知道如何在子类中使用超类变量,但我必须学会如何做相反的事情?谢谢。

  • 问题内容: 我想从源HTML中删除这些标签及其内容。 问题答案: 当搜索你基本上使用的地方被定义这个API。但是,注释并不是技术上的元素,因此您可能会感到困惑,但它们仍然是由节点名标识的节点。 让我们看看这可能如何工作:

  • 问题内容: 我使用JSoup使用以下代码发布值: 现在我也要提交文件。就像带有文件字段的表单一样。这可能吗 ?如果比怎么? 问题答案: 从Jsoup 1.8.2(2015年4月13日)开始,通过新方法才支持此功能。 在旧版本中,不支持发送请求。最好的选择是为此使用一个值得使用的HTTP客户端,例如Apache HttpComponents Client 。最终,您可以获得HTTP客户端响应,以便可