繁体   English   中英

使用 BeautifulSoup 在 Steam 中抓取多个页面

[英]Scraping multiple pages in Steam with BeautifulSoup

我的目标是抓取动作游戏的信息,例如游戏名称、标签、价格。 使用的库是请求,beautifulsoup。URL: https://store.steampowered.com/tags/en/Action/#p=0&tab=ConcurrentUsers

我设法将其编码为第一页,然后尝试抓取 15 页。 我的计划是,当我将 url 中的“/Action/#p=0”替换为“/Action/#p=1”并发送获取请求时,我会收到下一页游戏的 html 响应。 出于某种原因,即使我尝试使用“#p=15”,这也不起作用,我得到了第一页的 html。 然后我检查了页面元素(1、2、3、4..),但它们不包含任何链接。 接下来,我开始在“检查 > 网络选项卡”中查看是否可以拦截任何类似于下一页的 html 的链接,我找到了它 - 检查后它确实包含下一页的游戏。 URL 第二页: https://store.steampowered.com/contenthub/querypaginated/tags/ConcurrentUsers/render/?query=&start=15&count=15&cc=BG&l=english&v=4&tag=Action&tagid=19

URL 中的页码 2,其中编号为“=&start”值/15。 不幸的是,由于标签的层次结构混乱,内容无法使用。 例如:

           <span class="top_tag">
            FPS
           </span>
           <span class="top_tag">
            , Shooter
           </span>

将是:

       <span class='\"top_tag\"'>
        FPS&lt;\/span&gt;
        <span class='\"top_tag\"'>
         , Shooter&lt;\/span&gt;

第二个跨度 class 是第一个跨度的孩子,它应该是它的兄弟姐妹。 这两个示例都使用 utf-8 的 prettify soup 方法进行了解码。

有一个更好的方法吗? 我知道我可以使用正则表达式或 selenium 来完成它,但我想知道是否有办法使用 beautifulsoup 和请求来完成此任务。

服务器响应的内容是Json格式,所以使用.json .json()方法解析。 例如:

import requests
from bs4 import BeautifulSoup

url = "https://store.steampowered.com/contenthub/querypaginated/tags/ConcurrentUsers/render/"

params = {
    "query": "",
    "start": 0,
    "count": 15,
    "cc": "US",
    "l": "english",
    "v": "4",
    "tag": "Action",
    "tagid": "19",
}


for page in range(5):  # <-- increase number of pages here
    params["start"] = 15 * page
    data = requests.get(url, params=params).json()
    soup = BeautifulSoup(data["results_html"], "html.parser")
    for item in soup.select(".tab_item_content"):
        print(
            "{:<40} {}".format(
                item.select_one(".tab_item_name").text,
                item.select_one(".tab_item_top_tags").text,
            )
        )

印刷:

Counter-Strike: Global Offensive         FPS, Shooter, Multiplayer, Competitive
Grand Theft Auto V                       Open World, Action, Multiplayer, Automobile Sim
Lost Ark                                 MMORPG, Free to Play, Action RPG, Hack and Slash
Apex Legends™                            Free to Play, Battle Royale, Multiplayer, Shooter
PUBG: BATTLEGROUNDS                      Survival, Shooter, Multiplayer, Battle Royale
Dota 2                                   Free to Play, MOBA, Multiplayer, Strategy
ELDEN RING                               Souls-like, Relaxing, Dark Fantasy, RPG
Tom Clancy's Rainbow Six® Siege          FPS, Hero Shooter, Multiplayer, Tactical
Vampire Survivors                        Action Roguelike, Pixel Graphics, Bullet Hell, Casual
NARAKA: BLADEPOINT                       Battle Royale, Sexual Content, Multiplayer, Martial Arts
Warframe                                 Free to Play, Action RPG, RPG, Action
Destiny 2                                Free to Play, Open World, Looter Shooter, FPS
Wallpaper Engine                         Mature, Utilities, Software, Anime
Rust                                     Survival, Crafting, Multiplayer, Open World
Dead by Daylight                         Horror, Survival Horror, Multiplayer, Online Co-Op
Brawlhalla                               Free to Play, Multiplayer, Fighting, Casual
Dread Hunger                             Multiplayer, Survival, Online Co-Op, Social Deduction
Stumble Guys                             Action, Casual, 3D, 3D Platformer
ARK: Survival Evolved                    Open World Survival Craft, Survival, Open World, Multiplayer
LEGO® Star Wars™: The Skywalker Saga     LEGO, Adventure, Open World, Multiplayer

...and so on.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM