我试着在这里搜索,但老实说,找不到答案,因为使用Selenium应该很容易做到这一点,但由于性能是一个重要因素,所以我考虑使用Beautifulsoup
场景:我需要根据用户输入以随机方式生成的不同项目的价格,请参见下面的代码:
<div class="sk-expander-content" style="display: block;">
<ul>
<li>
<span>Third Party Liability</span>
<span>€756.62</span>
</li>
<li>
<span>Fire & Theft</span>
<span>€15.59</span>
</li>
</ul>
</div>
如果这些选项是静态的,并且在html中总是显示在相同的位置,那么就很容易获取价格,但是由于这些选项可以放在div sk-expander-content
中的任何位置,我不确定如何以动态的方式找到它们
最好的方法是编写一个方法,在我们正在寻找的跨度文本中传递,并以欧元返回值。span标记的结构始终相同,第一个span始终是项目的名称,第二个span始终是价格
首先想到的是以下代码,但我不确定这是否足够健壮,或者是否有意义:
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
div_i_need = soup.find_all("div", class_="sk-expander-content")[1]
def price_scraper(text_to_find):
for el in div_i_need.find_all(['ul', 'li', 'span']):
if el.name == 'span':
if el[0].text == text_to_find:
return(el[1].text)
非常感谢你的帮助
输出:
使用正则表达式
输出:
更新: 如果要获取第一个节点值,请使用
find()
而不是find_all()
相关问题 更多 >
编程相关推荐