从网页上采集的数据后,大多数的数据是杂乱无章的,这时就需要对数据进行加工处理,去掉一些垃圾数据才能得到我们想要的数据。常用的方法有以下三种方法:字符串操作,正则表达式和第三方模块库。
一、字符串操作(截取、替换、查找和分割)
(1)截取:字符串[开始位置:结束位置:间隔位置]
# 字符串截取
str = "ABCDEFG"
# 截取第一位到第三位的字符
print("截取的第一位到第三位的字符:" + str[:3:])
# 与原字符串顺序相反的字符串
print("与原字符串顺序相反的字符串:" + str[::-1])
(2)替换:字符串.replace('被替换的内容','替换后的内容')
注意:使用replace替换的字符串后仅为临时变量,需要重新赋值才能保存。
# 字符串替换
str = "ABCABCABC"
# 单个字符替换
print(str.replace("C", "V"))
# 多个字符替换
print(str.replace("BC", "WV"))
(3)查找:字符串.find('要查找的内容',开始位置,结束位置)
# 字符串查找
str = "ABCDBCABC"
# 全部查找
print(str.find("A"))
# 从字符串第2个到第6个开始查找,找到第一个就会返回位置(BCDBC)
print(str.find("C", 1, 5))
index函数也能同find函数一样实现相同的功能,index是在字符串中查找第一次出现的位置,但是如果找不到就会抛出异常。
# 字符串index查找
str = "ABCDABC"
# 全部查找
print(str.index("A"))
# 从字符串第2个到第6个开始查找,找到第一个就会返回位置(BCDBC)
print(str.index("C", 1, 5))
# 查找不存在的内容
print(str.index("E"))
(4)分割:字符串.split('分割符',分割次数)
# 字符串分割
str = "ABCDABC"
# 分割全部
print(str.split("B"))
# 分割一次
print(str.split("B", 1))
二、正则表达式
(1)正则语法(元字符)
符合正则规则,表示一些不寻常的匹配规则或者通过重复、修改匹配意义来影响正则模式的其他部分
(2)正则处理函数(re模块,常用函数:match,search,findall,sub)
1、re.match(pattern,string,flags=0)
re.match函数尝试从字符串的开头开始匹配一个模式,如果匹配成功就返回一个匹配成功的对象,否则返回一个None。
该函数匹配之后得到一个match对象类型,如果要返回结果那么使用group()或groups()匹配对象函数来获取匹配后的结果。
2、re.search(pattern,string,flag=0)
扫描整个字符串并返回第一次成功匹配的对象,如果匹配失败,就返回None。
3、re.findall(pattern,string,flag=0)
获取字符串中所有匹配的字符串,并以列表的形式返回。
4、re.sub(pattern,repl,string,count=0,flags=0)
用于替换字符串中的匹配项,如果没有匹配的项,则返回没有匹配的字符串。
5、re.split(pattern,string,)
三、Beautiful Soup
Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库。
Beautiful soup支持python标准库的HTMl解析器,还可以结合第三方的解析器解析网页,如lxml,xml,html5lib。
(1)查找全部标签: soup.a,返回第一个标签
若想要获取标签在网页上显示的内容(去除HTML代码):
1、通过getText()获取标签的值。
2、通过str()方式转换为字符串,再使用字符串截取获得的数据。
(2)获取某标签的属性值。
如果HTML的属性含有多个CSS属性,Beautiful Soup会以列表的格式返回结果。
(3)精确查找:find_all(),find()
1、find_all()和find()的区别:
如果想获取第N个标签a或精确定位到某个标签,则有三种方式:
(4)匹配CSS选择器
1、通过id查找:soup.select("#try3")
2、通过class查找:soup.select(".efg")
3、通过属性查找:soup.select('a[class="efg"]')