如何通过搜索一些文本来获取特定标签和类的索引号?

时间:2018-11-30 13:58:51

标签: python beautifulsoup

我有以下html

<ul class="vote_list clearfix" id="vote_div">                    
    <li class="vote_one">
        <div class="vote_show">
            <div class="vote_T1">Chelsea</div>
            <div class="vote_state">
                <div class="vote_ST1">Votes:30000</div>
                <div class="vote_ST2">Ranking:1</div>
            </div>
        </div>
        <div class="vote_date">
            <div class="vote_T1">Chelsea</div>
        </div>
    </li>

    <li class="vote_one">
        <div class="vote_show">
            <div class="vote_T1">Arsenal</div>
            <div class="vote_state">
                <div class="vote_ST1">Votes:20000</div>
                <div class="vote_ST2">Ranking:2</div>
            </div>
        </div>
        <div class="vote_date">
            <div class="vote_T1">Arsenal</div>
        </div>
    </li>

    <li class="vote_one">
        <div class="vote_show">
            <div class="vote_T1">Liverpool</div>
            <div class="vote_state">
                <div class="vote_ST1">Votes:10000</div>
                <div class="vote_ST2">Ranking:3</div>
            </div>
        </div>
        <div class="vote_date">
            <div class="vote_T1">Liverpool</div>
        </div>
    </li>
<ul>

我想提取切尔西的总票数,因此应该显示投票数:30000

我的想法是哪个<li class="vote_one">拥有Chelsea文本,并且由于0位于第一个Chelsea元素上,它应该返回vote_one

但是我不知道如何将我的想法转换为代码。

谢谢。

2 个答案:

答案 0 :(得分:0)

最终解决了@Idlehands

soup = BeautifulSoup(full_content, "lxml")

i=0
for vote_one_list in soup.find_all("li", class_="vote_one"):
        if vote_one_list.find("div", class_="vote_show").find("div", class_="vote_T1").text == "Chelsea":
                total_vote = soup.find_all("li", class_="vote_one")[i].find("div", class_="vote_show").find("div", class_="vote_state").find("div", class_="vote_ST1").text
                rank = soup.find_all("li", class_="vote_one")[i].find("div", class_="vote_show").find("div", class_="vote_state").find("div", class_="vote_ST2").text
                print "Chelsea | "+ rank + " | "+total_vote
        i = i+1

答案 1 :(得分:0)

打印votesrank

获得任何给定输入的票数的最简单方法是:

input_str = 'Chelsea'

for vote in soup.find_all('div', class_='vote_show'):
    if vote.find('div', class_='vote_T1').get_text().strip() == input_str:
        print(vote.find('div', class_='vote_ST1').get_text().strip()) # Prints votes
        print(vote.find('div', class_='vote_ST2').get_text().strip()) # Prints rank


该解决方案将检查所有<div class='vote_show'>,以检查<div class='vote_T1'>中的文本是否与输入字符串Chelsea相同。

我添加了strip(),以便即使字符串周围有空格也可以找到匹配项。如果找到匹配项,则会打印包含的<div class='vote_ST1'>的文本,并再次去除周围的空白。

打印索引

您可以按以下方式修改for循环以使用enumerate()

for idx, vote in enumerate(soup.find_all('div', class_='vote_show')):
    if vote.find('div', class_='vote_T1').get_text().strip() == input_str:
        print(idx) # prints index
        print(vote.find('div', class_='vote_ST1').get_text().strip()) # prints votes
        print(vote.find('div', class_='vote_ST2').get_text().strip()) # prints rank

枚举使我们可以遍历某些内容并具有一个自动计数器。

如果您想在找到匹配项后停止进一步查找,可以在break语句后添加print()语句。