2015-12-16 60 views
3

我知道我想要做的事很簡單,但它讓我感到悲傷。我想使用BeautifulSoup從HTML中獲取數據。要做到這一點,我需要正確使用.find()功能。這裏是我正在使用的HTML:瞭解美麗的湯的Find()功能

<div class="audit"> 

    <div class="profile-info"> 
     <img class="profile-pic" src="https://pbs.twimg.com/profile_images/471758097036226560/tLLeiOiL_normal.jpeg" /> 
     <h4>Ed Boon</h4> 
     <span class="screen-name"><a href="http://www.twitter.com/noobde" target="_blank">@noobde</a></span> 
    </div> 

     <div class="followers"> 
      <div class="pie"></div> 
      <div class="pie-data"> 
       <span class="real number" data-value=73599>73,599</span><span class="real"> Real</span><br /> 
       <span class="fake number" data-value=32452>32,452</span><span class="fake"> Fake</span><br /> 
       <h6>Followers</h6> 
      </div> 
     </div> 
     <div class="score"> 
      <img src="//twitteraudit-prod.s3.amazonaws.com/dist/f977287de6281fe3e1ef36d48d996fb83dd6a876/img/audit-result-good.png" /> 
      <div class="percentage good"> 
       69% 
      </div> 
      <h6>Audit score</h6> 

我想要的值73599data-value=7359932352data-value=3245269%percentage good

利用過去的代碼和網上的例子,這是我到目前爲止有:

RealValue = soup.find("div", {"class":"real number"})['data-value'] 
FakeValue = soup.find("audit", {"class":"fake number"})['data-value'] 

雙方至今沒有效果。我不知道如何製作搜索以便拉動69%號碼。

回答

2

soup.find("div", {"class":"real number"})['data-value']

在這裏,你正在尋找一個div元素,但span在您的示例HTML數據中的 「實數」 班,嘗試改爲:

soup.find("span", {"class": "real number", "data-value": True})['data-value'] 

在這裏,我們也正在檢查data-value屬性的存在。


發現具有 「實數」 或 「假數字」 類的元素,你可以做一個CSS selector

for elm in soup.select(".real.number,.fake.number"): 
    print(elm.get("data-value")) 

要獲取69%值:

soup.find("div", {"class": "percentage good"}).get_text(strip=True) 

或者,CSS選擇器:

soup.select_one(".percentage.good").get_text(strip=True) 
soup.select_one(".score .percentage").get_text(strip=True) 

或者,定位具有Audit score文本h6元素,然後獲取preceding sibling

soup.find("h6", text="Audit score").previous_sibling.get_text(strip=True) 
+0

太棒了!那正是我所期待的。案件結案。 – OneManRiot