【问题标题】:web scraping and data processing in javajava中的网页抓取和数据处理
【发布时间】:2015-05-19 03:15:00
【问题描述】:

我正在编写一个网络爬虫程序来从雅虎财经、谷歌财经或纳斯达克提取股票报价。我可以获取包含股票价格的 html 元素,但我只需要结果中的美元值。例如,示例输出如下图所示:

我在这里使用了一张图片,因为当我发布实际的 html 时,只显示了美元金额(所需的结果),html 实体和标签消失了。 这是我的代码 我对 regEx 不是很熟悉,但我试过但没有运气。如何从输出中仅提取美元金额?

【问题讨论】:

  • 如果你在解析 HTML,为什么不使用 JSoup 之类的解析器呢?

标签: java html regex web-scraping data-processing


【解决方案1】:

尝试使用java.util.regex.Matcherjava.util.regex.Pattern

String pattern = "<td>\\$&.+;(\\d{1,4}\\.\\d{2})&";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(inputLine);

if (m.find( )) {
     System.out.println("Price: $" + m.group(1) );
}

结果:

价格:130.27 美元 ...

例子:

http://ideone.com/fWgvL5#stdout

【讨论】:

  • 继续上面我不完整的评论,我能够让上面的例子工作,但我宁愿从多页列表中得到少于 100 个结果,你认为它可能是一个正则表达式问题?为了精确,我还做了这个更改 \\d{2} ==> \\d{1,4}。我想我可能会得到整个列表,但 netbeans 只是打印部分列表。无论哪种方式,我如何投票才能获得积分?我是新手,请见谅。非常感谢。
  • @user3422517,我不确定为什么你可能只得到部分输出。输出是否每次都一直停在同一个地方?至于投票是如何进行的,如果您认为您的问题得到了适当的回答,您可以通过单击投票计数下方的复选标记将其标记为correct。一旦您获得足够的声誉,您就可以对问题和答案投赞成票或反对票。最后,欢迎来到stackoverflow! :)
  • @user3422517 你有什么理由不使用像JSOUP 这样的DOM 解析器吗?与正则表达式相比,这要高效得多。有据可查的是,正则表达式对于网络抓取任务来说是个坏主意。
【解决方案2】:

str_replace 会起作用。

看起来像

$string = str_replace('&nbsp;</td><td>.*?</td>','&nbsp;</td>', $string);

.*? 将匹配上面代码中没有&amp;nbsp; 的标签之间的值。找到正确的分隔符。 .*? or .*(?)

然后上面的代码将删除每个&lt;td&gt;number&lt;/td&gt;标签,同时保留每个&lt;td&gt;$&amp;nbsp;number&amp;nbsp;&lt;/td&gt;

您在哪里找到了抓取实时财务数据的方法?是在某个 xml 提要中吗?

【讨论】:

  • 我认为您使用的是脚本语言,我将来可能会使用它,但现在我正在使用 java 应用程序。您可以在 nasdaq.com 上找到实时交易,您只需要找到您感兴趣的交易数据。您可以以表格的形式查找售前、实时和售后。
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
相关资源
最近更新 更多