Нет таблицы при очистке HTML-кода во время цикла

#python #web-scraping #python-requests

#python #веб-очистка #python-запросы

Вопрос:

первый вопрос здесь!

Я очищаю спортивную веб-страницу, которая содержит страницу профиля каждого спортсмена в виде имени страницы ‘имя спортсмена’ ‘-‘ ‘фамилия спортсмена’. Я использую python.

Я использую функцию запросов, и поскольку это URL-адрес типа https, я запускаю приведенный ниже код. Я хочу очистить страницу, чтобы найти соотношение веса и веса каждого спортсмена, предпочтительный метод выигрыша и т.д. Проблема, которую я нахожу, заключается в том, что по какой-то причине на странице нет профиля каждого спортсмена с таблицей, отражающей их карьеру, есть только у некоторых из этих спортсменов.

 import requests
my_header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" }
html_page_text = requests.get('https://www.bjjheroes.com/a-z-bjj-fighters-list',my_header)
all_athletes = pd.read_html(html_page_text.text);

for i in range(len(all_athletes)):
    url=('https://www.bjjheroes.com/bjj-fighters/'   table_heroes[0]['First Name'][i].lower()   '-'   
         table_heroes[0]['Last Name'][i].lower())
    request = requests.get(url)

if request.status_code == 200:
    my_header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) 
                 Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" }
    html_page_text = requests.get(url,my_header)
    table_heroes.append(pd.read_html(html_page_text.text))
 

Итак, я уже извлек список имен всех спортсменов (называемый all_athletes ), и я запускаю цикл, который составляет имя для входа на их веб-сайт и извлечения данных из таблиц, но у некоторых спортсменов на их странице ничего нет, поэтому, когда я просматриваю список, продолжают появляться ошибки вверх, и мне приходится вручную вытаскивать их спортсмена за спортсменом.

Есть ли какой-либо способ проверить, есть ли на веб-сайте таблица перед запуском кода, чтобы избежать ошибок?

Ответ №1:

Используйте try/except . Я также исправил несколько других мелочей в коде:

 import requests
import pandas as pd

my_header = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" }
html_page_text = requests.get('https://www.bjjheroes.com/a-z-bjj-fighters-list',my_header)
all_athletes = pd.read_html(html_page_text.text)[0]

table_heroes = pd.DataFrame()
for idx, row in all_athletes.iterrows():
    url=('https://www.bjjheroes.com/bjj-fighters/'   row['First Name'].lower()   '-'   row['Last Name'].lower())
    request = requests.get(url, my_header)

    try:
        html_page_text = requests.get(url,my_header)
        temp_df = pd.read_html(html_page_text.text)[0]
        temp_df['Athlete'] = row['First Name']   ' '   row['Last Name']
        table_heroes = table_heroes.append(temp_df, sort=False)
        print('Collected: %s %s' %(row['First Name'],row['Last Name']))

    except Exception as e:
        print(e)
 

Комментарии:

1. Ух ты! Только что попробовал, это работает! Спасибо. Забыл о функции try, а настройки для определения того, какие данные были собраны, просто великолепны. Спасибо!

2. @micheldc55, круто. рад, что это сработало. обязательно примите решение, если оно соответствует вашим потребностям.

3. Извините за это! Новичок здесь, просто принял это