我想用BeautifulSoup解析这个HTML代码。
事实上,对于每项工作,我想获得时间和持续时间。 例如,我想获得:
2012年6月 - 至今(3年2个月)
但我知道了:
2012年7月
这是我的HTML代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
html_doc = """
<div id="background-experience" class="background-experience edit-default ">
<h3>Experience</h3>
<div id="experience-312465350" class="editable-item section-item current-position">
<div id="experience-312465350-view">
<header>
<h5 class="experience-logo" aria-hidden="true">
<a href="http://www.linkedin.com/company/1288?trk=ppro_cprof">
<img class="lazy-load" src="https://static.licdn.com/scds/common/u/img/spacer.gif" data-li-src="https://media.licdn.com/media/p/5/005/00e/318/39cf760.png" alt="">
</a>
</h5>
<h4>
<a href="https://www.linkedin.com/title/president-%26-ceo?trk=pprofile_title" title="Learn more about this title">President & CEO</a>
</h4>
<h5>
<a href="http://www.linkedin.com/company/1288?trk=ppro_cprof" dir="auto">Yahoo!</a>
</h5>
</header>
<span class="experience-date-locale">
<time>July 2012</time> – Present (3 years 1 month)<span class="locality">Sunnyvale, CA</span>
</span>
</div>
</div>
<div id="experience-297858215" class="editable-item section-item current-position">
<div id="experience-297858215-view">
<header>
<h5 class="experience-logo" aria-hidden="true">
<a href="http://www.linkedin.com/company/2646?trk=ppro_cprof">
<img class="lazy-load" src="https://static.licdn.com/scds/common/u/img/spacer.gif" data-li-src="https://media.licdn.com/media/p/2/000/1d0/30a/07cd201.png" alt="">
</a>
</h5>
<h4>
<a href="https://www.linkedin.com/title/board-of-directors?trk=pprofile_title" title="Learn more about this title">Board of Directors</a>
</h4>
<h5>
<a href="http://www.linkedin.com/company/2646?trk=ppro_cprof" dir="auto">Walmart</a>
</h5>
</header>
<span class="experience-date-locale">
<time>June 2012</time> – Present (3 years 2 months)</span>
</div>
</div>
<script>$(function(){if(LI.Dialog){LI.Dialog().submitEvent.subscribe(function(type,args){var positionID;if(args[1]=='removePositionDialog'&&WebTracking&&WebTracking.trackUserAction){if(args[2]&&args[2].positionID){positionID=args[2].positionID;}WebTracking.trackUserAction('nprofile-edit-position-remove-submit',{positionID:positionID});}});}});</script>
</div>
"""
soup = BeautifulSoup(html_doc,'html.parser')
print soup.time.string
但是当我试图获得所有时间时,我只得到一个。 我怎么能解决我的问题?
提前致谢。
答案 0 :(得分:1)
您不应该使用.time
,因为这样只会获得这些元素的内部内容 - 因此,文本" – Present (3 years 2 months)"
不会被包含。
而是搜索具有experience-date-locale
类的元素,该类将是包含所需文本的span
。然后,使用BeautifulSoup
的{{1}}仅获取其文字内容(.text
和<time>
将不会呈现。)
为了完整起见,这是我的代码(未经测试):
</time>
答案 1 :(得分:1)
您需要使用<span>
来获取数据。使用<time>
的方法只会为您提供内部文字,但</time>
之外的文字不会被打印出来,因为您的错误。
为此,我们只需使用<span>
和属性experience-date-locale
。
使用以下代码段解析您的数据:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)
all_spans = soup.find_all('span', 'experience-date-locale')
parsed_content = []
for span in all_spans:
parsed_content.append(span.text)