Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2019 11:16:27

vipTelnet
Зарегистрирован: 2019-08-21
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная как имя свойства

Всем привет.

Нашел готовый пример кода в инете и решил его не много модифицировать в функцию getTag(url, tag)
добавил 2 параметр tag
и теперь вот тут
bsObj.body.tag
получаю ошибку так как tag это у меня переменная.
Подскажите как нужно в python правильно использовать в качестве имени свойства переменную.

 from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
import sys
def getTag(url, tag):
    try:
        html = urlopen(url)
    except HTTPError as e:
        print(e)
        return None
    try:
        bsObj = BeautifulSoup(html, "html.parser")
        inner = bsObj.body.tag
    except AttributeError as e:
        return None
    return inner
title = getTag("http://www.pythonscraping.com/exercises/exercise1.html", "h1")
if title == None:
    print("Title could not be found")
else:
    print(title)
div = getTag("http://www.pythonscraping.com/exercises/exercise1.html", "div")
if div == None:
    print("div could not be found")
else:
    print(div)  

Офлайн

#2 Авг. 21, 2019 11:32:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Переменная как имя свойства

Я правильно понимаю

def getTag(url, tag):
….
……inner = bsObj.body.tag

вы вот таким образом собрались использовать аргумент функции?

vipTelnet
правильно использовать в качестве имени свойства переменную.
setattr, getattr



Офлайн

#3 Авг. 21, 2019 11:41:37

vipTelnet
Зарегистрирован: 2019-08-21
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная как имя свойства

Я правильно понимаю

def getTag(url, tag):
….
……inner = bsObj.body.tag

вы вот таким образом собрались использовать аргумент функции?
Да именно таким образом.

setattr, getattr
Почитал про эти метода для работы с объектами но так и не понял как их правильно использовать для решения моей задачи.

В php это можно был сделать примерно так
$bsObj->body->{$tag}
В javascript как то так
 bsObj.body['tag']
а как это на Python?

Отредактировано vipTelnet (Авг. 21, 2019 11:56:35)

Офлайн

#4 Авг. 21, 2019 12:08:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Переменная как имя свойства

vipTelnet
а как это на Python?
А вы перед тем как писать на php какую-то литературу читали по языку? А по JS?
Может стОит и по питону что-то почитать?

Что в принципе может быть непонятного в функции с сигнатурой
setattr(object, name, value)
??



Офлайн

#5 Авг. 21, 2019 12:15:54

vipTelnet
Зарегистрирован: 2019-08-21
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная как имя свойства

Не понятно что нужно указывать в качестве name, так как если писать
bsObj.body.h1
то будут возвращено содержимое тега h1
если писать bsObj.body.div
то будут возвращено содержимое тега div

Т.е какое там должно быть name
setattr(bsObj.body, name, tag)

Офлайн

#6 Авг. 21, 2019 12:43:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Переменная как имя свойства

vipTelnet
толи я тупой, толи ваша мысль настолько глубока, что выходит за грани обыденного

 def getTag(url, tag):
        inner = getattr(bsObj.body, tag)

это вам надо?



Офлайн

#7 Авг. 21, 2019 12:49:06

vipTelnet
Зарегистрирован: 2019-08-21
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная как имя свойства

Да спасибо то что нужно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version