• 25_re模块


    一、re模块的核心功能
     
        1、findall —— 查找所有,返回list
    1 lst = re.findall("m", "mai le fo len, mai ni mei!")
    2 print(lst) # ['m', 'm', 'm']
    3 lst = re.findall(r"d+", "5点之前. 你要给我5000万")
    4 print(lst) # ['5', '5000']

        2、finditer —— 和findall差不多,返回的是迭代器

    1 it = re.finditer("m", "mai le fo len, mai ni mei!")
    2 for el in it:
    3     print(el.group()) # 依然需要分组

     3、search —— 会进行批评,但是如果匹配到了第一个结果,就返回这个结果。如果匹配不上search返回None

    1 ret = re.search(r'd', '5点之前. 你要给我5000万').group()
    2 print(ret) # 5

        4、match —— 只能从字符串的开头进行匹配

    1 ret = re.match('a', 'abc').group()
    2 print(ret) # a
        5、其他操作
     1 ret = re.split('[ab]', 'qwerafjbcd') # 先按'a'分割得到'qwer'和'fjbcd',在对'qwer'和'fjbcd'分别按'b'分割
     2 print(ret) # ['qwer', 'fj', 'cd']
     3 
     4 ret = re.sub(r"d+", "_sb_", "alex250taibai250wusir250ritian38") # 把字符串中的数字换成__sb__
     5 print(ret) # alex_sb_taibai_sb_wusir_sb_ritian_sb_
     6 
     7 ret = re.subn(r"d+", "_sb_", "alex250taibai250wusir250ritian38") # 将数字替换成'__sb__',返回元组(替换的结果,替换了多少次)
     8 print(ret) # ('alex_sb_taibai_sb_wusir_sb_ritian_sb_', 4)
     9 
    10 obj = re.compile(r'd{3}') # 将正则表达式编译成为⼀个 正则表达式对象, 规则要匹配的是3个数字
    11 ret = obj.search('abc123eeee') # 正则表达式对象调⽤search, 参数为待匹配的字符串
    12 print(ret.group()) # 结果: 123
        6、爬虫(重点)
    1 obj = re.compile(r'(?P<id>d+)(?P<name>e+)') # 从正则表达式匹配的内容每个组起名字
    2 ret = obj.search('abc123eeee') # 搜索
    3 print(ret.group()) # 结果: 123eeee
    4 print(ret.group("id")) # 结果: 123 # 获取id组的内容
    5 print(ret.group("name")) # 结果: eeee # 获取name组的内容
    注意: 在re模块中和我们在线测试⼯具中的结果可能是不⼀样的
     1 ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
     2 print(ret) # ['oldboy'] 这是因为findall会优先把匹配结果组⾥内容返回,如果想要匹配结果,取消权限即可
     3 ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
     4 print(ret) # ['www.oldboy.com']
     5 
     6 ret=re.split("d+","eva3egon4yuan")
     7 print(ret) #结果 : ['eva', 'egon', 'yuan']
     8 ret=re.split("(d+)","eva3egon4yuan")
     9 print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan']
    10 #在匹配部分加上()之后所切出的结果是不同的,
    11 #没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
    12 #这个在某些需要保留匹配部分的使⽤过程是⾮常重要的。
    爬取豆瓣网
     1 import ssl
     2 import re
     3 from urllib.request import urlopen
     4 
     5 ssl._create_default_https_context = ssl._create_unverified_context   # ⼲掉数字签名证书
     6 def getPage(url):
     7     response = urlopen(url)
     8     return response.read().decode('utf-8')
     9 
    10 def parsePage(s):
    11     com = re.compile(com = re.compile(
    12          '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?' + '<span class="title">(?P<title>.*?)</span>'+ '.*?<span class="rating_num" .*?>    (?P<rating_num>.*?)</span>.*?<span>'+
    13          '(?P<comment_num>.*?)评价</span>', re.S)
    14      ret = com.finditer(s)
    15      for i in ret:
    16          yield {
    17              "id": i.group("id"),
    18              "title": i.group("title"),
    19              "rating_num": i.group("rating_num"),
    20              "comment_num": i.group("comment_num"),
    21          }
    22 def main(num):
    23      url = 'https://movie.douban.com/top250?start=%s&filter=' % num
    24      response_html = getPage(url)
    25      print(response_html)
    26      ret = parsePage(response_html)
    27      # # print(ret)
    28      f = open("move_info7", "a", encoding="utf8")
    29      for obj in ret:
    30         print(obj)
    31         data = str(obj)
    32         f.write(data + "
    ")
    33 
    34 
    35 count = 0
    36 for i in range(10):
    37     main(count)
    38     count += 25
  • 相关阅读:
    jQuery(Ajax)
    博文相关接口
    登录接口设计和实现
    CSS-层叠样式表
    Google Kaptcha 生成图形验证码
    IDEA中如何修改生成javadoc里默认的author
    maven项目resources文件在target找不到
    IDEA 获取 resources 下的文件
    免安装版 mysql5.7.zip 的配置记录
    从前端模块化 到 webpack 再到使用 vue文件
  • 原文地址:https://www.cnblogs.com/hq82/p/9792226.html
Copyright © 2020-2023  润新知