#python #web-scraping #pycharm
#python #очистка веб-страниц #pycharm
Вопрос:
Я попробовал следующий код, и эта функция не работает, выдавая мне ошибку.
«Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘findNextSiblings'»
Что я могу сделать, чтобы устранить эту ошибку?
Я попытался удалить h_span
w_span
переменные и вызвать soup.findNextSibling
функцию в цикле вместо h_span.findNextSibling
, и она просто возвращает пустую строку, код работает.
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import os
driver = webdriver.Chrome(executable_path= r'E:/Summer/FirstThings/Web scraping (bucky pdf)/webscraping/tutorials-master/chromedriver.exe')
url = 'https://www.nba.com/players/aron/baynes/203382'
driver.get(url)
soup = BeautifulSoup(driver.page_source , 'lxml')
height = ''
h_span = soup.find('p', string = 'HEIGHT')
for span in h_span.findNextSiblings():
height = height span.text
weight = ''
w_span = soup.find('p', string = 'WEIGHT')
for span in w_span.findNextSiblings():
weight = weight span.text
born = ''
b_span = soup.find('p', string = 'BORN')
for span in b_span.findNextSiblings():
born = born span.text
print(height)
print("")
print(weight)
print("")
print(born)
driver.__exit__()
Он должен возвращать информацию о росте, весе и рождении игрока в текстовом формате с самими заголовками.
Комментарии:
1. Из документации : «Если find() ничего не может найти, она возвращает None» Это вам помогает?
Ответ №1:
Я люблю работать со спортивными данными!
Вы делаете здесь слишком много работы. Нет необходимости использовать Selenium или BeautifulSoup для анализа html как nba.com предлагает эти данные в удобном формате json. Все, что вам нужно сделать, это найти игроков, которые вам нужны, и извлечь нужные данные:
from bs4 import BeautifulSoup
import requests
url = 'https://data.nba.net/prod/v1/2018/players.json'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
jsonData = requests.get(url).json()
find_player = 'Baynes'
for player in jsonData['league']['standard']:
if player['lastName'] == find_player:
name = player['firstName'] ' ' player['lastName']
height = player['heightFeet'] 'ft ' player['heightInches'] 'in'
weight = player['weightPounds'] 'lbs'
born = player['dateOfBirthUTC']
print ('%sn%sn%sn%sn' %(name, height, weight, born))
Вывод:
Aron Baynes
6ft 10in
260lbs
1986-12-09