我有两个问题:
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)
答案 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")