0

Web サイトのテーブルからレコードを読み取り、データベースに挿入する簡単なユーティリティにパッチを適用しようとしています。いくつかの条件があります:

  1. ページのソースが乱雑です。たくさんの CSS と Javascript が散りばめられています。(社内サイトです。)
  2. 必要なテーブルの ID を知っています。
  3. テーブルを取得したら、行をさらに解析して、探している特定の情報を取得する必要があります。
  4. これはサーバー側で行う必要があります。(Java、Python、または C++ が望ましいですが、別の特に優れたオプションがあれば、それも問題ありません。)

それで、HTML要素をIDで「取得」して解析できる優れたライブラリまたはユーティリティを知っている人はいますか? 言うまでもありませんが、できるだけ早い方がいいと思います。

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

注: 最後の 2 つの例では、要素内のすべてのテーブル (最初のテーブルだけでなく) の行を列挙しています。#question

于 2012-08-13T19:42:17.233 に答える