![](/img/trans.png)
[英]UnicodeEncodeError: Scraping data using Python and beautifulsoup4
[英]Editing Strings and Scraping Data Using Python and BeautifulSoup
我正在嘗試使用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()
提取所需的信息,但這給了我很多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 [...]
為了縮小范圍,我搜索了僅給出權重類別的標題:
all_divisions = [division for division in soup.find_all("h4")]
效果很好,並提供:
[<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>, [...]
我希望能夠將它們分為不同的組,以便進行繪制。 我該如何拆分? 我嘗試使用all_divisions[0].split()
但顯然soup.find_all()
返回NoneType對象而不是字符串。
接下來,我試圖獲取總數。 我可以使用soup.find_all('strong')
隔離字符串“ Total:”,但是它似乎無法獲得實際數字,因為該數字未包含在粗體中:
<td colspan="2">
<strong>Total:</strong> 8
</td>
我試圖出去一個,並使用soup.find_all(lambda tag: tag.name == 'td' and 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)
您現在應該有一個列表列表->部門以及一個列表->競爭對手。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.