soup2 = BeautifulSoup(str(arr[i]))
arr2 = soup2.findAll('td')
Не делайте этого: просто позвоните arr2 = arr[i].findAll('td')
.
Это также будет медленно:
if str(j).find("<a href=") > 0:
data.sourceURL = self.getAttributeValue(str(j),'<a href="')
Предполагая, что getAttributeValue дает вам атрибут href
, используйте вместо этого:
a = j.find('a', href=True) #find first <a> with href attribute
if a:
data.sourceURL = a['href']
else:
#....
В общем случае вам не нужно преобразовывать объект BeautifulSoup обратно в строку, если все, что вам нужно, - это проанализировать его и извлечь значения. Так как методы find
и findAll
возвращают вам объекты поиска, вы можете продолжать поиск, вызывая find
/ findAll
/ etc. методы по результатам.