1

PythonWebスクレイピングに関する情報を探しています。この時刻表からすべてのデータを取得しようとしています。クラスをその時刻にリンクさせたいと思います。HTMLを見ると、複数のテーブル(テーブル内のテーブル)があります。PythonでGoogleAppEngineを使用することを計画しています(おそらくBeautifulSoupも)。これを実行するための最良の方法に関する提案はありますか?

ありがとう

アップデート:

次のコードを使用して、テーブルから必要なデータを抽出することができました。

import urllib
from lxml import etree
import StringIO

url = "http://ttcache.dcu.ie/Reporting/Individual;Locations;id;lg25? 
template=location+Individual&weeks=20&days=1-5&periods=1-30&Width=0&Height=0"
result = urllib.urlopen(url)
html = result.read()

parser = etree.HTMLParser()
tree   = etree.parse(StringIO.StringIO(html), parser)

xpath = "//table[2]/tr/td//text()"

filtered_html = tree.xpath(xpath)

print filtered_html

しかし、これらのu'\xa0', u'\xa0', '\r\n', '\r\n'文字の多くが解析されたテキスト全体に散らばっています。これらと戦う方法について何か提案はありますか?

ありがとう

4

1 に答える 1

1

HTMLの解析に使用できる最適なライブラリは、libxml2に基づくlxmlです。XML解析を目的としていますが、BeautifulSoupよりもはるかに優れたタグスープを処理するHTMLパーサーも備えています。パーサーがCであるため、はるかに高速です。

また、XPathにアクセスしてHTML domをクエリすることもできます。また、libxml2はXPathでの正規表現の一致をサポートしており、Webスクレイピングに非常に役立ちます。

libxml2とlxmlは非常によくサポートされており、すべての主要なディストリビューションにそれらのパッケージがあります。2.7 https://developers.google.com/appengine/docs/python/tools/libraries27を使用している場合、GoogleAppEngineもそれをサポートしているようです。

編集:

取得する文字は、ページ上に空のテーブルセルが多数あるためです。そのため、xpathは多くの場合空白文字(改行なしスペース)と一致します。次のような正規表現を使用すると、スペース以外の文字を含まないテキストノードをスキップできます。

xpath = "//table[2]/tr/td//text()[re:match(., '\\S')]"

filtered_html = tree.xpath(
    xpath,
    namespaces={"re": "http://exslt.org/regular-expressions"})

名前空間ビットは、正規表現拡張を使用することをlxmlに通知するだけです。

于 2013-03-15T12:47:35.430 に答える