简单的记录一下,最近遇到的一些字段处理上的问题。
在使用爬虫抓取数据时,有时会抓取到一些让人很无奈的数据,处理方式也需要你做一些不同的处理。
因为我用的框架是自己拼接sql
语句,也就是匹配到页面内容后(一般用正则匹配),给字段内容的两端添加单引号,来实现拼接,在这种情况下就会出现一些很有意思的事情,例如字段内容自带引号(包括单引号和双引号,Mysql都识别)。
举例说明:
name | telephone |
---|---|
王子 | 123456789 |
I’am | 987765321 |
角”小王 | 1275376215 |
小周\/ | 237858763 |
1\小李 | 2342342 |
O(∩_∩)O哈哈~ | 32213124 |
以上内容都是网页上实际显示的内容,当我们自己拼接字段时,就会出现这样'I'ma'
,这样'角"小王'
,还有这样'小周\'
,这里说明的只是部分并不完全,请读者自己类比。
这里解释一下各字段的结果,第一种情况下,sql
语句多了一个单引号,这样的语句执行时会出错,第二个类似(我当时遇到这种问题,但目前看来直接执行sql语句并没有影响),第三种情况下\
会把单引号转义,这是sql
语句就少了一个单引号,当出现以上的类似情况时,我们就需要去自己转义字段内部的特殊字符,以避免出现无法插入的情况。
关于转义,这也是一个很坑的问题,因为本身在java语言中\
也需要转义,所以很多时候转义字符数量就会很奇怪。
下面就是转义的方式。
//此处模拟要拼接的字段内容
String str = "'I'am'";
str = "'" + str.substring(1, str.length() - 1).replaceAll("\'", "\\\\\'") + "'";
System.out.println(str);
输出结果:'I\'am'
//此处模拟要拼接的内容,实际字段内容是'小周\'
String str = "'小周\\'";
str = str.replaceAll("\\\\", "\\\\\\\\");
System.out.println(str);
输出结果:小周\\
上面的方式是我个人整理的内容,如果看到内容的大神有更好的处理方式,请评论或私信告知,万分感谢。
以上。