【问题标题】:search for a string inside html source with python (3.3.1)使用 python (3.3.1) 在 html 源代码中搜索字符串
【发布时间】:2013-07-06 19:30:13
【问题描述】:

我正在做一个从网页获取信息的项目。 在 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

【问题讨论】:

    标签: python string split


    【解决方案1】:

    如果您要解析 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
    

    这将在页面上找到具有 txt_resultad_busca_casamento 类的 HTML span 元素,我相信这是您要提取的数据。从那里您可以解析.text 属性以获取您感兴趣的确切数据。

    编辑 2

    糟糕,刚刚意识到使用了正则表达式……BeautifulSoup 中的类匹配似乎并不完美!至少在站点更改其 HTML 之前,该行应该可以使用:

    element = soup.find('div', attrs={'id': 'ctl00_body_uppBusca'}).find('span')
    

    【讨论】:

    • 没问题。我会帮助解析实际数据,但该 URL 似乎返回“Não foram encontrados casais”而不是“Resultado de Busca: Foram encontrados 264 casais”。
    【解决方案2】:

    鉴于您无法使用正则表达式解析 html,如果您将文件视为一袋文本,则必须使用正则表达式或类似的东西:

    a = 'Resultado de Busca: Foram encontrados 264 casais' #your page text
    num = int(a[a.index("encontrados")+len("encontrados"):a.index("casais")])
    

    【讨论】:

      【解决方案3】:

      你对那个字符串的格式持肯定态度吗?如果您有这样的字符串(并且总是会),您可以使用:

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

      您的号码将被索引为 5 in items。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-12
        • 2016-05-06
        • 1970-01-01
        • 2012-02-14
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多