【问题标题】:How do I parse the data hidden inside html code using bs4如何使用 bs4 解析隐藏在 html 代码中的数据
【发布时间】:2021-06-03 21:22:11
【问题描述】:

我需要从已更新的网站解析此号码。我无法访问 html 代码的数据组件部分。

HTML CODE

我已经尝试过 xpath 解析和 bs4

url = "https://www.muthead.com/20/players/10111309/upgrades/"
r = requests.get(url)
content = r.text
soup = BeautifulSoup(content,"lxml")
hello = soup.find("div",class_="average rating-list__RatingValue-ubw14i-3 jzOWLB").text
print(hello)

我收到以下错误:

hello = soup.find("div",class_="average rating-list__RatingValue-ubw14i-3 jzOWLB").text
builtins.AttributeError: 'NoneType' object has no attribute 'text'

我需要刮掉 dic class= average rating-list__RatingValue-ubw14i-3 jzOWLB> 77 </div> 内的 html 代码中的77

似乎 bs4 无法查看主容器内部我没有得到任何代码

 <div data-component="player-upgrades" data-props="{externalId": 10111309, "gameSlug": "20", "basePath": "/20/players/10111309/upgrades/"}

【问题讨论】:

    标签: beautifulsoup


    【解决方案1】:

    网站上的内容是使用 javascript 呈现的,因此在您的情况下使用 BeautifulSoup 几乎没有任何用处。话虽如此,我建议使用以下代码直接从 API 获取所有玩家统计数据:

    import requests
    
    url = "https://www.muthead.com/api/mutdb/player_item/?expand=game%2Cposition%2Cprogram%2Cteam%2Cupgrade_tiers&external_id=10111309&game__slug=20"
    
    headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0"}
    
    req_raw = requests.get(url, headers=headers).json()
    spd = req_raw["results"][0]["stats"][1]["value"]
    
    print(spd)
    

    或者,如果您计划使用多个链接,您可能需要使用以下代码:

    import requests
    
    url_raw = "https://www.muthead.com/20/players/10111309/upgrades/"
    
    external_id = url_raw.split("/")[5]
    game_slug = url_raw.split("/")[3]
    
    url = "https://www.muthead.com/api/mutdb/player_item/?expand=game%2Cposition%2Cprogram%2Cteam%2Cupgrade_tiers&external_id={}&game__slug={}".format(external_id, game_slug)
    
    headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0"}
    
    req_raw = requests.get(url, headers=headers).json()
    spd = req_raw["results"][0]["stats"][1]["value"]
    
    print(spd) 
    

    您只需将url_raw 替换为您正在抓取的游戏的 URL,脚本会自动向 API 发送请求(无需查找 API 链接)

    (请注意两个代码输出77

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 2014-08-11
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多