【问题标题】:return BeautifulSoup AttributeError: 'NoneType' object has no attribute 'encode'return BeautifulSoup AttributeError: 'NoneType' 对象没有属性 'encode'
【发布时间】:2019-04-21 08:13:24
【问题描述】:

晚安,为什么我的返回“美元”,即将返回“BeautifulSoup AttributeError:'NoneType'对象没有属性'encode'”,我做错了什么?我想在这段代码中带上美元报价

import
from bs4 import BeautifulSoup
import urllib.request as url

 site = "https://economia.uol.com.br/cotacoes/"
       try:
           url2 = site
           con = url.urlopen(url2, None, 7) 

           if con.status == 200:
               HTML = con.read() 

               soup = BeautifulSoup(HTML, 'html.parser')  

               dolar = re.search(r'Cotacao do Dolar: ',
                                       str(soup.find('div', attrs={'class': 'subtituloGrafico subtituloGraficoValor'})))  
               return dolar

       except Exception as e:

           if str(e) == 'HTTP Error 404: NOT FOUND':
               return 'Error'

           return str(e)

【问题讨论】:

    标签: python exception beautifulsoup attributeerror


    【解决方案1】:

    正如@Pythonista 所说,因为汤里什么都没有发现。我尝试在浏览器中按类搜索您需要的内容,然后我发现class="subtituloGrafico subtituloGraficoValor" 属于<a>。所以我理解你可能想要得到什么。

    注意:soup.find("h3",{"class":"tituloGrafico"}) 用于缩小搜索范围

    from bs4 import BeautifulSoup
    import urllib.request as url
    import re
    
    site = "https://economia.uol.com.br/cotacoes/"
    def func(site=site):
            try:
                url2 = site
                con = url.urlopen(url2, None, 7) 
                if con.status == 200:
                    HTML = con.read() 
                    soup = BeautifulSoup(HTML, 'lxml')
                    sub = soup.find("h3",{"class":"tituloGrafico"})
                    title = sub.findChild("a").text
                    dolar = sub.find('a', attrs={'class': "subtituloGrafico subtituloGraficoValor"}).text
                    print(title,dolar)
                    #dolar = re.search(r'Cotacao do Dolar:(.*?)',text)
                    return dolar
            except Exception as e:
                raise e
                if str(e) == 'HTTP Error 404: NOT FOUND':
                    return 'Error'
                return str(e)
    func()
    

    【讨论】:

      【解决方案2】:

      简单。这个:

      soup.find('div', attrs={'class': 'subtituloGrafico subtituloGraficoValor'})
      

      返回 None 因为在汤中没有找到任何东西。确保您实际上是在正确搜索它,它不是动态创建的等等。

      您也可以通过文本搜索并使用 BS 提取它,而无需显式使用 re。

      【讨论】:

      • 感谢您的回答
      猜你喜欢
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多