zoukankan      html  css  js  c++  java
  • re模块 模块

    import re

    findall()  烦的奥

    import re
    # 1. findall 查找所有结果,数据不是特别庞大
    lst = re.findall('a','abcsdfasdfa')
    print(lst)

    finditer()  烦的一特

    #2. finditer 找到的结果返回迭代器
    it = re.finditer(r'd+','你好啊200,哈哈233')
    for el in it:#从迭代器中获取到的是分组的信息
        print(el.group())#个肉破,获取具体信息

    search()  色吃

    #3. search()  查找, 如果查找到第一个结果,就停止,如果查不到结果就返回None
    ret = re.search('e','abc')
    print(ret)#不要用空去点

    match()  卖吃

    #4. match()  查找
    ret = re.match('a','abc')#从头开始找.给正则加^
    print(ret.group())
    

    相关操作 

    ret = re.split('ab','ab哈哈ab你好哈哈')  (d+)带了括号原来的刀还留着
    print(ret)#按照正则切,切完了,产生空白
    #sub(仨波)替换   第一个参数是替换的东西,第二个替换的结果
    ret1 = re.sub('250','__sb__','哈哈250你好啊250,我不好250')
    print(ret1)
    #shbn(仨波n)替换,加替换了多少次
    ret1 = re.subn('250','__sb__','哈哈250你好啊250,我不好250')
    print(ret1)
    
    #compile()康派奥!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!作用很大
    obj = re.compile(r'd+')#预加载.先把这个正则加载到内存,用的时候不用再加载,写一遍
    lst = obj.findall('哈哈222,你好2222')#从内存中拿直接用
    print(lst)
    

     ?P<名>正则   给正则取名字,想把什么抠出来,就用这个取名   

    obj = re.compile(r'(?P<id>d+)(?P<zimu>e{3})')#给这个正则起名,取值好取
    lst = obj.search('abcsdfjsd123eeelkabc')
    print(lst.group())
    print(lst.group('id'))
    print(lst.group('zimu'))
    

    ?:  去掉分组

    #分组
    ret = re.findall('www.(baidu|oldboy).com','www.oldboy.com')
    #去掉分组
    ret1 = re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')  

    爬虫

    rom urllib.request import urlopen #打开一个链接.读取源代码
    import ssl
    ssl._create_default_https_context = ssl._create_unverified_context
    def getPage(url):
        response = urlopen(url)#打开,和网页链接
        return response.read().decode('utf_8')#返回正常页面源代码 读取源代码 编码                       抵扣的
    def parsePage(s):#页面源代码
        ret = re.findall('<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>'+
            '(?P<comment_num>.*?)评价</span>', s, re.S)
        return ret #id,title, rating_num, comment_num
    
    def main(num):
        url = 'https://movie.douban.com/top250?start=%s&filter=' % num
        response_html = getPage(url) # response_html是页面源代码
        ret = parsePage(response_html)
        print(ret) # id,title, rating_num, comment_num
    
    s = 0
    for i in range(10): #10页
        main(s)#分页  第一个0 25 50 75
        s += 25
    

      

    精细版
    import ssl
    import re
    from urllib.request import urlopen
    # ⼲干掉数字签名证书
    ssl._create_default_https_context = ssl._create_unverified_context
    def getPage(url):
        response = urlopen(url)
        return response.read().decode('utf-8')
    def parsePage(s):
        com = re.compile(
             '<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>'+
                     '(?P<comment_num>.*?)评价</span>', re.S)
        ret = com.finditer(s)
        for i in ret:
            yield {
                "id": i.group("id"),
                "title": i.group("title"),
                "rating_num": i.group("rating_num"),
                "comment_num": i.group("comment_num"),}
    def main(num):
        url = 'https://movie.douban.com/top250?start=%s&filter=' % num
        response_html = getPage(url)
        ret = parsePage(response_html)
            # print(ret)
        f = open("move_info7", "a", encoding="utf8")
        for obj in ret:
            print(obj)
            data = str(obj)
            f.write(data + "
    ")
    count = 0
    for i in range(10):
        main(count)
        count += 25
    

      

    模块

    import 模块名    嗯炮特

    1.检查是否已经被导入过,顺序  内存 -> 内置 -> sys.path

    2. 如果没有导入过这个模块,先创建一个名称空间

    3. 然后把导入的模块执行一遍. 把执行的结果放在刚才的空间中

    4. 把模块的名字命名给这个空间

    所有被导入的模块都会放在sys.modules字典里

    使用模块中的内容. 模块名字.方法/变量/类

    __name__:

    如果当前模块是程序的入口. __name__的值:__main___
    if __name__ == '__main__': # __main__ 程序的入口
        print("我在浪挖的测试")
    

    如果模块是被其他模块引入的. __name__是模块名
    from xxx import xxx
    from 模块 import 模块中的内容
    from 模块 import * 不推荐

    导入的内容可以直接使用. 不需要模块.xxx. 和当前模块中的变量冲突

    as可以起名字

    import sys
    print(sys.modules.keys()) # 查看到已经引入的模块信息
    print(sys.path)
    

      

  • 相关阅读:
    比较两个json数组是否有相同的选项
    使用gulp实现静态资源版本号替换
    Happy Halloween
    前端学习plan
    Python之函数式编程
    秋意浓
    2018给自己个plan,给自己一个小目标
    see goodbye with 2017
    杂记(一)
    The fruit in mid-summer
  • 原文地址:https://www.cnblogs.com/xihuanniya/p/9773801.html
Copyright © 2011-2022 走看看