Я пытаюсь создать свой первый веб-парсер, цель которого - очистить некоторые таблицы данных с веб-сайта и использовать их для заполнения pandas фреймов данных. На сайте требуется логин. Веб-сайт называется spotra c .com .
У меня возникла пара проблем. Во-первых, когда я запускаю метод публикации beautifulsoup, я получаю следующую ошибку: «InvalidURL: Failed to parse: ". Эта ошибка возникает, когда я запускаю следующий код:
import pandas as pd
import requests, lxml.html
from bs4 import BeautifulSoup
with requests.session() as s:
login = s.get('http://www.spotrac.com/signin/submit/')
form = {'redirect' : '',
'email' : 'my_email@gmail.com',
'password' : 'my_password',
}
p = s.post(login, data=form)
r1 = s.get('http://www.spotrac.com/nfl/rankings/2019/base/quarterback/')
soup1 = BeautifulSoup(r1.content,'lxml')
table1 = soup1.find_all('table')[0]
df1 = pd.read_html(str(table1))
r2 = s.get('http://www.spotrac.com/nfl/rankings/2018/base/quarterback/')
soup2 = BeautifulSoup(r2.content,'lxml')
table2 = soup2.find_all('table')[0]
df2 = pd.read_html(str(table2))
print(r1.status_code) # 200
print(r2.status_code) # 200
Чтобы мой код продолжал работать, я помещаю строку сообщения в блок try, как показано ниже:
with requests.session() as s:
try:
p = s.post(login, data=form)
except:
pass
Это позволяет моему коду продолжать работу, и когда я распечатываю код состояния, он показывает 200. Я считаю, что это подтверждает, что я вошел в систему?
Проблема, с которой я сталкиваюсь после этого, заключается в том, что когда я go на неавторизованную веб-страницу, таблицы данных не заполняются, как если бы я вошел в систему. В моем коде вы увидите r1 и r2. Когда я go через процесс получения данных из r1, У меня нет проблем. Я считаю, что это потому, что он общедоступен . Когда я пробую тот же процесс для r2, я получаю следующую ошибку: «IndexError: индекс списка вне допустимого диапазона». Эта ошибка возникает из-за того, что веб-страница не загружает таблицу данных, поскольку таблица данных доступна только для премиум-клиентов, которые вошли в систему. Я знаю, что это так, потому что если вы go перейдете на веб-страницу r1 (http://www.spotrac.com/nfl/rankings/2019/base/quarterback/) вы увидите e таблица данных без входа в систему. Если вы попытаетесь go перейти на веб-страницу r2 (http://www.spotrac.com/nfl/rankings/2018/base/quarterback/), вы увидите не таблицу данных. Вместо этого вы будете перенаправлены на страницу входа.
Любая помощь, которую вы можете предоставить, будет принята с благодарностью! Я действительно не знаю, как действовать на этом этапе.
Спасибо, Дэвид