Скрипт не может добавить спаршенные данные в список
Скрипт не может добавить спаршенные данные в список.
Код:
def test(soup):
trs_0 = soup.findAll('div', class_='rcnt tr_0')
for i in range(len(trs_0)):
fprc = trs_0[i].find('div', class_='fprc')
fpr = fprc.find('span', class_='fpr').text
l_fpr.append(fpr)
if __name__ == "__main__":
url = 'https://www.forebet.com/ru/prognozi-na-segodnq/prognozi-mnee-bolee'
r = requests.get(url)
soup = BeautifulSoup(r.text, "lxml")
l_fpr = []
test(soup)
print(l_fpr)
Вывод:
Traceback (most recent call last):
File "/home/******/********/FB-Parser/Core.py", line 89, in <module>
test(soup)
File "/home/******/********/FB-Parser/Core.py", line 71, in test
fpr = fprc.find('span', class_='fpr').text
AttributeError: 'NoneType' object has no attribute 'find'
При этом, это работает с другими значениями. К тому же, если вместо добавления в список вывести значения через print(), то это сработает, скрипт выведет значения и NoneType не будет:
trs_0 = soup.findAll('div', class_='rcnt tr_0')
for i in range(len(trs_0)):
fprc = trs_0[i].find('div', class_='fprc')
fpr = fprc.find('span', class_='fpr').text
print(fpr)
Вывод:
83
99
59
92
и т.д.
Помогите! Сколько в поисках не маялся - так ничего и не нашел...
Ответы (2 шт):
Я так и не понял в чем конкретно заключалась проблема, но судя по всему в сайте.
Для решения придал тип str для класса, чтобы не придавать метод .text вызывающий ошибку и через цикл перебрал каждый символ, зацепив нужные:
fprc = str(trs_1[i].find('div', class_='fprc'))
for a in range(len(fprc) - 1):
if (fprc[a] == 'r' and fprc[a + 1] == '"' and fprc[a + 2] == '>'):
fpr = fprc[a + 3:a + 5]
l_fpr.append(fpr)
Но вообще, если блоки в исходном коде ничем не отличаются, можно цеплять через start:stop
Ваша проблема в том, что иногда переменная fpr не содержит значение. Вам просто необходимо обработать это исключение в блоке try, except следующим образом:
from bs4 import BeautifulSoup
import requests
def test(soup):
trs_0 = soup.findAll('div', class_='rcnt tr_0')
for i in range(len(trs_0)):
fprc = trs_0[i].find('div', class_='fprc')
try:
fpr = fprc.find('span', class_='fpr').text
l_fpr.append(fpr)
except AttributeError:
pass
if __name__ == "__main__":
url = 'https://www.forebet.com/ru/prognozi-na-segodnq/prognozi-mnee-bolee'
r = requests.get(url)
soup = BeautifulSoup(r.text, "lxml")
l_fpr = []
test(soup)
print(l_fpr)
Вывод:
['62', '55', '65', '57', '66', '67', '60', '52', '60', '70', '62', '68', '51', '57', '58', '51', '66', '60', '62', '62', '75', '69', '67', '54', '63', '53', '56', '57', '77', '56', '50', '52', '71', '70', '77', '56', '55', '56', '54', '60', '54', '65', '59', '67', '73', '60', '76', '53', '58', '54', '55', '57', '72', '53', '63', '64', '71', '52', '65', '65']