使用Python和BeautifulSoup编辑字符串和刮取数据

使用Python和BeautifulSoup编辑字符串和刮取数据,python,beautifulsoup,Python,Beautifulsoup,我正在尝试使用Python和Beautiful Soup,为即将到来的世界巴西柔术锦标赛的每个赛区争取注册人数。(最终的目标是绘制每个部门的竞争对手数量,因此每个注册人的姓名无关紧要。) 我可以使用BeautifulSoup提取一些我想要的信息,但我似乎无法准确地分离出我想要的信息 import urllib2 from bs4 import BeautifulSoup import fileinput import matplotlib page = urllib2.urlopen("htt

我正在尝试使用Python和Beautiful Soup,为即将到来的世界巴西柔术锦标赛的每个赛区争取注册人数。(最终的目标是绘制每个部门的竞争对手数量,因此每个注册人的姓名无关紧要。)

我可以使用BeautifulSoup提取一些我想要的信息,但我似乎无法准确地分离出我想要的信息

import urllib2
from bs4 import BeautifulSoup
import fileinput
import matplotlib

page = urllib2.urlopen("https://www.ibjjfdb.com/ChampionshipResults/926/PublicRegistrations?lang=en-US").read()
soup = BeautifulSoup(page,'html.parser')
我最初的计划是检查所有数据,计算每个部门注册人员的姓名,将其保存为一个数据集,然后根据体重、年龄等绘制信息。我现在看到每个部门底部都有一个计数器,所以我真正需要做的是确定权重部门和总数

最初我尝试使用
soup.find_all()
来获取我想要的信息,但它给了我很多多余的信息。我开始尝试使用从另一个StackOverflow问题中提取的命令来提取整个表:

result = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ["row"])
它给出了一个包含我想要的内容的长字符串:

[<div class="row">\n<h4>BLUE / Juvenile 1 / Male / Rooster</h4>\n<table class="table table-striped">\n<tr>\n<td style="width:40%;">\r\n                                    Atos Jiu-Jitsu\r\n [...]
它工作良好,并提供:

[<h4>BLUE / Juvenile 1 / Male / Rooster</h4>, <h4>BLUE / Juvenile 1 / Male / Light-Feather</h4>, <h4>BLUE / Juvenile 1 / Male / Feather</h4>, <h4>BLUE / Juvenile 1 / Male / Light</h4>, [...]
我试着用
soup.find_all(lambda-tag:tag.name='td'和tag.get('colspan')=[“2”])从一个表中取出那一行
,但我这样做时,它不会返回任何结果。我如何计算竞争对手的总数


(由于分区数和总数按顺序列在一起,只要我小心排序,我就不必担心将总数与分区相匹配。)

您可以使用循环获取所需的值

#Segregate data by rows
    rows = soup.findAll('div',{'class':'row'})

    #Create empty lists
    divisions = []
    competitors = []

    #Create and append respective lists with a loop
    for row in rows:
        raw_division = row.h4.text
        division = raw_division.split('/')
        divisions.append(division)

        raw_competitors = row.tfoot.tr.td.text.strip()
        competitor = raw_competitors.replace('Total: ','')
        competitors.append(competitor)

您现在应该有一个列表-->分区以及一个列表-->竞争对手。

您的预期输出是什么?我想在每个分区中获得一个分区列表和一个总数列表,或者获得一个包含分区和相关总数的列表。在我得到它之后,我想把它分成一个4D数组,数组的总数是年龄、体重、性别和腰带的函数(然后我计划在不同的维度上求和,得到有趣的图)。
<td colspan="2">
  <strong>Total:</strong> 8
</td>
#Segregate data by rows
    rows = soup.findAll('div',{'class':'row'})

    #Create empty lists
    divisions = []
    competitors = []

    #Create and append respective lists with a loop
    for row in rows:
        raw_division = row.h4.text
        division = raw_division.split('/')
        divisions.append(division)

        raw_competitors = row.tfoot.tr.td.text.strip()
        competitor = raw_competitors.replace('Total: ','')
        competitors.append(competitor)