2017-05-05 15 views
1
for div in soup.find_all('table', class_="W(100%)"): 
     for y in div.find_all('td'): 
      print (y.text) 

返回的輸出:作爲元組返回我的打印輸出?

Previous Close 
38.08 
Open 
38.23 
Bid 
37.67 x 100 
Ask 
38.16 x 500 
Day's Range 
37.35 - 38.25 
52 Week Range 
23.50 - 40.92 
Volume 
29,152 
Avg. Volume 
118,446 
Market Cap 
1.66B 

我想輸出回來作爲

(Previous Close, 38.08) 
(Open, 38.23) 
(Bid, 37.67 x 100) 

老實說,我不知道該如何處理這個。 我想過實現一個奇數和偶數的計數器,但即使如此,我如何將下一個條目加入前一個條目?

+1

爲什麼不循環'tr's然後打印相應的'td's? –

+0

如果你總是想要兩個元素,爲什麼不把它附加到列表並打印列表,如果它的len()是== 2? (並在打印後清除列表) – dede

+0

@dede我明白你的意思了。我會嘗試一下,看看我能否正確實施。 – Moondra

回答

2

查找<tr>元素),而不是單元格;然後你可以每行組細胞:

for row in soup.select('table.W(100%) tr'): 
    columns = tuple(cell.text for cell in row.find_all('td')) 
    print(columns) 

我用CSS select() method簡明地要求所有錶行了給定的表。

+0

謝謝。這似乎返回一個非常乾淨的輸出。我會查看代碼並查看是否有任何問題。 – Moondra

2

您可以通過遍歷每個偶數索引並將該元素和後一個索引並將它們放入一對來完成此操作。下面將工作作爲發電機:

def pairs(array): 
    for i in range(0, len(array), 2): 
     yield (array[i], array[i + 1]) 

另外,如果你想在函數返回對的列表:

def pairs(array): 
    output = [] 
     for i in range(0, len(array), 2): 
      output.append((array[i], array[i + 1]) 

或者,更簡單(但不讀)的程序:

def pairs(array): 
    return map(lambda index: (array[index], array[index + 1]), range(0, len(array), 2)) 

如果你只是想以這種格式輸出它,有一種不同的方式來做到這一點直接,除了將其轉換爲元組和輸出那些:

def outputPairs(array): 
    for i in range(0, len(array), 2): 
     print("(" + str(array[i]) + ", " + str(array[i + 1]) + ")") 
+0

您可能想學習[迭代列表中的每兩個元素](// stackoverflow.com/q/5389507)以獲取更多技巧。 –

+0

謝謝,我也會仔細考慮一下。 – Moondra