今天想抓取国家统计局上的表格想画图来着
表格的html下载好之后,正则表达式却出了问题
我使用的是grep的正则表达式
这里就有一个问题了因为linux文件每行末尾都有一个$号准确的来说就是它只能按行来匹配
![](https://img.haomeiwen.com/i14774900/774e8d1099dabd66.png)
如果咱们的标签写的好看一些就不会在同一行,然后我就一直在发愁使用百度上匹配回车换行的方法
'[\s\S]*'总是不成功!
![](https://img.haomeiwen.com/i14774900/48d6ed87b8908838.png)
再看看grep为什么不成功!主要是它按行来进行匹配的
![](https://img.haomeiwen.com/i14774900/f86a8cfb6ea570ed.png)
算了我也懒得管什么换行符了~
看它不爽好久了直接用tr命令换掉成空格!
接下来所有的标签都在同一行了,我们吧想要的标签内容后面加个换行符,方便待会的提取
例如:
sed -e 's/\(<tr[^>]*>\)/\1\n/g' -e 's/\(<\/tr[^>]*>\)/\1\n/g'
把每一行的内容独立成一行
再把列标签抓出来,然后删除所有标签sed -e 's/<[^>]*>//g'
就得到我们想要的内容了
最后一气呵成!
cat index.php |tr "\r\n" " " |grep -e "<tr[^>]*>.*</tr>"|sed -e 's/\(<tr[^>]*>\)/\1\n/g' -e 's/\(<\/tr[^>]*>\)/\1\n/g' |grep "<td"|sed -e 's/<[^>]*>//g' |awk '{print $1,$2,$3}'
![](https://img.haomeiwen.com/i14774900/93fe46342b431309.png)
网友评论