使用Beautiful Soup

时间:2016-11-18 13:25:08

标签: python html beautifulsoup

所以我有一个网页,里面有表格数据。以下是该表的HTML代码:

    <table class="confluenceTable">
    <tbody>
       <tr>
          <th class="confluenceTh">
             <p>Prefix</p>
          </th>
          <th class="confluenceTh">
             <p>Group</p>
          </th>
          <th class="confluenceTh">
             <p>Contact</p>
          </th>
          <th class="confluenceTh">
             <p>Dev/Test Lab</p>
          </th>
          <th class="confluenceTh">
             <p>Performance</p>
          </th>
       </tr>
       <tr>
          <td class="confluenceTd">
             <p> </p>
          </td>
          <td class="confluenceTd">
             <p> </p>
          </td>
          <td class="confluenceTd">
             <p> </p>
          </td>
       </tr>
       <tr>
          <th class="confluenceTh">
             <p> </p>
          </th>
          <th class="confluenceTh">
             <p> </p>
          </th>
          <th class="confluenceTh">
             <p> </p>
          </th>
       </tr>
       <tr>
          <td class="confluenceTd">
             <p>SEF00</p>
          </td>
          <td class="confluenceTd">
             <p>APTRA Vision</p>
          </td>
          <td class="confluenceTd">
             <p> </p>
          </td>
          <td class="confluenceTd">
             <p><a href="/somepage">VCD Lab</a> , <a href="/somepage">Test Lab</a></p>
          </td>
          <td class="confluenceTd">
             <p><a href="/display">Perf Lab</a></p>
          </td>
       </tr>
       <tr>
          <td class="confluenceTd">
             <p>SEF01</p>
          </td>
          <td class="confluenceTd">
             <p>In-Person Bill Payment</p>
          </td>
          <td class="confluenceTd">
             <p>Swamy PKV</p>
          </td>

如何格式化我的Python代码,以便我只获取Prefix和Group列下的所有数据。到目前为止,我已经尝试过这个:

ii=1
data=requests.get(url,auth=(username,password))
sample=data.content
soup=BeautifulSoup(sample,'html.parser')
for row in soup.find_all('tr')[1:154]:
     datatocheck.append(row.get_text(separator='\t'))
while(ii<=152):
        print datatocheck[ii][0:30]
        ii+=1

这给了我以下输出:

SEF00   APTRA Vision        VCD Lab  
SEF01   In-Person Bill Payment  S

但我只想要SEF00(前缀)和APTRA Vision(群组),SEF01In-Person Bill Payment。不是其他专栏。

另外,我无法更改HTML代码。

2 个答案:

答案 0 :(得分:0)

如果你这样做怎么样?     如果是ii中的SEF00:

它可能只打印SEF00

答案 1 :(得分:0)

soup = BeautifulSoup(html, 'lxml')

for row in soup.find_all('tr')[3:]:   # remove empty row
    tds = [i.get_text(strip=True) for i in row.find_all('td')]
    print(tds[0],tds[1])

出:

SEF00 APTRA Vision
SEF01 In-Person Bill Payment

只需获取行中的所有td,将它们放入列表中,然后将其切片