從大型表格中,我想讀取第5,10,15,20行...使用BeautifulSoup。我該怎麼做呢? findNextSibling是一個增長計數器嗎?使用BeautifulSoup獲取第n個元素
14
A
回答
31
你也可以使用findAll
獲取列表中的所有行之後,僅僅用切片語法訪問您需要的元素:
rows = soup.findAll('tr')[4::5]
1
作爲一個通用的解決方案,你可以轉換表到嵌套列表和迭代...
import BeautifulSoup
def listify(table):
"""Convert an html table to a nested list"""
result = []
rows = table.findAll('tr')
for row in rows:
result.append([])
cols = row.findAll('td')
for col in cols:
strings = [_string.encode('utf8') for _string in col.findAll(text=True)]
text = ''.join(strings)
result[-1].append(text)
return result
if __name__=="__main__":
"""Build a small table with one column and ten rows, then parse into a list"""
htstring = """<table> <tr> <td>foo1</td> </tr> <tr> <td>foo2</td> </tr> <tr> <td>foo3</td> </tr> <tr> <td>foo4</td> </tr> <tr> <td>foo5</td> </tr> <tr> <td>foo6</td> </tr> <tr> <td>foo7</td> </tr> <tr> <td>foo8</td> </tr> <tr> <td>foo9</td> </tr> <tr> <td>foo10</td> </tr></table>"""
soup = BeautifulSoup.BeautifulSoup(htstring)
for idx, ii in enumerate(listify(soup)):
if ((idx+1)%5>0):
continue
print ii
運行的是......
[[email protected] ~]$ python testme.py
['foo5']
['foo10']
[[email protected] ~]$
1
另一種選擇,如果你喜歡原始的HTML ...
"""Build a small table with one column and ten rows, then parse it into a list"""
htstring = """<table> <tr> <td>foo1</td> </tr> <tr> <td>foo2</td> </tr> <tr> <td>foo3</td> </tr> <tr> <td>foo4</td> </tr> <tr> <td>foo5</td> </tr> <tr> <td>foo6</td> </tr> <tr> <td>foo7</td> </tr> <tr> <td>foo8</td> </tr> <tr> <td>foo9</td> </tr> <tr> <td>foo10</td> </tr></table>"""
result = [html_tr for idx, html_tr in enumerate(soup.findAll('tr')) \
if (idx+1)%5==0]
print result
運行的是......
[[email protected] ~]$ python testme.py
[<tr> <td>foo5</td> </tr>, <tr> <td>foo10</td> </tr>]
[[email protected] ~]$
1
這可以用select
輕鬆完成美麗的湯,如果你知道行號來選擇。 (注:這是在BS4)
row = 5
while true
element = soup.select('tr:nth-of-type('+ row +')')
if len(element) > 0:
# element is your desired row element, do what you want with it
row += 5
else:
break
相關問題
- 1. Python BeautifulSoup刮第n種元素
- 2. 使用jquery獲取元素的第n個子值
- 3. 使用XmlArrow從頁面獲取第n個元素?
- 4. 使用Xpath和Jquery獲取第N個元素
- 5. 獲取元素相對於第n個父元素的位置
- 6. 獲得集合的第n個元素
- 7. 通過base px * n第n個元素縮進每個第n個元素
- 8. 獲取第n個素數的Javascript
- 9. 從Observable中獲取每個第N個元素
- 10. 獲取對象中某個鍵的第n個元素
- 11. Zen第n個元素
- 12. 使用BeautifulSoup獲取下一個UL元素
- 13. 使用公式獲得第n個輸入元素的值
- 14. 使用lxml/XPath獲得第n個元素失敗
- 15. 獲取特定元素(N,)
- 16. 獲取<table>元素的第n個innerHTML的動態
- 17. 獲取元素的第n個孩子數量純JavaScript
- 18. 獲取查詢中第一個N元素的平均值LARAVEL
- 19. 如何獲取第n個計數的NSArray元素?
- 20. Android - Java - 獲取JSONObject中的第n個元素
- 21. 獲取集合的第n個元素在Cypher支架
- 22. 從VBA字符串數組中獲取第n個元素
- 23. Oracle SQL獲取第n個元素正則表達式
- 24. 獲取第n個元素(如果它不包含類)
- 25. 從Haskell中的二叉樹中獲取第N個元素
- 26. 獲取Rafael.js的第n個元素的x座標文本元素的集合
- 27. 獲取數組的前N個元素?
- 28. 獲取std :: list的前N個元素?
- 29. MySql:獲取至少N個元素
- 30. 在等待中使用Selenium中的Xpath獲取第n個元素的出現
這很乾淨。注意find all方法返回一個數組,所以這很好。 – JasTonAChair 2015-11-06 02:51:00