return BeautifulSoup AttributeError: у объекта 'NoneType' нет атрибута 'кодировать' - PullRequest
0 голосов
/ 19 ноября 2018

Спокойной ночи, почему мой ответ "доллар" возвращается "BeautifulSoup AttributeError: у объекта 'NoneType' нет атрибута 'кодировать'", что я делаю неправильно?Я хочу привести цитату доллара в этом коде

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)

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Как сказал @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()
0 голосов
/ 19 ноября 2018

Simple. Это:

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

Возвращается Нет, потому что ничего в супе не найдено. Убедитесь, что вы действительно ищете это правильно, он не создан динамически и так далее.

Вы также можете искать по тексту и извлекать его, используя BS, без явного использования re.

...