我有以下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
但是我不知道如何将我的想法转换为代码。
谢谢。
答案 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)
votes
和rank
获得任何给定输入的票数的最简单方法是:
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()
语句。