簡體   English   中英

使用 BeautifulSoup 4.8.2 從網站抓取表格

[英]Table scraping from website with BeautifulSoup 4.8.2

我正在嘗試從網站上抓取一張桌子,但它並不完全奏效。 我正在使用 Python 3.7.4 和 bs4 4.8.2。 另外,我不精通 HTML,所以如果我弄錯了一些術語,請原諒。

我正在嘗試使用“id = 'track_1_box'”來抓取父 class 下的表 class,可以在此處看到。 我試圖提取的信息是字符串“title = 'Canada'”和“Cole”,但現在我什至無法訪問該表。

這是我到目前為止所嘗試的。

import requests
import numpy as np
from bs4 import BeautifulSoup
from csv import writer

#%%
url = 'https://www.mkleaderboards.com/mkw/charts/world/nonsc/12'
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')

table = soup.find("table", class_='table')

但是,“table”變量返回一個空列表。 我還嘗試使用訪問父 class

soup.find_all(class_ = 'panel inline_box track_box') 

返回

[<div class="panel inline_box track_box" id="track_1_box">
 </div>, <div class="panel inline_box track_box" id="track_2_box">
 </div>, <div class="panel inline_box track_box" id="track_3_box">
 </div>, <div class="panel inline_box track_box" id="track_4_box">
 </div>]

但不是四個 div 類的“內部”。

我做錯了什么還是網站有什么東西阻止我刮桌子?

數據通過 JavaScript 加載,但您可以使用requests模塊獲取數據:

import json
import requests


url = 'https://www.mkleaderboards.com/mkw/charts/world/nonsc/12'
api_url = 'https://www.mkleaderboards.com/api/charts/mkw_nonsc_world/{num}'

cup_id = int(url.split('/')[-1])

# box 1:
box1 = requests.get(api_url.format(num=cup_id*4+1)).json()
# box 2:
box2 = requests.get(api_url.format(num=cup_id*4+2)).json()
# box 3:
box3 = requests.get(api_url.format(num=cup_id*4+3)).json()
# box 4:
box4 = requests.get(api_url.format(num=cup_id*4+4)).json()

# uncomment this to print data to screen:
# print(json.dumps(box1, indent=4))
# print(json.dumps(box2, indent=4))
# print(json.dumps(box3, indent=4))
# print(json.dumps(box4, indent=4))

# print box1 to screen:
for d in box1['data']:
    print('{:<30} {:<20} {}'.format(d['name'], d['country_name'], d['score_formatted']))

印刷:

Cole                           Canada               1:08.774
Kasey                          United States        1:08.881
SwareJonge                     Netherlands          1:09.036
Sosis                          United States        1:09.050
Paul M.                        United States        1:09.066
Sword                          United Kingdom       1:09.118
Gustav                         Sweden               1:09.136
Guy                            United States        1:09.143
Glaceon                        Japan                1:09.157
Liam [MKW]                     United Kingdom       1:09.171

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM