2015-12-23 57 views
1

刮价值观,我想创建从一个城市的网站上发布这个可怕的HTML抓住两个值的脚本:提取/ HTML从

558.35

66.0

这些是水库的详细信息,每周更换一次。

我不确定什么是最好的工具,grep?

感谢您的建议,想法!

<table> 
    <tbody> 
     <tr> 
      <td>&nbsp;Currently:</td> 
      <td>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 558.35</td> 
     </tr> 
     <tr> 
      <td>&nbsp;Percent of capacity:</td> 
      <td>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;66.0%</td> 
     </tr> 
    </tbody> 
</table> 
+0

如果你使用PHP,那么你可以使用DOM文档。 – PHPglue

+0

这是你希望改进的技能吗?然后学习python-scrapy,beautifulSoup等。 Python拥有一个健康的网页抓取生态系统,但是随着html变得更加巴洛克式,你必须保持这一技能的最新才能有意义。如果你只是想抓住这两个值,而且多年来不会做任何其他事情,那么发布“xmllint”或“xmlstarlet”解决方案的奖励。如果真的这么简单,你可能会发现一个awk解决方案,但是一旦数据证明比你在这里指出的更复杂,所有的投注都关闭;-)祝你好运。 – shellter

+0

谢谢,这些都是我将要探索的解决方案! – Dan

回答

2

如果你正在使用正则表达式,你可以使用SED

sed -nr 's#^[ ]*<td>.*;[ ]?([0-9]+[.][0-9]+)[%]?</td>[ ]*$#\1#p' my_html_file 

的HTMLParser的如Python的模块BeautifulSoup或JavaScript的方法是一种更安全的选择

编辑:

这里是一个使用javascript..results的代码片段记录到控制台并弹出一个警告框以显示结果

var values=""; 
 
for(i=1;i<document.getElementsByTagName('td').length;++i){ 
 
values+=" "+document.getElementsByTagName('td')[i].innerHTML.replace(/&nbsp;|Percent of capacity:|[ %]/g,"") 
 
} 
 
alert(values); 
 
console.log(values);
<table> 
 
    <tbody> 
 
     <tr> 
 
      <td>&nbsp;Currently:</td> 
 
      <td>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 558.35</td> 
 
     </tr> 
 
     <tr> 
 
      <td>&nbsp;Percent of capacity:</td> 
 
      <td>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;66.0%</td> 
 
     </tr> 
 
    </tbody> 
 
</table>

+0

这真的很酷,和工作!谢谢! – Dan