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

简介: 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()
    
目录
相关文章
|
5月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
470 0
|
7月前
|
数据采集 Java API
深度解析:爬虫技术获取淘宝商品详情并封装为API的全流程应用
本文探讨了如何利用爬虫技术获取淘宝商品详情并封装为API。首先介绍了爬虫的核心原理与工具,包括Python的Requests、BeautifulSoup和Scrapy等库。接着通过实战案例展示了如何分析淘宝商品页面结构、编写爬虫代码以及突破反爬虫策略。随后讲解了如何使用Flask框架将数据封装为API,并部署到服务器供外部访问。最后强调了在开发过程中需遵守法律与道德规范,确保数据使用的合法性和正当性。
|
3月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
3月前
|
数据采集 机器学习/深度学习 人工智能
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
本文系统阐述了反爬虫技术的演进与实践,涵盖基础IP限制、User-Agent检测,到验证码、行为分析及AI智能识别等多层防御体系,结合代码实例与架构图,全面解析爬虫攻防博弈,并展望智能化、合规化的发展趋势。
1079 0
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
|
9月前
|
数据采集 人工智能 监控
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
Crawl4AI 是2025年GitHub上备受瞩目的开源网络爬虫工具,专为AI时代设计。它不仅能抓取网页内容,还能理解页面语义结构,生成适配大语言模型的训练数据格式。上线半年获4万+星标,应用于1200+AI项目。其功能亮点包括智能内容提取引擎、AI就绪数据管道和企业级特性,支持动态页面处理、多语言识别及分布式部署。技术架构基于Python 3.10与Scrapy框架,性能卓越,适用于AI训练数据采集、行业情报监控等场景。相比Scrapy、BeautifulSoup等传统工具,Crawl4AI在动态页面支持、PDF解析和语义分块方面更具优势
3408 0
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
|
3月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
10月前
|
数据采集 JSON API
深入解析:使用 Python 爬虫获取淘宝店铺所有商品接口
本文介绍如何使用Python结合淘宝开放平台API获取指定店铺所有商品数据。首先需注册淘宝开放平台账号、创建应用并获取API密钥,申请接口权限。接着,通过构建请求、生成签名、调用接口(如`taobao.items.search`和`taobao.item.get`)及处理响应,实现数据抓取。代码示例展示了分页处理和错误处理方法,并强调了调用频率限制、数据安全等注意事项。此技能对开发者和数据分析师极具价值。
|
5月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
490 0
|
6月前
|
数据采集 存储 NoSQL
Python爬虫案例:Scrapy+XPath解析当当网网页结构
Python爬虫案例:Scrapy+XPath解析当当网网页结构
|
6月前
|
数据采集 机器学习/深度学习 边缘计算
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
本文详解爬虫代理设置常见报错场景及解决方案,涵盖IP失效、403封禁、性能瓶颈等问题,提供动态IP代理的12种核心处理方案及完整代码实现,助力提升爬虫系统稳定性。
429 0

推荐镜像

更多
  • DNS