......<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提取出来再处理是个好办法。
如果有帮助,请点个采纳哦~