美丽之声:刮蒸汽愿望清单游戏。findAll不返回嵌套divs可见检查

2024-05-19 07:58:02 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想用beautifulsoup从我的steam愿望列表中删除游戏。理想情况下,我想游戏的名称,链接到蒸汽商店网页的游戏和目前上市的价格。问题是,当我调用soup.find_all("div", {"class": "wishlist_row"})时,它返回一个空列表,尽管我能够在inspector中看到每个游戏的愿望列表上都应该有几个div。以下是我当前代码的精简版本:

from bs4 import BeautifulSoup
import requests

profile_id = "id/Zorro4"

url_base = "https://store.steampowered.com/wishlist/"

r = requests.get(url_base + profile_id + "#sort=order", headers=header)

data = r.text

soup = BeautifulSoup(data, features="lxml")

# find divs containing information about game and steam price
divs = soup.findAll("div", {"class": "wishlist_row"})

print(divs)
>>> []

如果我转到https://store.steampowered.com/wishlist/id/zorro4/#sort=order,我可以在检查器中清楚地看到这些div 我试过了

我注意到一些奇怪的事情可能有助于解决这个问题,但我不知道该怎么办。你知道吗

soup.find(id="wishlist_ctn") # The div which should contain all the wishlist_row divs
>>> <div id="wishlist_ctn">\n</div> 

据我所知,这应该返回<div id="wishlist_ctn">...</div>,因为div包含更多嵌套的div(我正在寻找的那些)。我不知道为什么它只返回换行符。这几乎就好像当你把愿望清单上的东西都弄丢了一样。任何帮助都将不胜感激,过去几天我一直试图解决这个问题,但都没有成功。你知道吗


Tags: anddivid游戏列表allfindclass
2条回答

您在网页上看到的数据是通过Javascript/JSON动态加载的。 加载数据的URL位于HTML页面内—我们可以使用re模块来提取它。你知道吗

此示例打印wishlist的JSON数据:

import re
import json
import requests

url = 'https://store.steampowered.com/wishlist/id/zorro4/#sort=order'
wishlist_url =  json.loads( re.findall(r'g_strWishlistBaseURL = (".*?");', requests.get(url).text)[0] )

data = requests.get(wishlist_url + 'wishlistdata/?p=0').json()
print(json.dumps(data, indent=4))

印刷品:

{
    "50": {
        "name": "Half-Life: Opposing Force",
        "capsule": "https://steamcdn-a.akamaihd.net/steam/apps/50/header_292x136.jpg?t=1571756577",
        "review_score": 8,
        "review_desc": "Very Positive",
        "reviews_total": "5,383",
        "reviews_percent": 95,
        "release_date": "941443200",
        "release_string": "1 Nov, 1999",
        "platform_icons": "<span class=\"platform_img win\"></span><span class=\"platform_img mac\"></span><span class=\"platform_img linux\"></span>",
        "subs": [
            {
                "id": 32,

...and so on.

问题是wishlist实际上是由AJAX请求填充的。靓汤不具备这种功能。你需要一个网络驱动程序。幸运的是,这里的捷径是只使用为wishlist发出的API调用并解析JSON响应。在这种情况下,请求是:

https://store.steampowered.com/wishlist/profiles/76561198068616380/wishlistdata/?p=0

相关问题 更多 >

    热门问题