0

我正在尝试拼凑一个快速实用程序,该实用程序将从网站表中读取记录并将它们插入数据库。有几个条件:

  1. 该页面的来源是混乱的。大量的 CSS 和 Javascript 被抛出。(这是一个内部网站。)
  2. 我知道我想要的表的 ID。
  3. 获得表格后,我必须进一步解析行以获取我正在寻找的特定信息。
  4. 这必须在服务器端完成。(最好是 java、python 或 C++,尽管如果有其他特别好的选择,那也很好。)

那么有没有人知道一个好的库或实用程序可以通过 ID “抓取”一个 html 元素并让我解析它?我知道这是不言而喻的,但我更喜欢尽可能快的。

4

3 回答 3

1

jQuery 可以通过它的 ID 选择一个元素。

请参阅use-jquery-to-extract-data-from-html-lists-and-tables

文章的要点是:

var tableObject = $('#myTable tbody tr').map(function(i) {
  var row = {};

  // Find all of the table cells on this row.
  $(this).find('td').each(function(i) { //do something with each td }
于 2012-08-13T17:58:29.137 回答
1

您可以使用正则表达式:

<table[^>]*id="whatever"[^>]*>(.*?)</table>

然后提取第一组(括号中的匹配部分)并解析出行:

<tr[^>]*>(.*?)</tr>

最后,对于每一行,提取单元格:

<td[^>]*>(.*?)</td>

这适用于您提到的任何语言。

于 2012-08-13T18:55:59.630 回答
1

您可以在 Python 中使用lxml库:

#!/usr/bin/env python
import urllib2
from lxml import html # $ apt-get install python-lxml or $ pip install lxml

page = urllib2.urlopen('http://stackoverflow.com/q/11939631')
doc = html.parse(page).getroot()

div = doc.get_element_by_id('question')
for tr in div.find('table').iterchildren('tr'):
    for td in tr.iterchildren('td'):
        print(td.text_content()) # process td

如果你熟悉 jQuery;你可以使用pyquery。它在 lxml 之上添加了 jQuery 接口:

#!/usr/bin/env python
from pyquery import PyQuery # $ apt-get install python-pyquery or
                            # $ pip install pyquery

# d is like the $ in jquery
d = PyQuery(url='http://stackoverflow.com/q/11939631', parser='html')
for tr in d("#question table > tr"):
    for td in tr.iterchildren('td'):
        print(td.text_content())

虽然在这种情况下pyquery并没有添加足够的。这是相同的使用 only lxml

#!/usr/bin/env python
import urllib2
from lxml import html

page = urllib2.urlopen('http://stackoverflow.com/q/11939631')
doc = html.parse(page).getroot()
for tr in doc.cssselect('#question table > tr'):
    for td in tr.iterchildren('td'):
        print(td.text_content()) # process td

注意:最后两个示例枚举元素内所有表(不仅仅是第一个)中的行。#question

于 2012-08-13T19:42:17.233 回答