2016-11-25 35 views
1

我是新手,在用robobrowser做表單提交後,試圖解析一個網站。我收到了正確的數據(我可以查看它:print(browser.parsed)),但在分析時遇到問題。在網頁的源代碼的相關部分看起來是這樣的:用robobrowser和beautifulsoup解析網頁

<div id="ii"> 
<tr> 
    <td scope="row" id="t1a"> ID (ID Number)</a></td> 
    <td headers="t1a">1234567 &nbsp;</td> 
</tr> 
<tr> 
    <td scope="row" id="t1b">Participant Name</td> 
    <td headers="t1b">JONES, JOHN       &nbsp;</td> 
</tr> 
<tr> 
    <td scope="row" id="t1c">Sex</td> 
    <td headers="t1c">MALE &nbsp;</td> 
</tr> 
<tr> 
    <td scope="row" id="t1d">Date of Birth</td> 
    <td headers="t1d">11/25/2016 &nbsp;</td> 
</tr> 
<tr> 
    <td scope="row" id="t1e">Race/Ethnicity</a></td> 
    <td headers="t1e">White     &nbsp;</td> 
</tr> 

,如果我做

in: browser.select('#t1b") 

我得到:

out: [<td id="t1b" scope="row">Inmate Name</td>] 

代替JONES,JOHN。

我已經能夠得到相關數據的唯一途徑是這樣做的:

browser.select('tr') 

這將返回各29的列表,每個「TR」,我可以轉換爲文本,搜索相關信息。

我也試着創建BeautifulSoup對象:

x = browser.select('#ii') 
soup = BeautifulSoup(x[0].text, "html.parser") 

,但它失去了所有標籤/ IDS,所以我無法弄清楚如何在其中進行搜索。

有沒有一種簡單的方法讓它循環遍歷每個元素'tr'並獲取實際數據而不是標籤作爲反對重複轉換爲字符串變量並搜索它?

感謝

回答

0

獲取所有的 「標籤」 td元素,並得到next td sibling value收集成果轉化的字典:

from pprint import pprint 
from bs4 import BeautifulSoup 

data = """ 
<table> 
    <tr> 
     <td scope="row" id="t1a"> ID (ID Number)</a></td> 
     <td headers="t1a">1234567 &nbsp;</td> 
    </tr> 
    <tr> 
     <td scope="row" id="t1b">Participant Name</td> 
     <td headers="t1b">JONES, JOHN       &nbsp;</td> 
    </tr> 
    <tr> 
     <td scope="row" id="t1c">Sex</td> 
     <td headers="t1c">MALE &nbsp;</td> 
    </tr> 
    <tr> 
     <td scope="row" id="t1d">Date of Birth</td> 
     <td headers="t1d">11/25/2016 &nbsp;</td> 
    </tr> 
    <tr> 
     <td scope="row" id="t1e">Race/Ethnicity</a></td> 
     <td headers="t1e">White     &nbsp;</td> 
    </tr> 
</table> 
""" 

soup = BeautifulSoup(data, 'html5lib') 

data = { 
    label.get_text(strip=True): label.find_next_sibling("td").get_text(strip=True) 
    for label in soup.select("tr > td[scope=row]") 
} 
pprint(data) 

打印:

{'Date of Birth': '11/25/2016', 
'ID (ID Number)': '1234567', 
'Participant Name': 'JONES, JOHN', 
'Race/Ethnicity': 'White', 
'Sex': 'MALE'} 
+0

不可思議的 - 非常感謝! – MikeD