昨天发了一篇爬图的一个简单的代码,有看的朋友是不是感觉这样爬图很慢,而且还多还找不到图片的地址,那么今天我将给大家讲解一下怎么快速爬更多的图.
爬图是爬虫的一部分,但是不管是爬虫也好爬图也罢,都要用到正则表达式,你们知道什么是正则表达式吗?不知道的话那我们不妨先学习一下.
正则表达式概述
思考
场景1:在一个文件中,查找出itcast开头的语句
测试文件
itcast hello python
itcast c++
itheima ios
itheima php
场景:在一个文件中,找到含有itcast的语句
测试文件
hello itcast python
www.itcast.cn c++
itheima ios
itheima php
场景:在一个文件中,找到邮箱为163或者126的所有邮件地址
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re
#coding=utf-8
# 导入re模块
import re
# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
# 如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()
#coding=utf-8
import re
result = re.match("itcast","itcast.cn")
result.group()
运行结果为:
itcast
re.match() 能够匹配出以xxx开头的字符串
匹配单个字符
在上一小节中,了解到通过re模块能够完成使用正则表达式来匹配字符串
本小节,将要讲解正则表达式的单字符匹配
字符 功能
. 匹配任意1个字符(除了\n)
[ ] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
示例1: .
#coding=utf-8
import re
ret = re.match(".","M")
print(ret.group())
ret = re.match("t.o","too")
print(ret.group())
ret = re.match("t.o","two")
print(ret.group())
运行结果:
M
too
two
示例2:[ ]
#coding=utf-8
import re
# 如果hello的首字符小写,那么正则表达式需要小写的h
ret = re.match("h","hello Python")
print(ret.group())
# 如果hello的首字符大写,那么正则表达式需要大写的H
ret = re.match("H","Hello Python")
print(ret.group())
# 大小写h都可以的情况
ret = re.match("[hH]","hello Python")
print(ret.group())
ret = re.match("[hH]","Hello Python")
print(ret.group())
ret = re.match("[hH]ello Python","Hello Python")
print(ret.group())
# 匹配0到9第一种写法
ret = re.match("[0123456789]Hello Python","7Hello Python")
print(ret.group())
# 匹配0到9第二种写法
ret = re.match("[0-9]Hello Python","7Hello Python")
print(ret.group())
ret = re.match("[0-35-9]Hello Python","7Hello Python")
print(ret.group())
# 下面这个正则不能够匹配到数字4,因此ret为None
ret = re.match("[0-35-9]Hello Python","4Hello Python")
# print(ret.group())
运行结果:
h
H
h
H
Hello Python
7Hello Python
7Hello Python
7Hello Python
示例3:\d
#coding=utf-8
import re
# 普通的匹配方式
ret = re.match("嫦娥1号","嫦娥1号发射成功")
print(ret.group())
ret = re.match("嫦娥2号","嫦娥2号发射成功")
print(ret.group())
ret = re.match("嫦娥3号","嫦娥3号发射成功")
print(ret.group())
# 使用\d进行匹配
ret = re.match("嫦娥\d号","嫦娥1号发射成功")
print(ret.group())
ret = re.match("嫦娥\d号","嫦娥2号发射成功")
print(ret.group())
ret = re.match("嫦娥\d号","嫦娥3号发射成功")
print(ret.group())
运行结果:
嫦娥1号
嫦娥2号
嫦娥3号
嫦娥1号
嫦娥2号
嫦娥3号
说明
`其他的匹配符参见后面章节的讲解
匹配多个字符
匹配多个字符的相关格式
re.search 扫描整个字符串并返回第一个成功的匹配。匹配成功re.search方法返回一个匹配的对象,否则返回None。可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
re.findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。不需要通过group()取值
re.sub用于替换字符串中的匹配项
re.split 根据匹配进行切割字符串,并返回一个列表
好了以上就是正则表达式的概念以及运用了,看完之后要多多练习,至于怎么爬图自己先想着怎么写,只有自己写出来的项目才有成就感.当然如果不想写的朋友关注我,明天更新代码!