Python 网络爬虫之解析网页【正则表达式-re模块】

Python 网络爬虫之解析网页【正则表达式-re模块】

  • 使用re模块进行正则表达式进行验证
    • match
    • 单个标签
    • 多个标签
    • 起别名
    • match 和search()区别
    • 贪婪和非贪婪模式用
  • 综合案例

使用re模块进行正则表达式进行验证

match

# match("者则表达式","匹配值")(从第一个开始匹配,若第一个不对则不匹配)
str = "[email protected]"
result = re.match("\w{4,20}@163\.com", str)
if result:
    print("恭喜:匹配成功")
    # group在无下标的时候默认打印
    print(result.group())
else:
    print("遗憾:匹配失败")
    # $(表示结束)

单个标签

# 
Python
# 正则表达式 # ()分组 \num(与第几个相对应) # <([A-Za-z]+)>.*

多个标签

# 
Python
# 正则表达式为 # <([A-Za-z]+)><([A-Za-z+]+)>.* # str = "
Python
"
# result = re.match("<(?P[A-Za-z]+)><(?P[A-Za-z]+)>.*", str) # if result: # print("恭喜:匹配成功") # # group在无下标的时候默认打印 # print(result.group()) # else: # print("遗憾:匹配失败") # # $(表示结束)

起别名

# 起别名
# 格式 (?P正则表达式) 引用(?P=name1)

match 和search()区别

# match 和search()区别
str = "你好:123,感谢遇见你:889"
# result = re.match("\d*", str)
# result = re.search(":\d*", str)
# findall 是集合需要遍历
result = re.findall("\d*", str)

if result:
    print("恭喜:匹配成功")
    # group在无下标的时候默认打印
    for i in result:
        print(i)
#   match   匹配成功却无值
#    需要把字符串去掉才会有值
else:
    print("遗憾:匹配失败")
#     $(表示结束)

贪婪和非贪婪模式用

# 贪婪和非贪婪模式用  ?区分
"""
变量:第一个字符必须是字母数字下划线
使用re模块进行正则表达式进行验证
"""
import re

# match("者则表达式","匹配值")(从第一个开始匹配,若第一个不对则不匹配)
# str = "[email protected]"
# result = re.match("\w{4,20}@163\.com", str)
# if result:
#     print("恭喜:匹配成功")
#     # group在无下标的时候默认打印
#     print(result.group())
# else:
#     print("遗憾:匹配失败")
#     $(表示结束)

# 
Python
# 正则表达式 # ()分组 \num(与第几个相对应) # <([A-Za-z]+)>.* #
Python
# 正则表达式为 # <([A-Za-z]+)><([A-Za-z+]+)>.* # 起别名 # 格式 (?P正则表达式) 引用(?P=name1) # str = "
Python
"
# result = re.match("<(?P[A-Za-z]+)><(?P[A-Za-z]+)>.*", str) # if result: # print("恭喜:匹配成功") # # group在无下标的时候默认打印 # print(result.group()) # else: # print("遗憾:匹配失败") # # $(表示结束) # match 和search()区别 str = "你好:123,感谢遇见你:889" # result = re.match("\d*", str) # result = re.search(":\d*", str) # findall 是集合需要便利 result = re.findall("\d*", str) if result: print("恭喜:匹配成功") # group在无下标的时候默认打印 for i in result: print(i) # match 匹配成功却无值 # 需要把字符串去掉才会有值 else: print("遗憾:匹配失败") # $(表示结束) # 贪婪和非贪婪模式用 ?区分

综合案例

"""
爬取妹子图所有的妹子图片
"""
import requests
import re
import time
import os



header = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
}

# 获取当前目录
root = os.getcwd()

for page in range(8):
    # 进入当前目录
    os.chdir(root)

    # 创建文件夹
    os.mkdir(f"第{page+1}页")

    # 改变当前文件目录
    os.chdir(f"第{page+1}页")

    response = requests.get(f"https://www.meizitu.com/a/list_1_{page+1}.html", headers=header)
    response.encoding = "gb2312"
    if response.status_code == 200:
        # print(response.text)
        result = re.findall("""(.*?)""", response.text)
        i = 1
        for i in result:
            name = i[1].replace("", "").replace("", "")
            path = i[0]
            print(f"{name}{path}")
            #根据图片地址再次请求(解析)
            response = requests.get(path, headers=header)
            # 图片为二进制 wb则为二进制保存
            # Python 数字和字符串不可以相加,需要转换类型
            with open(f"{str(i)+name}.jpg", "wb") as f:
            # 响应的文本,内容content
                f.write(response.content)
            print(f"{str(i)+name}:{path} 保存成功")
            time.sleep(1)
            i += 1
    print(f"第{page+1}获取成功,请慢慢欣赏")
    time.sleep(4)

你可能感兴趣的:(Python,爬虫)