2016-04-22 83 views
0

我有一些代碼,對使用BS4提取對數據從一個HTML文件:如何從HTML文件中提取特定數據?

from bs4 import BeautifulSoup 
readfile = """ 
<html> 
    <head> 
    <meta name="generator" 
    <title></title> 
    </head> 
    <body> 

    <table align="center" border="1" cellpadding="0" cellspacing="1" width="650"> 
    <tr> 
    <td> 
    <font size="1"> Title1</font> 
    <br /> </td> 
    <td> 
    <font size="1"> TItle2 type</font> 
    <br /> </td> 
    <td> 
    <font size="1"> Title3</font> 
    <br />  
    <font size="2">value1</font></td> 
    <td> 
    <font size="1"> Title4 ID</font> 
    <br />  
    <font size="2">value2</font></td> 
    </tr> 
""" 

soup = BeautifulSoup(readfile, "html.parser") 
tables = soup.findChildren('table') 

for title in soup.find_all("font", {"size": "1"}): 
    value = title.find_next_sibling("font", {"size": "2"}) 
    print (title.text, ":", value.text if value else "No Value") 

比方說,我總共有30行。我只需要4個值對,這樣我就可以將它們插入到rdbms中。

我應該嘗試使用大小列表:1值我想要的大小:2值?在BS4上查了一些例子,它並沒有陷入。 謝謝

+0

你想要的輸出是什麼? – alecxe

回答

0

如果你想要得到一個RDBMS的前四對,那麼給出一個計數變量和條件應該就足夠了,就像下面一樣。

from bs4 import BeautifulSoup 
readfile = open("html.parser",'r') 
soup = BeautifulSoup(readfile) 

tables = soup.findChildren('table') 

count = 0 
for i in soup.find_all("font", {"size": "1"}): 
    value = i.find_next_sibling("font", {"size": "2"}) 
    if value is not None and count < 4: 
     print (i.text, ":", value.text if value else "No Value") 
     count = count + 1 

希望這會有所幫助。

+0

如果我想要第一個4,這將是答案。而且我應該更具體。那是我的錯。如何從30個值列表中選擇特定值。這些對每個文件都是一樣的。再次感謝! – Dave

+0

你能更具體嗎?你可以粘貼你想要解析的確切html,以及它需要什麼。原因是html中的每個標籤都會通過一些唯一的id或attribute與另一個標籤區分開來。所以對我來說很簡單如果你粘貼了你正在嘗試解析的確切的HTML,那麼就要進行處理。 –

+0

@Akayla:不幸的是代碼是專有的,所以我無法分享它。我可以這樣說:HTML是一張大桌子。所以他們使用TD創建表TR,創建行。他們沒有使用TC來命名細胞。所以這就是爲什麼我必須使用font:size來查找內容。謝謝你的協助! – Dave

相關問題