网页表中的关键字都相似,python如何进行数据清洗,且不错位

......<td align="center"><div align="center">高良涧</div></td> <td align="center"><div align="center">50916400</div></td> <td align="center"><div align="center">2021-08-20 15:55:00</div></td> <td colspan="2" align="center"><div align="center">12.95</div></td> <td align="center"><div align="center"></div></td> <td align="center"><div align="center">六垛南闸</div></td> <td align="center"><div align="center">51002250</div></td> <td align="center"><div align="center">2021-08-20 15:55:00</div></td> <td align="center"><div align="center">2.70</div></td> <td align="center"><div align="center">2.20</div></td> <td align="center"><div align="center"></div></td> <td align="center"><div align="center">运西电站</div></td> <td align="center"><div align="center">51002102</div></td> <div align="center">2021-08-20 15:55:00</div></td> <td colspan="2"><div align="center">7.12</div></td> </tr> <td height="13"><div align="center"></div></td> <td align="center"><div align="center">高良涧闸(闸上游)</div></td>....
爬取网页表格数据,如加粗部分,数据需要对应起来,最好如此 高良涧-50916400-20210820 15:55:00-12.95,数据清洗后能对应起来,第一次提问,可能描述不清。

使用bs4对网页内容解析,用panda写成数据框,存入excel中,数据相对工整。
当数据比较多时,最好用pd.read_html()获取表格数据。

import bs4
import pandas 
t='''
<td align="center"><div align="center">高良涧</div></td> <td align="center"><div align="center">50916400</div></td> <td align="center"><div align="center">2021-08-20 15:55:00</div></td> <td colspan="2" align="center"><div align="center">12.95</div></td> <td align="center"><div align="center"></div></td> <td align="center"><div align="center">六垛南闸</div></td> <td align="center"><div align="center">51002250</div></td> <td align="center"><div align="center">2021-08-20 15:55:00</div></td> <td align="center"><div align="center">2.70</div></td> <td align="center"><div align="center">2.20</div></td> <td align="center"><div align="center"></div></td> <td align="center"><div align="center">运西电站</div></td> <td align="center"><div align="center">51002102</div></td> <div align="center">2021-08-20 15:55:00</div></td> <td colspan="2"><div align="center">7.12</div></td> </tr> <td height="13"><div align="center"></div></td> <td align="center"><div align="center">高良涧闸(闸上游)</div></td>'''
tx=bs4.BeautifulSoup(t,'lxml')
a=[td.text for td in tx.select('td div') if td.text!='']
b=[a[:4],a[4:9],a[9:12],a[12:]]#因数据不规整,通过切片获取每行数据,这是对特定数据进行的处理,通用做法是遍历子节点比如tr进行获取行数据。
df=pd.DataFrame(b)  
print(df) 
df.to_excel('t820.xlsx',index=False,header=None) 
0         1                    2      3     4
0        高良涧  50916400  2021-08-20 15:55:00  12.95  None
1       六垛南闸  51002250  2021-08-20 15:55:00   2.70  2.20
2       运西电站  51002102                 7.12   None  None
3  高良涧闸(闸上游)      None                 None   None  None

如有帮助,请点采纳。

如果是这四种数据严格循环对匹配结果进行每四个元素一组的分组

a =re.findall(单个标签pattern,数据)
i=0
while i in len(a):
  str1=''
  str1+=a.group[i]
  i++
  str1+=a.group[i]
  i++
  str1+=a.group[i]
  i++
  str1+=a.group[i]
  i++
  result.append(str1)

这种表格格式的数据应该挺工整的把,
直接xpath提取出来再处理是个好办法。

如果有帮助,请点个采纳哦~