使用下面的代码,我不能从游戏中心的pregame.com中拉取大学足球比赛。
我尝试过使用不同元素的多个类I,甚至尝试使用pandas拉取,但无法获得整个表。有没有其他方法可以成功地抓取它?
from bs4 import BeautifulSoup
import lxml
import requests
header = {'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'}
pregame = requests.get('https://pregame.com/game-center/?d=1636174800000&t=0&l=2&a=0&s=AwayRot&m=false&b=undefined&o=Current&c=All&k=', 'r').text
soup = BeautifulSoup(pregame, 'lxml')
div = soup.find_all('p', class_ = 'pggc-col-data pggc-away')
print(div)发布于 2021-11-03 09:04:38
您可能需要进行一些数据操作和连接,这取决于您想要的是什么。但是您可以从api获取json格式的数据并对其进行解析。
import requests
import pandas as pd
url = 'https://socket.pregame.com/api/gamecenter/bootstrap'
jsonData = requests.get(url).json()
data = {}
for each, v in jsonData.items():
data[each] = pd.DataFrame(v)
for key, table in data.items():
print(f'\n*** {key} ***')
print(table.head(10).to_string())
leagues_dict = dict(zip(data['Leagues']['Name'],data['Leagues']['Id']))
final_data = {}
for k, v in leagues_dict.items():
events_df = data['Events'][data['Events']['LeagueId'] == v].rename(columns={'Id':'EventId'})
groups_df = data['Groups'][data['Groups']['LeagueId'] == v].rename(columns={'Id':'EventGroupId'})
odds_df = data['Odds'][data['Odds']['LeagueId'] == v]
scores_df = data['Scores']
final_df = events_df.merge(groups_df.drop('LeagueId', axis=1), how='left', on='EventGroupId')
final_df = final_df.merge(odds_df.drop('LeagueId', axis=1), how='right', on='EventId')
if len(scores_df) > 0:
final_df = final_df.merge(scores_df, how='left', on='EventId')
final_data.update({k:final_df})你可以随时将其写入csv并在excel中查看,如果这对你来说更容易使用的话。
发布于 2021-11-03 05:27:02
你遇到的问题是数据是通过javascript动态加载的。
你会想要检查一些像Selenium这样的东西来解决这个问题。下面是一个很好的概述:How to Scrape Data From JavaScript-Based Website Using Python, Selenium, and Headless Web Driver
https://stackoverflow.com/questions/69819865
复制相似问题