将HTML表保存到数据库

时间:2008-09-16 14:50:51

标签: html screen-scraping

我正在尝试抓取一个html表并将其数据保存在数据库中。您发现哪些策略/解决方案有助于您实施此计划。

我最熟悉Java和PHP,但实际上任何语言的解决方案都会有所帮助。

编辑:有关更多详情,UTA(盐湖城巴士系统)在其网站上提供巴士时刻表。每个计划都显示在一个表格中,该表格中包含标题中的工作站和行中的出发时间。我想通过时间表并以表格形式将信息保存在表格中,然后我可以查询。

以下是时间表的starting point

8 个答案:

答案 0 :(得分:3)

有一本关于这个主题的好书:Spidering Hacks by Kevin Hemenway and Tara Calishain

答案 1 :(得分:3)

这完全取决于你的HTML刮取的准确程度如何?如果它是有效的XHTML,您可以简单地在其上使用一些XPath查询来获得您想要的任何内容。

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

将表格刮入数组的助手类:http://www.tgreer.com/class_http_php.html

答案 2 :(得分:2)

我发现脚本语言通常更适合执行此类任务。我个人更喜欢Python,但PHP也可以。用Java编写字符串,删除和解析字符串太多了。

答案 3 :(得分:1)

之前我曾尝试过屏幕抓取,但我发现它非常脆弱,尤其是动态生成的代码。 我找到了第三方DOM解析器,并用它来导航类似Regex的匹配模式的源代码,以便找到我需要的数据。

我建议尝试找出网站的所有者是否有用于从系统中检索数据的已发布API(通常是Web服务)。如果没有,那么祝你好运。

答案 4 :(得分:1)

这对Perl来说是最简单的,以及以下CPAN模块:

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

# cpan HTML::Parser

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

答案 5 :(得分:1)

pianohacker忽略了HTML::TableExtract模块,该模块专为此类设计而设计。您仍然需要LWP来检索表格。

答案 6 :(得分:1)

如果您想要的是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()

在您拥有此表单后,您可以将数据转换为您喜欢的任何形式。

答案 7 :(得分:1)

冒着在SO上开始讨价还价的风险,我建议如果表的格式永远不会改变,你可以放弃使用Regularexpressions来解析和捕获你需要的内容。