3

Web ページから情報を取得するプロジェクトに取り組んでいます。HTMLソースには次のものがあります:

バスカの結果: Foram encontrados 264 casais

「encontrados」と「casais」の間の数字を取得する必要があります

とにかくPythonでそれを行うことはありますか? どの文字列関数を使用すればよいですか? この場合、正規表現の使用は避けたいと思います。

import urllib.request
f = urllib.request.urlopen("http://listadecasamento.fastshop.com.br/ListaCasamento/ListaCasamentoBusca.aspx?Data=2013-06-07")
s = f.read()

print(s.split())

これまでのところこれを入手しましたが、必要な数を見つけるのに苦労しています。

import urllib.request
f = urllib.request.urlopen("http://listadecasamento.fastshop.com.br/ListaCasamento/ListaCasamentoBusca.aspx?Data=2013-06-07")
s = f.read()

num = int(s[s.index("encontrados")+len("encontrados"):s.index("casais")])

これにより、以下のエラーが表示されます

TypeError: タイプ str はバッファ API をサポートしていません

4

3 に答える 3

5

解析したい HTML の場合は、 Beautiful Soupなどのライブラリを使用することをお勧めします。正規表現は必要ありません。

編集

追加したばかりの URL を使用して、HTML オブジェクトを取得するサンプル コードを次に示します。

import BeautifulSoup
import re
import urllib

data = urllib.urlopen('http://listadecasamento.fastshop.com.br/ListaCasamento/ListaCasamentoBusca.aspx?Data=2013-06-07').read()
soup = BeautifulSoup.BeautifulSoup(data)
element = soup.find('span', attrs={'class': re.compile(r".*\btxt_resultad_busca_casamento\b.*")})
print element.text

spanこれにより、 class を持つページ上の HTML 要素が見つかります。これはtxt_resultad_busca_casamento、抽出しようとしているデータであると私は信じています。そこから、.text属性を解析して、関心のある正確なデータを取得できます。

編集2

おっと、正規表現を使用していることに気付きました... BeautifulSoup のクラス マッチングは完全ではないようです! 少なくともサイトが HTML を変更するまでは、代わりに次の行が機能するはずです。

element = soup.find('div', attrs={'id': 'ctl00_body_uppBusca'}).find('span')
于 2013-07-06T19:38:39.910 に答える
1

html を正規表現で解析できない場合、ファイルをテキストのバッグとして扱う場合は、正規表現などを使用する必要があります。

a = 'Resultado de Busca: Foram encontrados 264 casais' #your page text
num = int(a[a.index("encontrados")+len("encontrados"):a.index("casais")])
于 2013-07-06T19:33:45.760 に答える
0

その文字列の形式に自信がありますか? そのような文字列がある場合(そして常にそうなる)、次を使用できます。

s = "Resultado de Busca: Foram encontrados 264 casais"
items = s.split()

あなたの番号は項目の 5 で索引付けされます。

于 2013-07-06T19:32:28.360 に答える