#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. Извините за это! Новичок здесь, просто принял это