Сообщение об ошибке на самом деле говорит вам, что происходит. Строка кода
z = zr.findAll("tr")
выдает ошибку атрибута, поскольку объект NoneType не имеет атрибута findAll
. Вы пытаетесь вызвать findAll
для zr, предполагая, что переменная всегда будет объектом BeautifulSoup, но не будет. Если эта строка:
zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
не найдет объектов в html, соответствующих этим классам, для zr будет установлено значение None
. Итак, на одной из страниц, которые вы пытаетесь очистить, вот что происходит. Вы можете закодировать его с помощью оператора try / исключением, например:
for i in range(len(a)):
b = a[j]
URL = "https://de.wikipedia.org/wiki/"+b
page = requests.get(URL)
try:
soup = BeautifulSoup(page.content, 'html.parser')
l = soup.find(class_="firstHeading")
zr = soup.find(class_="wikitable infobox infoboxstaat float-right")
z = zr.findAll("tr")
a=""
#don't do this! should be 'for i in z' or something other variable name
for z in z:
a=a+z.text
h=a.find("Hauptstadt")
lol=a[h:-1]
lol=lol.replace("Hauptstadt", "")
lol=lol.strip()
fg=lol.find("\n")
lol=lol[0:fg]
lol=lol.strip()
j=j+1
print(lol)
print(l.text)
except:
pass
В этом примере любая страница, не имеющая правильных тегов html, будет пропущена.