亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Beautiful Soup 網頁抓取復雜的 html 數據

Beautiful Soup 網頁抓取復雜的 html 數據

汪汪一只貓 2023-09-11 17:07:22
好的,我正在為我的大學編程課程做一個自我指導的學期項目。我的計劃是抓取《守望先鋒聯賽》網站的不同部分以獲取統計數據等,將它們保存在數據庫中,然后使用不和諧機器人從該數據庫中提取數據。但是,我遇到了網站本身的問題。這是排行榜頁面 html 的屏幕截圖。正如您所看到的,它非常復雜,并且很難使用重復的 div 和 body 標簽進行導航,而且我很確定它是動態創建的。我的教授建議我找到一種方法來隔離表格頂部的排名標題,然后訪問父行,然后遍歷兄弟行,將團隊名稱、位置等數據暫時提取到字典中。我在網上找不到任何對我有幫助的東西,大多數網站沒有提供足夠的信息或已經過時。這是我到目前為止所擁有的: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,其中包含許多不必要的信息,其中確實包括我想要解析并用于我的項目的內容。我已將其鏈接為谷歌文檔,并突出顯示了我想要獲取的內容。我現在不太確定還有什么辦法可以解決這個問題。我考慮過使用selenium,但是我缺乏javascript知識,所以如果可能的話我會盡量避免它。即使您可以就如何解決此問題提出一些建議,我也會非常感激。謝謝
查看完整描述

1 回答

?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

正如您所注意到的,您的數據采用 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個選項卡的標題,值是表數據


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號