python爬虫爬取天气正则表达式解析案例

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: python爬虫爬取天气正则表达式解析案例

需求:从中国天气网爬取北京近七天的天气状况。
在这里插入图片描述
首先要进行网页分析
如图可以看到北京最近7天天气,明天为晴,温度为-7℃到3℃,风力为<3级。
查看网页源码,发现可以从中找到这一数据
在这里插入图片描述

于是可以确定,此网页上方的url
http://www.weather.com.cn/weather/101010100.shtml
即为我们要访问的目标url。

然后对该url发起请求。并对得到的源码进行解析。

def get_Source(self):
    url = "http://www.weather.com.cn/weather/101180101.shtml"
    headers = {
    
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
       }
    response = requests.get(url, headers=headers)
    return response.content.decode('utf-8')

content = self.get_Source()

在这里插入图片描述

如图可以看出,需要的数据在

之间。
则正则表达式写为:

result = re.match(r'.*?(<ul class="t clearfix">.*?</ul>).*?', content, re.S)
ul = result.group(1)

re.S必须要有,表示使用点(.)字符匹配时匹配所有字符,包括换行符。没有的这个参数话则只会从第一行中匹配。
与括号内匹配的内容,是我们需要的内容。也是该行代码返回的内容。

取出<ul>后,可以看出七天的天气分别分布在7个<li>标签里。遂使用findall()方法将其全部取出。

正则表达式

lis = re.findall(r'<li.*?>.*?</li>', ul, re.S)
for li in lis:
    print('-'*100)
    print(li)

输出结果如下:
在这里插入图片描述

再进一步解析
不过是需要的内容,还是不需要的不确定的无规律内容,都有点星问表示。

pattern = re.compile(r'<li.*?>.*?<h1>(.*?)</h1>.*?<p.*?>(.*?)</p>.*?<i>(.*?)</i>.*?<i>(.*?)</i>.*?</li>', re.S)
for li in lis:
    r = pattern.match(li)
    print(r.group(1), end='')
    print(r.group(2), end='')
    print(r.group(3), end='')
    print(r.group(4), end='')
    print()

细节:此处第二个点星问表示匹配换行,不能忽略。虽然

  • 之间容易觉得没有任何内容。
    程序运行结果如下:
    在这里插入图片描述

  • (其中,print()后边的end参数社会空字符表示不换行,下边的print()里边什么也不放表示换行。)

    最后,外加存储过程,一起写为面向对象形式为:

    import requests
    import csv
    import re
    
    
    class WeatherSpider():
    
        # 发送请求函数
        def get_Source(self):
            url = "http://www.weather.com.cn/weather/101180101.shtml"
            headers = {
          
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
               }
            response = requests.get(url, headers=headers)
            return response.content.decode('utf-8')
    
        # 解析数据函数
        def parse_Source(self):
            content = self.get_Source()
            # 经过分析 需要获取到目标ul标签
            result = re.match(r'.*?(<ul class="t clearfix">.*?</ul>).*?', content, re.S)
            ul = result.group(1)
            # 获取li标签
            lis = re.findall(r'<li.*?">.*?</li>', ul, re.S)
            pattern = re.compile(r'<li.*?>.*?<h1>(.*?)</h1>.*?<p.*?>(.*?)</p>.*?<i>(.*?)</i>.*?<i>(.*?)</i>.*?</li>', re.S)   # 第二个 .*? 表示换行了。
            lst_all = []  # 保存所有的天气
            # 解析li的数据
            for li in lis:
                # print('-'*100)
                # print(li)
                r = pattern.match(li)
                # print(r.group(1), end='')
                # print(r.group(2), end='')
                # print(r.group(3), end='')
                # print(r.group(4), end='')
                # print()
                lst_one = [r.group(1), r.group(2), r.group(3), r.group(4)]
                lst_all.append(lst_one)
            return lst_all
    
        # 保存文件
        def saveDate(self):
            # 获取数据
            content = self.parse_Source()
            with open('weather.csv', 'w', encoding='utf-8', newline='') as f:
                writer = csv.writer(f)
                writer.writerow(['日期', '天气', '温度', '风度'])
                writer.writerows(content)
    
    
    def main():
        weather = WeatherSpider()
        weather.saveDate()
    
    
    if __name__ == '__main__':
        main()
    
目录
相关文章
|
9天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
7天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
53 5
|
14天前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
20天前
|
数据采集
动态代理与静态代理在爬虫解析的优缺点
随着科技和互联网的发展,越来越多企业需要使用代理进行数据抓取。本文介绍了HTTP动态代理与静态代理的区别,帮助您根据具体需求选择最佳方案。动态代理适合大规模、高效率的爬取任务,但稳定性较差;静态代理则适用于小规模、高稳定性和速度要求的场景。选择时需考虑目标、数据量及网站策略。
40 4
|
20天前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
24天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
34 7
|
26天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
C++ Python
137 python高级 - 正则表达式(re模块的高级用法)
137 python高级 - 正则表达式(re模块的高级用法)
89 0
|
Python
131 python高级 - 正则表达式(re模块操作)
131 python高级 - 正则表达式(re模块操作)
75 0
|
大数据 C++ Python
python正则表达式与re模块
python正则表达式与re模块
63 0