这两天在整理资料的时候遇到一个难题,网页上的表格内容想复制下来,但是复制下来的内容全都乱了!要是按照表格内容一点一点的自己做,那可太麻烦了!就动脑筋看看有什么办法能够解决这个问题。
处理表格网页上呈现的表格形式大体分为三种:
最简单的就是直接在网页上用table标签显示的固定数据,这种网页表格内容不随网页的刷新而刷新,内容是固定的。稍微复杂的是用table标签显示数据,但数据是随着网页刷新或者用户不同而呈现不同数据。这样的表格数据获取需要分析提交链接请求,参数等,比较复杂。相比以上更简单的一种是将excel表格保存为网页,然后供用户浏览。这样我们直接将这个网页下载下来,用excel打开即可(这种形式可以参考国家统计局里面的表格)。该文章所介绍的方法可以解决第一,二种形式的表格!
1.html解析库lxml
还是先介绍一下用到的重点库,这里主要用到lxml库。它是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
简单来说它就干了一件事,根据某种规则从html文件这些标签中找包含你指定内容的标签,然后获取标签里面的内容。这种规则是怎么定义呢?这里不得不说XPath解析方式,通过它提供的语法,可以快速定位到标签,然后获得里面的内容。
小伙伴可能有疑问了,XPath语法不会怎么办?没关系,浏览器来帮助你。
XPath获取在我们想要获取内容的地方,右击鼠标选择检查,然后就会打开开发者工具将想要获取的内容在html中定位出来,然后再定位的那个位置右击鼠标,选择Copy--CopyXpath就可以获得这个内容的Xpath,然后再通过lxml解析就可以得到你想要的内容了。
2.“复制”表格,上代码!
1.获取网页
为了通用解决第一种和第二种形式的表格问题,我们需要将表格的内容完全在网页上展现出来(对于第二种形式,不断发起请求,直到网页上显示完你想要的全部表格信息),然后Ctrl+s将网页保存下来。这样保存下来的网页上就包含表格的所有信息。
下载下来的网页2.对下载下来的html进行解析
我们先利用浏览器自带的CopyXpath获取到内容的Xpath,然后利用lxml库中的xpath方法对Xpath进行解析。
在xpath路径后面加上text()表示提取标签里面的内容,因为标题信息和数字信息的Xpath不一样,所以这里将标题信息和数字信息分别进行提取,返回来两个列表header_result,row_result(标题信息即为每行开头第一个)
但是获取到的内容包含空格,换行符等不必要的符号,接下来对获取到的内容进行清洗,去除这些符号。
清洗内容根据这个表格的特性,我们将标题信息和数字信息分别进行了提取,但是写入文件的时候是按照表格一行一行写入的,这就需要我们将标题信息和数字信息进行关联。
标题与数字信息关联关联后存入到row_result_clear_total列表的信息就是一行一行的,每一行包含标题和具体的数字信息。
关联后最后将这个列表信息存入到.csv文件中
存入csv这样我们就把htm里面包含的表格信息全部“复制”出来了,用excel表格打开csv文件,可以看到全部的表格信息。可以看到,这样出来的表格格式数据都没有乱,这样几行代码可以“复制”上百行上千行或者更多的网页表格,省时省力!
结果谢谢大家阅读,要是觉得涨了知识,能不能点赞一下,收藏一下,以备不时之需呀!
感兴趣的小伙伴可以