【问题标题】:Scraping Multiple Data Tables at once in Python在 Python 中一次抓取多个数据表
【发布时间】:2020-04-11 21:32:22
【问题描述】:

我正在使用以下 NCAA 统计网站并希望从中获取数据:

https://stats.ncaa.org/rankings/change_sport_year_div

要获取我要抓取的具体数据,请点击链接,选择男子篮球运动,2019-2020 年和 Division III,然后点击球队统计按钮。 html,我能够从我想要的下拉菜单中找到所有统计信息。我想知道是否有可能使用 BeautifulSoup(甚至可能是 pd.read_html())来为每个类别抓取一个表。看起来我可能需要的所有信息都在下图中,但我不太确定如何实现 python 的工具来大写。这将比手动下载每个统计数据的 excel 表并将它们读入 pandas 更有效(并且不那么无聊)。谢谢。

【问题讨论】:

    标签: python html pandas web-scraping beautifulsoup


    【解决方案1】:

    检查您的案例,您应该使用一些表单数据向给定的 url 发出 post 请求,如下所示:

    sport_code: MBB
    academic_year: 2020.0
    division: 3.0
    ranking_period: 110.0
    team_individual: T
    game_high: N
    ranking_summary: N
    

    sport_code=MBB&academic_year=2020.0&division=3.0&ranking_period=110.0&team_individual=T&game_high=N&ranking_summary=N
    

    如上图格式化表单数据并调用curl,

    curl -X POST -d "@formdata.txt" https://stats.ncaa.org/rankings/change_sport_year_div
    

    如果你愿意,你也可以对 requests 模块做同样的事情,只要确保表单数据的格式正确。

    r = requests.post("https://stats.ncaa.org/rankings/change_sport_year_div",
                      data={"sport_code": "MBB",
                            "academic_year": 2020.0,
                            "division": 3.0,
                            "ranking_period": 110.0,
                            "team_individual": "T",
                            "game_high": "N",
                            "ranking_summary": "N"})
    

    【讨论】:

    • 您是如何找到令牌和那些参数的?我似乎找不到此站点的 API/API 文档。
    • 这类网站没有API,打开chrome devtools查看网络标签。点击type:documentHeaders下有Form Data
    • 我对如何格式化原始响应中的代码感到有些困惑。我该如何处理所有这些变量?我能够在我的机器上找到它们并拥有自己的令牌。它被列为字典。我已经导入了请求。
    • 另外,字典不会运行,因为键 'stat_seq' 没有值对。
    • 运行以下代码时出现错误 r = requests.post('stats.ncaa.org/rankings/change_sport_year_div>', data = {'sport_code': 'MBB', 'academic_year': 2020.0, ' Division':3.0,'ranking_period':110.0,'team_individual':'T','game_high':'N','ranking_summary':'N','org_id':-1,'stat_seq':'',' conf_id':-1,'region_id':-1,'ncaa_custom_rank_summary_id':-1,'user_custom_rank_summary_id':-1,'authenticity_token':'1qX+xH/PoudepD8bA4ZV+3sObi98u2rI59KoqHH1B00='}) InvalidSchema:未找到连接适配器
    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 2018-02-07
    • 2016-11-04
    • 1970-01-01
    • 2022-11-10
    • 2019-09-19
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多