代码之家  ›  专栏  ›  技术社区  ›  Xdvanced

尝试从网页获取元素时总是返回“None”

  •  2
  • Xdvanced  · 技术社区  · 3 年前

    我正试图从本页的“总体比赛统计数据”中获得胜利: https://www.fctables.com/teams/sunderland-194998/?template_id=11 。我尝试的所有操作都返回“无”。这不是我尝试使用的唯一一个页面,但每个页面似乎都返回“无”。我在这方面不是很先进,所以任何帮助都将不胜感激。

    from bs4 import BeautifulSoup
    import requests
    
    URL = "https://www.fctables.com/teams/sunderland-194998/"
    response = requests.get(URL)
    
    soup = BeautifulSoup(response.text, "html.parser")
    
    wins = soup.find('div', class_='text-success ')
    print(wins)
    

    我需要它来输出“6”,这是获胜的次数。优选为整数。

    2 回复  |  直到 3 年前
        1
  •  1
  •   Andrej Kesely    3 年前

    您可以更改选择标记的方式:

    import requests
    from bs4 import BeautifulSoup
    
    URL = "https://www.fctables.com/teams/sunderland-194998/?template_id=11"
    response = requests.get(URL)
    
    soup = BeautifulSoup(response.text, "html.parser")
    
    stats = {}
    for li in soup.select("h3:-soup-contains('Overall matches stats') + div li"):
        stats[li.p.text] = li.div.text
    
    print(stats["Wins"])
    

    打印:

    6
    

    这个 stats 是一个包含以下内容的词典:

    {
        "Matches": "11",
        "Goals": "20",
        "per game": "1.82",
        "Wins": "6",
        "Draws": "1",
        "Losses": "4",
        "Over 2.5": "72.7%",
        "Over 1.5": "81.8%",
        "CS": "36.36%",
        "BTTS": "45.45%",
    }
    
        2
  •  0
  •   J_H    3 年前

    BeautifulSoup是著名的让 你解析别人的HTML垃圾,就好像它在语法上是正确的一样。 遗憾的是,HTML语法有点复杂。

    你被类名后面的空格挂断了。 把它剥光。

    >>> from pprint import pp
    >>>
    >>> pp(soup.find_all('div', class_='text-success '))
    []
    >>> pp(soup.find_all('div', class_='text-success'))
    [<div class="text-success">11</div>,
     <div class="text-success">1.83</div>,
     <div class="text-success">4</div>,
     <div class="text-success">4/6</div>,
     <div class="text-success">5/6</div>,
     <div class="text-success">2/6</div>,
     <div class="text-success">2/6</div>,
     <div class="text-success">41</div>,
     <div class="text-success">2.16</div>,
     <div class="text-success">11</div>,
     <div class="text-success">78.9%</div>,
     <div class="text-success">89.5%</div>,
     <div class="text-success">21.05%</div>,
     <div class="text-success">68.42%</div>]
    

    Steve Harvey想知道,“太空可能 有效类名的一部分?“ 调查 says “nope!”,特别禁止使用空格字符。

    推荐文章