Python BeautifulSoup:刮蒸汽愿望列表游戏-.findAll不返回在inspector中可见的嵌套div
所以我试图用beautifulsoup从我的steam愿望列表中删除游戏。理想情况下,我想知道游戏的名称,游戏蒸汽商店页面的链接以及当前的标价。问题是,当我调用soup.find_alldiv,{class:wishlist_row}时,它返回一个空列表,尽管我能够在inspector中看到每个游戏的愿望列表上都应该有几个这样的div。以下是我当前代码的浓缩版本:Python BeautifulSoup:刮蒸汽愿望列表游戏-.findAll不返回在inspector中可见的嵌套div,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,所以我试图用beautifulsoup从我的steam愿望列表中删除游戏。理想情况下,我想知道游戏的名称,游戏蒸汽商店页面的链接以及当前的标价。问题是,当我调用soup.find_alldiv,{class:wishlist_row}时,它返回一个空列表,尽管我能够在inspector中看到每个游戏的愿望列表上都应该有几个这样的div。以下是我当前代码的浓缩版本: from bs4 import BeautifulSoup import requests profile_id = "id/Zo
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)
>>> []
如果我去的话,我可以清楚地看到检查员身上的这些div
我试过了
使用html.parser代替lxml
欺骗用户代理/头
尝试改用.finddiv,{class:wishlist_row}
除其他外,通过这些线索
我注意到一些奇怪的事情可能有助于解决这个问题,但我不知道该怎么办
soup.find(id="wishlist_ctn") # The div which should contain all the wishlist_row divs
>>> <div id="wishlist_ctn">\n</div>
据我所知,这个应该会回来。。。因为div包含的嵌套div比我要查找的多。我不知道为什么它只返回换行符。这几乎就好像是在抓取愿望列表的内容时丢失了一样。非常感谢您的帮助,过去几天我一直在努力解决这个问题,但没有成功。您在网页上看到的数据是通过Javascript/JSON动态加载的。 加载数据的URL位于HTML页面内——我们可以使用re模块来提取它 此示例打印愿望列表的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.
问题是愿望列表实际上是由一个AJAX请求填充的。Beauty Soup无法处理该功能。你需要一个网络驱动程序。幸运的是,这里的捷径是只使用为wishlist进行的API调用并解析JSON响应。在这种情况下,该请求是:
https://store.steampowered.com/wishlist/profiles/76561198068616380/wishlistdata/?p=0只要您收到游戏,就应该增加p并循环。虽然您的代码可能适用于此特定的steamid,但不会适用于其他人,因为来自第0页的响应将只包含前100个游戏。谢谢!无论如何,要使用json库导航输出,还是必须使用。手动拆分并解析所有内容?@Jurij否,数据变量的类型为dict,因此您可以像使用普通python字典一样使用它。非常感谢!请详细说明您是如何获得该链接的/对于通过JSON动态加载数据的情况,获得该链接的一般过程是什么?浏览器上的deverOper工具将显示来自加载页面的所有请求。然后可以按类型筛选:图像、css、js等。我在这里假设,但数字串可能是用户id或类似的东西;您将为每个用户更改该值。