3

我正在做一个从网页获取信息的项目。在 html 源代码中,我有以下内容:

Resultado de Busca: 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

这将在具有 class 的页面上找到 HTMLspan元素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 回答