将HTML表保存到数据库

时间:2020-03-05 18:56:12  来源:igfitidea点击:

我正在尝试抓取html表并将其数据保存在数据库中。我们发现什么策略/解决方案对实施此计划有帮助。

我对Java和PHP最为满意,但实际上任何语言的解决方案都将有所帮助。

编辑:有关更多详细信息,UTA(盐湖巴士系统)在其网站上提供了公交车时刻表。每个时间表都显示在一个表中,该表的标题和时间分别在行中和行中。我想检查一下时间表,然后以一种可以查询的形式将信息保存在表中。

这是时间表的起点

解决方案

回答

关于这一主题有一本不错的书:Kevin Hemenway和Tara Calishain撰写的Spidering Hacks。

回答

这完全取决于我们要抓取的HTML的正确程度?如果它是有效的XHTML,则只需在其上使用一些XPath查询即可获取所需的内容。

php中的xpath示例:http://blogoscoped.com/archive/2004_06_23_index.html#108802750834787821

一个帮助程序类,用于将表刮入数组:http://www.tgreer.com/class_http_php.html

回答

我以前尝试过进行屏幕抓取,但是发现它非常脆弱,尤其是对于动态生成的代码。
我找到了一个第三方DOM分析器,并使用它来使用类似于Regex的匹配模式来导航源代码,以查找所需的数据。

我建议尝试找出该站点的所有者是否具有发布的API(通常是Web服务)以从其系统中检索数据。如果没有,那就祝你好运。

回答

我发现脚本语言通常更适合执行此类任务。我个人更喜欢Python,但是PHP也可以使用。在Java中对字符串进行切碎,切碎和解析是太多的工作。

回答

使用Perl和以下CPAN模块,这将是最简单的:

  • http://metacpan.org/pod/HTML::Parser
  • http://metacpan.org/pod/LWP
  • http://metacpan.org/pod/DBD/mysql
  • http://metacpan.org/pod/DBI.pm

CPAN是Perl模块的主要分发机制,例如,可以通过运行以下shell命令来访问CPAN:

cpan HTML :: Parser

如果我们使用的是Windows,事情将会变得更加有趣,但是我们仍然可以这样做:http://www.perlmonks.org/?node_id=583586

回答

pianohacker忽略了HTML :: TableExtract模块,该模块正是为这种事情而设计的。我们仍然需要LWP来检索表。

回答

如果我们想要的是一个csv表形式,则可以使用以下命令:
使用python:

例如,假设我们想从某些站点以csv格式抓取外汇报价:fxoanda

然后...

from BeautifulSoup import BeautifulSoup
import urllib,string,csv,sys,os
from string import replace

date_s = '&date1=01/01/08'
date_f = '&date=11/10/08'
fx_url = 'http://www.oanda.com/convert/fxhistory?date_fmt=us'
fx_url_end = '&lang=en&margin_fixed=0&format=CSV&redirected=1'
cur1,cur2 = 'USD','AUD'
fx_url = fx_url + date_f + date_s + '&exch=' + cur1 +'&exch2=' + cur1
fx_url = fx_url +'&expr=' + cur2 +  '&expr2=' + cur2 + fx_url_end
data = urllib.urlopen(fx_url).read()
soup = BeautifulSoup(data)
data = str(soup.findAll('pre', limit=1))
data = replace(data,'[<pre>','')
data = replace(data,'</pre>]','')
file_location = '/Users/location_edit_this'
file_name = file_location + 'usd_aus.csv'
file = open(file_name,"w")
file.write(data)
file.close()

一旦以这种形式获取数据,就可以将数据转换为我们喜欢的任何形式。