2017-03-25 43 views
2

我正在使用bs4與python並試圖從網頁中獲取數據。 Link我在我想要的信息上使用了檢查元素,但都具有相同的標記類。Web刮,如何使用python中的bs4從兩個相同的標籤中提取數據

   <a class="cell__value" data-tracker-action="click" data-tracker-label="information_technology.01" href="/markets/sectors/information-technology"> 
      Information Technology 
      </a> 
      </div> 
      <div class="cell__return"> 
      <div class="cell__label"> 
      % Price Change 
      </div> 
      <div class="cell__value" data-type="better"> 
      +0.05% 
      </div> 
      </div> 
      </div> 
      <div class="cell"> 
      <div class="cell__name"> 
      <div class="cell__label"> 
      Industry 
      </div> 
      <a class="cell__value" data-tracker-action="click" data-tracker-label="information_technology.02" href="/markets/sectors/information-technology"> 
      Software &amp; Services 
      </a> 
      </div> 
      <div class="cell__return"> 
      <div class="cell__label"> 
      % Price Change 
      </div> 
      <div class="cell__value" data-type="worse"> 
      -0.04% 
      </div> 
      </div> 
      </div> 
     </div> 

我這樣做是這樣的:

sect= soup.find("a",{"data-tracker-label":"information_technology.01"}) 
print sect.text 
sect_per= soup.find("div",{"data-type":"worse"or"better"}) 
print sect_per.text 
ind=soup.find("a",{"data-tracker-label":"information_technology.02"}) 
print ind.text 
ind_per=soup.find("div",{"div",{"data-type":"worse"or"better"}) 
print ind_per 

打印ind_per打印ind_per是給我,因爲同一類標籤相同的結果

我需要分別-0.04%提取+ 0.05%。

請建議我這樣做。

回答

0

or返回左操作如果左操作數是真值(字符串非空字符串):

>>> "worse" or "better" 
'worse' 

所以,下面一行:

ind_per = soup.find("div",{"div",{"data-type":"worse" or "better"}) 

,基本上是做同樣的附:

ind_per = soup.find("div",{"div",{"data-type":"worse"}) 

需要分別對它們進行查詢:

ind_per = soup.find("div",{"div",{"data-type": "worse"}) 
print ind_per 
ind_per = soup.find("div",{"div",{"data-type": "better"}) 
print ind_per 

或使用for循環:

for data_type in ('worse', 'better'): 
    ind_per = soup.find("div",{"div",{"data-type": data_type}) 
    print ind_per 
2
soup = BeautifulSoup(example, "html.parser") 

for cell in soup.find_all("div", class_="cell"): 
    name = "" 
    namecell = cell.find("a", class_="cell__value", text=True) 
    if namecell is not None: 
     name = namecell.get_text(strip=True) 
    price_chage = cell.find("div", class_="cell__value").get_text(strip=True) 
    print ("%s: Price Change: %s" % (name, price_chage)) 

,輸出:

Information Technology: Price Change: +0.05%

Software & Services: Price Change: -0.04%

可以保存作進一步處理值。

+0

錯誤:name = cell.find(「a」,class _ =「cell__value」)。get_text(strip = True) AttributeError:'NoneType'對象沒有屬性'get_text' –

+0

感謝您的支持。萬分感謝! –

+0

還有一個問題@Zroq如果可以幫忙的話。如何轉換「截至7:05 AM EDT 3/24/2017」至yyyy/MM/dd hh:mm:ss在python中 –

相關問題