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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 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()
    
目录
相关文章
|
4天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
5天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
6天前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
13天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
57 6
|
7天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
8天前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
在 Python 编程中,掌握图的深度优先遍历(DFS)和广度优先遍历(BFS)是进阶的关键。这两种算法不仅理论重要,还能解决实际问题。本文介绍了图的基本概念、邻接表表示方法,并给出了 DFS 和 BFS 的 Python 实现代码示例,帮助读者深入理解并应用这些算法。
18 2
|
12天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
33 7
|
11天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
12天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
|
5月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
53 2

推荐镜像

更多