网页抓取 Python beautifulsoup

Web scraping Python beautifulsoup

我正在尝试创建一个从网站 https://www.superherodb.com/ and fetches the information on all the superheroes (seen on:https://www.superherodb.com/characters) 的各个页面扫描网站的爬虫。我想获取有关英雄的所有信息:统计数据、能力、装备、出身、联系等。但是我无法从英雄页面访问他们的统计数据。

例如这个页面:https://www.superherodb.com/001/10-39302/

对于英雄页面中的能量统计部分,我试过:

  bs_test.find_all("div", {"class": "stat-value"})

和:

    bs_test.select(".stat-value")

但是输出总是输出0作为值:

[<div class="stat-value">0</div>,
 <div class="stat-value">0</div>,
 <div class="stat-value">0</div>,
 <div class="stat-value">0</div>,
 <div class="stat-value">0</div>,
 <div class="stat-value">0</div>,
 <div class="stat-value">0</div>]

我在这里错过了什么?请帮助我。

在那里看不到它们。尝试抓取 而不是 stat_value。它提供以下数据:

stats_10_39302_shdb = {"stats":{"int":140,"str":45,"spe":5,"dur":5,"pow":0,"com" :20,"tie":0},"bars":{"int":70,"str":1,"spe":1,"dur":5,"pow":0,"com":20 “并列”:0}

以汉族为例

数据是在页面加载后由 JS 注入的,但是 requests.get 只给你静态的 HTML,它在 <script> 标签旁边有占位符值 [=25] =] 带有实际数据的 JS 对象。

跟进 ,以下是从 .footnote script 元素中提取数据的方法:

import json
import re
import requests

response = requests.get("https://www.superherodb.com/001/10-39302/")
response.raise_for_status()
stats = [json.loads(x) for x in re.findall(r'{"stats":[^;]+', response.text)]
print(json.dumps(stats, indent=2))

输出:

[
  {
    "stats": {
      "int": 140,
      "str": 45,
      "spe": 5,
      "dur": 5,
      "pow": 0,
      "com": 20,
      "tie": 0
    },
    "bars": {
      "int": 70,
      "str": 1,
      "spe": 1,
      "dur": 5,
      "pow": 0,
      "com": 20,
      "tie": 0
    },
    "shdbclass": {
      "value": 10,
      "visual": 10,
      "level": 1
    },
    "specials": {
      "omnipotent": 0,
      "omniscient": 0,
      "omnipresent": 0
    }
  },
  {
    "stats": {
      "int": 100,
      "str": 100,
      "spe": 10,
      "dur": 1,
      "pow": 1,
      "com": 1,
      "tie": 9
    },
    "bars": {
      "int": 50,
      "str": 1,
      "spe": 6,
      "dur": 1,
      "pow": 1,
      "com": 1,
      "tie": 90
    },
    "shdbclass": {
      "value": 20.5,
      "visual": 21,
      "level": 1
    },
    "specials": {
      "omnipotent": 0,
      "omniscient": 0,
      "omnipresent": 0
    },
    "ustats": 1
  }
]

请参阅规范 Web-scraping JavaScript page with Python 以了解此方法的概括以及更多关于抓取 JS-driven 页面的解释和策略。