2016-01-22 28 views
1

我正在處理我自己的一個小項目,並嘗試將我的想法包圍在網絡報廢中。如何從Python中選擇性地從表中刪除數據2

我正在使用Python 2和BeautifulSoap模塊(但也嘗試了其他模塊,嘗試使用re模塊,其他模塊)。

簡而言之,鑑於網站:http://www.bankofcanada.ca/rates/exchange/daily-closing-past-five-day/我想收集有關每種貨幣匯率的信息,但代碼更靈活。

這是我的例子:

import urllib2 
from bs4 import BeautifulSoup 
import string 
import re 

myurl = 'http://www.bankofcanada.ca/rates/exchange/daily-closing-past-five-day/' 
soup = BeautifulSoup(urllib2.urlopen(myurl).read(), "lxml") 

dataTables = soup.find_all('td') 

brandNewList = [] 

for x in dataTables: 
    text = x.get_text().strip() 
    brandNewList.append(text) 
    #print text 

for index, item in enumerate(brandNewList): 
    if item == "U.S. dollar (close)": 
     for item in brandNewList[index:6]: 
      print item 

它顯示:

$ python crawler.py 
U.S. dollar (close) 
1.4530 
1.4557 
1.4559 
1.4490 
1.4279 

所以,你可以看到,我可以顯示,放棄了「TD」標籤對應於每個貨幣的數據;如果我將'th'與'td'標籤結合使用,我可以得到更具體的結果。 但是,如果我真的不想指定確切字符串「美元(關閉)」,如何使腳本模式適用於不同的網站? 例如,我想從終端輸入「美國」/「我們」作爲參數,並且該腳本將獨立返回與美元相對應的值,以瞭解不同網站上的列是如何命名的?

另外,我是一個Python的初學者,所以你可以,請告訴我更簡潔的方式重寫我的網絡爬蟲?感覺就像我用一種「愚蠢」的方式寫的,主要是:)

回答

0

我怎樣才能使腳本模式適應不同的網站?

不同的網站有不同的真正標記,這幾乎是不可能使一個普遍和你的情況可靠定位機制。根據您想要查找的網站數量,您可以使用EAFP approach來循環查找不同的定位功能,直到您成功獲得貨幣匯率。

請注意,某些資源提供公共或私有API,您並不需要刮掉它們。

順便說一句,您可以通過定位U.S. dollar (close)標籤和獲取following td siblings提高代碼:

us_dollar_label = soup.find("td", text="U.S. dollar (close)") 
rates = [td.get_text() for td in us_dollar_label.find_next_siblings("td")] 
+0

或者,冷靜,之前我沒有聽說EAFP;今天學到了一些新東西:),謝謝 –

+0

或者,這很整潔 - 感謝這段代碼;現在,這看起來更像是一種獲取信息的python方式 –