RUN__IT # 一个简单的爬妹子代码送福利(正则表达式总结)

先来个诱惑再看代码吧!再来复习下正则表达式吧!
在这里插入图片描述

代码很简单,若有建议请留言!

案例

import gevent
from gevent import monkey
import urllib.request
import re


# 打补丁
monkey.patch_all()


def my_download(name,url):
    """下载并保存"""
    # 请求
    resp = urllib.request.urlopen(url)
    # 读取数据
    data = resp.read()
    # 保存
    with open("/home/python/Desktop/mi_zi/"+ name,"wb") as f:
        f.write(data)


def get_html():
    """解析出图片网址"""
    # 打开文件获取源码。
    # "/home/python/Desktop/"+ "url_str.txt"为源码保存的路径及名字,自己找源码保存即可
    with open("/home/python/Desktop/"+ "url_str.txt","r") as f:
        url_str = f.read()

    # 正则表达式匹配
    # urls = re.findall(r"https://.*?\.jpg", url_str)
    urls = re.findall(r"https://.*?cdnimage.*?\.jpg",url_str)

    # 打印图片个数
    print(len(urls))
    return urls


def main():
    """
    爬去虎牙直播妹子图片
    https: // www.huya.com / g / 2168
    """
    # 解析图片网址
    urls = get_html()

    li = list()
    i = 0
    for url in urls:
        # print(urls)  # 打印出网址
        i += 1  # 产生图片名字
        # 产生一个卵,并把一个卵添加到列表
        li.append(gevent.spawn(my_download,str(i) + ".jpg",url))
    # 等待所有协程(卵)结束
    gevent.joinall(li)


if __name__ == '__main__':
    main()

正则表达式

正则表达式的基本使用

import re

re.match(r"xxx",匹配的字符串) 尝试从字符串的起始位置匹配一个模式匹配成功re.match返回一个匹配对象,否则返回None。可以使用group(num)或groups()匹配对象函数来获取匹配表达式,groups返回是一个元组。

使用正则匹配单个字符

  • . 匹配任意一个字符(除了\n) re.S则可以匹配换行
  • re.I 表示大小写不敏感
  • [1-9] 匹配[]中列举的任意一个字符
  • \d 匹配数字,即0-9
  • \D 匹配非数字,即不是数字
  • \s 匹配空白,即空格、tab键、换行
  • \S 匹配非空白
  • \w 匹配单词字符。即a-z、A-Z、0-9、_。默认是re.U, 即Unicode编码,可以匹配中文,加上re.A 即可指定ASCLL编码,等价于[a-zA-Z0-9 _ ]
  • \W 匹配非单词字符

使用正则表达式匹配多个字符

  • * 匹配前一个字符出现0次或者无限次,即可有可无。
  • + 匹配前一个字符出现1次或者无限次,即至少有一次
  • ? 匹配前一个字符出现一次或0次,即要么有一次,有么没有
  • {m} 匹配前一个字符出现m次
  • {m,} 匹配前一个字符出现m到无限次
  • {m,m} 匹配前一个字符出现从m到n次,逗号两侧不能有空格。

匹配开头结尾边界的使用

  • ^ 匹配字符串开头 [^a] 表示的是只要不是a
  • $ 匹配字符串结尾

匹配分组的使用

  • | 匹配左右任意一个表达式
  • (ab) 将括号中字符作为一个分组
  • \num 引用分组num匹配到的字符串 \1\2
  • (?P) 分组起别名

re高级函数 search、findall、sup、split等的使用

  • re.search 扫描整个字符串并返回一个成功的匹配。匹配成功re.search 方法返回一个匹配对象,否则返回None。可以使用group(num)或group()匹配对象函数来获取匹配表达式。
  • re.findall 在字符串中找到正则表达式所匹配到的所有子串,并返回一个列表。不需要通过group()取值。
  • re.sub 用于替换字符串中的匹配项
  • re.split 根据匹配进行切割字符串,并返回一个列表。

re.match 与 re.search 的区别

  • re.match 只匹配字符串的开始,如果字符串的开始不符合正则表达式,则匹配失败,函数返回None。而re.search 匹配整个字符串,直到找到一个匹配。

贪婪与非贪婪的特点以及使用方式

  • Python里正则匹配默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪

字符串前加r的作用

  • Python中字符串前面加上 r 表示原生字符串

猜你喜欢

转载自blog.csdn.net/RUN__IT/article/details/89290980