• 爬虫 — 正则案例


    一、需求

    目标网站:http://www.weather.com.cn/weather/101010700.shtml

    需求:获取日期,天气,温度,风力数据

    二、页面分析

    1、确定 url,静态加载

    url:http://www.weather.com.cn/weather/101010700.shtml

    2、解析数据

    先获取 ul 标签的内容 .*(.*?).* 相当于是想要的内容
    .* :表示尽可能匹配多的字符
    .*? :表示尽可能匹配少的字符

    获取每一组 li 标签,findall查找所有,返回的数据类型是 list

    3、匹配详情数据

    <li.*?
    <h1>(.*?)</h1>
    .*?
    <p.*?>(.*?)</p>
    .*?
    <i>(.*?)</i>
    .*?
    <i>(.*?)</i>
    .*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    三、代码实现

    # 导入模块
    import requests
    import re # 内置库
    
    # 确定 url
    url = 'http://www.weather.com.cn/weather/101010700.shtml'
    
    # 发请求,获取响应
    res = requests.get(url)
    
    # 出现乱码,进行编码
    res.encoding = 'utf-8'
    
    # 打印响应内容
    # print(res.text)
    
    # 做数据解析
    # re.match 从头开始找,最开始就没有匹配返回 None
    # .匹配任意一个字符,但是 \n 符号不匹配
    # re.S 帮助.匹配到换行符
    result = re.match('.*(
      .*?
    ).*'
    , res.text, re.S) # 获取 ul 标签里面的内容,一个括号分一个组,如果取第一个括号里面的内容,1 ul = result.group(1) # 贪婪模式与非贪婪模式 # .* 尽可能匹配多的字符 # .*? 尽可能匹配少的字符 lis = re.findall('.*?
  • ', ul, re.S) # 遍历每一个 li 标签,拿到每一组数据 compile() 模板 pattern = re.compile('(.*?).*?(.*?)

    .*?(.*?).*?(.*?).*'
    , re.S) for li in lis: # print(li) r = pattern.match(li) print(r.group(1), r.group(2), r.group(3), r.group(4)) # break
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

  • 相关阅读:
    超越GPT-3,DeepMind推出新宠Gato,却被质疑“换汤不换药”?
    【AGC】如何使用认证服务与云数据库处理用户信息
    算法篇之(排序)
    反射型XSS靶场练习
    无声的世界,精神科用药并结合临床的一些分析及笔记(五)
    【数据结构与算法】B树与B+树
    【第29篇】MAE:屏蔽自编码器是可扩展的视觉学习器
    详细javaweb基础
    图片转PDF有哪些软件?这几款软件建议收藏
    Linux ssh协议
  • 原文地址:https://blog.csdn.net/muyuhen/article/details/132827569