当前位置: 首页 > 知识库问答 >
问题:

在标题的正下方和上方找到带有特定字符串的元素

丁沛
2023-03-14

我怎么能刮下面的结构只得到h3,h4类以上h5字符串="Prem联赛"和div类="fixres_item"下面h5字符串"Prem联赛"。

我想要h3,h4中的文本,在div中,我需要一个span中的文本,在span中

因此,当h5类字符串是Prem-League时,我希望h4和h3直接在上面,并且我需要在h5类字符串=Prem-League的正下方添加fixres_项的各种元素

<div class="fixres__body" data-url="" data-view="fixture-update" data-controller="fixture-update" data-fn="live-refresh" data-sport="football" data-lite="true" id="widgetLite-6">
    <h3 class="fixres__header1">November 2018</h3>          
    <h4 class="fixres__header2">Saturday 24th November</h4>             
    <h5 class="fixres__header3">Prem League</h5>
    <div class="fixres__item">stuff in here</div>

    <h4 class="fixres__header2">Wednesday 28th November</h4>
    <h5 class="fixres__header3">UEFA Champ League</h5>
    <div class="fixres__item">stuff in here</div>

    <h3 class="fixres__header1">December 2018</h3>          
    <h4 class="fixres__header2">Sunday 2nd December</h4>                
    <h5 class="fixres__header3">Prem League</h5>
    <div class="fixres__item">stuff in here</div>

这是我到目前为止拥有的代码,但这包括了h5字符串“欧盟足球锦标赛联盟”下面的div的数据——我不想要这些数据。我只想从低于h5标题“Prem League”的分区获得数据。例如,我不希望PSG出现在输出中,因为它来自h5以下标题为“欧盟冠军联赛”的分区

我的代码-

def squad_fixtures():
    team_table = ['https://someurl.com/liverpool-fixtures']

    for i in team_table:

#        team_fixture_urls = [i.replace('-squad', '-fixtures') for i in team_table]

        squad_r = requests.get(i)
        premier_squad_soup = BeautifulSoup(squad_r.text, 'html.parser')
#        print(premier_squad_soup)
        premier_fix_body = premier_squad_soup.find('div', {'class': 'fixres__body'})
#        print(premier_fix_body)

        premier_fix_divs = premier_fix_body.find_all('div', {'class': 'fixres__item'})

    for i in premier_fix_divs:  
        team_home = i.find_all('span', {'class': 'matches__item-col matches__participant matches__participant--side1'})
        for i in team_home:
            team_home_names = i.find('span', {'class': 'swap-text--bp30'})['title']
            team_home_namesall.append(team_home_names)
    print(team_home_namesall)

输出
['沃特福德','PSG','利物浦','伯恩利','B'口','利物浦','利物浦','狼队','利物浦','利物浦','曼城','布莱顿','利物浦','利物浦','西汉姆','利物浦','曼联','利物浦,埃弗顿,利物浦,富勒姆,利物浦,苏顿,利物浦,卡迪夫,利物浦,纽卡斯尔,利物浦

共有1个答案

杜哲彦
2023-03-14

看来你的挑战是将刮球限制在英超联赛中

注意:您的问题指出h5字符串应该是Prem League,但事实上,当我查看回复时,它似乎是Premier League

这个HTML看起来非常扁平,结构上没有区别,因此最好的办法是从h5开始遍历上一个和下一个兄弟姐妹,而h5本身很容易找到:

import re

from bs4 import BeautifulSoup, Tag
import requests

prem_league_regex = re.compile(r"Premier League")


def squad_fixtures():
    team_table = ['https://www.skysports.com/liverpool-fixtures']

    for i in team_table:
        squad_r = requests.get(i)
        soup = BeautifulSoup(squad_r.text, 'html.parser')
        body = soup.find('div', {'class': 'fixres__body'})
        h5s = body.find_all('h5', {'class': 'fixres__header3'}, text=prem_league_regex)
        for h5 in h5s:
            prev_tag = find_previous(h5)
            if prev_tag.name == 'h4':
                print(prev_tag.text)
            prev_tag = find_previous(prev_tag)
            if prev_tag.name == 'h3':
                print(prev_tag.text)
            fixres_item_div = find_next(h5)
            """
                get the things you need from fixres__item now that you have it...
            """



def find_previous(tag):
    prev_tag = tag.previous_sibling
    while(not isinstance(prev_tag, Tag)):
        prev_tag = prev_tag.previous_sibling
    return prev_tag

def find_next(tag):
    next_tag = tag.next_sibling
    while(not isinstance(next_tag, Tag)):
        next_tag = next_tag.next_sibling
    return next_tag

 类似资料:
  • 问题内容: 如何打印带有下标或上标的字符串?你可以在没有外部库的情况下执行此操作吗?我希望它在Android中显示。 问题答案:

  • 问题内容: 有没有在Python的标准方式标题字符的字符串(即词开始大写字符,所有剩余的套管字符有小写),但像离开的文章,和小写? 问题答案: 这有一些问题。如果使用拆分和合并,则某些空格字符将被忽略。内置的大写和标题方法不会忽略空格。 如果句子以文章开头,则不希望标题的第一个单词小写。 请记住以下几点:

  • 我有一个HashMap,里面有键和值。我想用字符串中映射的值替换键。 在字符串中,键被写成@keyname或@“keyname”,这些应替换为map.get(“keyname”) 假设我们的地图是这个 所以如果我们处理字符串“Hello world,Iam@key1 years old.”,它将变成“Hello world,Iam 2 years old.”。 我们可以用@“key1”代替@key

  • 问题内容: 我在尝试搜索字符串中的子字符串时遇到问题。该子字符串可能在字符串中也可能不在字符串中。 我知道是否可以完成的两种方法是: 正则表达式 但是,还有其他“优化”方式吗?你会怎么做? Ruby可以提供更好的答案吗?由于我们使用jRuby,因此答案可以是Ruby或Java。 问题答案: 在Ruby中,使用方法: 返回。

  • 问题内容: 我在做作业时遇到了这个问题(老实说,至少没有试图隐藏它),在解决该问题时遇到了问题。 给定以下声明:字符串短语=“ WazzUp?-谁在第一时间???-IDUNNO”;编写必要的代码以计算字符串中的元音数量,并将适当的消息打印到屏幕上。 这是我到目前为止的代码: 但是,当我运行它时,它只会产生一堆空白行。有人可以帮忙吗? 问题答案: 应该是。 给出的值,然后加1。就像您现在拥有的一样,

  • 问题内容: 我需要从下面的变量值中删除括号“ [”和“]” ,并将结果存储在中。 使用,还是其他? 问题答案: 有几种可用的方法,有时可以使它们执行完全相同的任务,例如preg_replace / str_replace。但是,也许您只想从字符串的开头或结尾删除方括号;在这种情况下,preg_replace有效。但是,如果可能有多个括号,则preg_replace也可以完成这项工作。但是修剪更容易