使用BeautifulSoup解析特定数据

2024-09-28 21:55:33 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个网页,其中有表格数据。以下是该表的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代码。你知道吗


Tags: 代码inlabtrclasstdiihref
2条回答

如果你这样做了呢 如果SEF00在ii中:

它可能只打印SEF00

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都列在一个列表里,然后切分

相关问题 更多 >