第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Beautiful Soup 網(wǎng)頁抓取復雜的 html 數(shù)據(jù)

Beautiful Soup 網(wǎng)頁抓取復雜的 html 數(shù)據(jù)

汪汪一只貓 2023-09-11 17:07:22
好的,我正在為我的大學編程課程做一個自我指導的學期項目。我的計劃是抓取《守望先鋒聯(lián)賽》網(wǎng)站的不同部分以獲取統(tǒng)計數(shù)據(jù)等,將它們保存在數(shù)據(jù)庫中,然后使用不和諧機器人從該數(shù)據(jù)庫中提取數(shù)據(jù)。但是,我遇到了網(wǎng)站本身的問題。這是排行榜頁面 html 的屏幕截圖。正如您所看到的,它非常復雜,并且很難使用重復的 div 和 body 標簽進行導航,而且我很確定它是動態(tài)創(chuàng)建的。我的教授建議我找到一種方法來隔離表格頂部的排名標題,然后訪問父行,然后遍歷兄弟行,將團隊名稱、位置等數(shù)據(jù)暫時提取到字典中。我在網(wǎng)上找不到任何對我有幫助的東西,大多數(shù)網(wǎng)站沒有提供足夠的信息或已經(jīng)過時。這是我到目前為止所擁有的:from bs4 import BeautifulSoupimport requestsimport linkimport reimport pprinturl = 'https://overwatchleague.com/en-us/standings'response = requests.get(url).textpage = BeautifulSoup(response, features='html.parser')# for stat in page.find(string=re.compile("rank")):#     statObject = {#         'standing' : stat.find(string=re.compile, attrs={'class' : 'standings-table-v2styles__TableCellContent-sc-3q1or9-6 jxEkss'}).text.encode('utf-8')#     }# print(page.find_all('span', re.compile("rank")))  # for tag in page.find_all(re.compile("rank")):    # print(tag.name)print(page.find(string=re.compile('rank')))"""# locate branch with the rank header,# move up to the parent branch# iterate through all the siblings and # save the data to objects"""評論都是失敗的嘗試,并且沒有任何返回。唯一沒有注釋掉的行返回一個巨大的 json,其中包含許多不必要的信息,其中確實包括我想要解析并用于我的項目的內(nèi)容。我已將其鏈接為谷歌文檔,并突出顯示了我想要獲取的內(nèi)容。我現(xiàn)在不太確定還有什么辦法可以解決這個問題。我考慮過使用selenium,但是我缺乏javascript知識,所以如果可能的話我會盡量避免它。即使您可以就如何解決此問題提出一些建議,我也會非常感激。謝謝
查看完整描述

1 回答

?
富國滬深

TA貢獻1790條經(jīng)驗 獲得超9個贊

正如您所注意到的,您的數(shù)據(jù)采用 JSON 格式。它直接嵌入到頁面中的腳本標記中,因此很容易使用它美麗湯。然后你需要解析json以提取所有表(對應3個選項卡):


import requests

from bs4 import BeautifulSoup

import json


url = 'https://overwatchleague.com/en-us/standings'


r = requests.get(url)


soup = BeautifulSoup(r.text, "html.parser")

script = soup.find("script",{"id":"__NEXT_DATA__"})


data = json.loads(script.text)


tabs = [

    i.get("standings")["tabs"]

    for i in data["props"]["pageProps"]["blocks"] 

    if i.get("standings") is not None

]


result = [

    { i["title"] : i["tables"][0]["teams"] }

    for i in tabs[0]

]


print(json.dumps(result, indent=4, sort_keys=True))

上面的代碼給你一個字典,鍵是3個選項卡的標題,值是表數(shù)據(jù)


查看完整回答
反對 回復 2023-09-11
  • 1 回答
  • 0 關注
  • 102 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號