我们可以在python 3.4中传递属性作为参数吗?

时间:2015-12-08 23:55:07

标签: function attributes web-scraping parameter-passing python-3.4

我有两个问题:

1)我想知道是否(以及如何)我们可以传递一个attribue(一个标签)作为参数来检查这个标签,这是我在下面尝试的。

2)如果我们不能,或者如果我尝试传递一个无意义的标签,它似乎不会生成一个AttributeError,因为它不打印它,我做错了什么?

from urllib.request import urlopen
from urllib.error import HTTPError
from urllib.error import URLError
from bs4 import BeautifulSoup

def getTitle(url,tag):
    try:
        html = urlopen(url)

    except HTTPError as e:
         print("wrong url")
         print(e)
         return None
    except URLError as j:
         print ("dead server")
         print(j)
         return None

    try:
        bsObj = BeautifulSoup(html.read(), "html.parser")
        title = bsObj.patate
        print("testobject")
        print(title)

    except AttributeError as AE:
        print("AttributeError is : ")
        print(AE)
        return(None)
    return title


title = getTitle("http://www.pythonscraping.com/pages/page1.html", "h1")

if title == None:
    print ("titre non trouvé")
else:
    print(title)

1 个答案:

答案 0 :(得分:0)

您的问题:给定参数“someTag”的函数getTitle应返回bsObj.someTag。 换句话说,您希望在属性名称为字符串(“someTag”)的情况下访问类(bsObj)的属性。

Python有getattr函数可以做到这一点:

tag="h1"
bsObj = BeautifulSoup(html.read(), "html.parser")
retrieveTag=getattr(bsObj,tag)                    #same as bsObj.h1

在这种情况下,如果没有属性“tag”,getattr会返回None,因此您无需捕获AttributeError

您还可以使用以下内容定义默认返回值:

retrieveTag=getattr(bsObj,tag,"tag not found")