> 技术文档 > 用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存


用Selenium爬取天气数据实践(附代码)

本文以实践为主,没有很深的知识点,大家放心食用,如果需要系统学习Selenium知识点,可以移步别的博主😘


本文运用Selenium动态爬取和Xpath进行元素定位

文章目录

  • 用Selenium爬取天气数据实践(附代码)
  • 一、selenium介绍
    • 简介
    • 1.现在让我来讲讲Selenium的主要组成部分
    • 2.Selenium 主要有以下几种用途:
  • 二、Selenium使用方法
    • 1、安装Selenium(这里以Edge浏览器为示例,其他浏览器类似)
  • 三、天气数据爬取(这里以广州天气为示例)
    • 1、观察网页布局,并决定所要爬取的数据对象有哪些
    • 2、导入所需库
    • 3、定义一个函数用于封装代码
    • 4、用Selenium打开网页
    • 5、用Selenium模拟鼠标切换页面
    • 6、用Xpath进行元素定位
    • 7、关闭浏览器返回数据
    • 8、查看所爬取的数据
    • 9、保存文件
    • 10、结果展示
  • 结束啦!

一、selenium介绍

1、Selenium 是一个广泛使用的开源工具,主要用于自动化Web应用程序的测试。它提供了一套用于驱动浏览器的 API,可以模拟用户在网页上的各种操作,如点击、输入、提交表单、滚动页面等。Selenium 支持多种浏览器,包括 Chrome、Firefox、Safari、Edge 等,能够跨平台运行,支持多种编程语言,如 Python、Java、C#、Ruby 等。
2、Selenium 的核心组件包括:
·Selenium WebDriver:这是 Selenium 的核心,它直接与浏览器交互,可以模拟用户的所有操作。WebDriver 提供了一种编程接口,使得测试脚本能够操作浏览器中的页面元素(如按钮、输入框、链接等)。
·Selenium Grid:用于并行执行测试。它允许在不同的机器和不同的浏览器环境中并行运行测试,从而提高测试的效率。
·Selenium IDE:一个浏览器插件,用于录制和回放用户的操作。它适合没有编程经验的用户进行简单的自动化测试。它可以生成 Selenium WebDriver 测试脚本。
·Selenium RC (Remote Control):早期的 Selenium 组件,用于自动化测试。它使用一个代理服务器将测试脚本发送到浏览器,但在现代的 Selenium 测试中已经不再广泛使用,主要被 WebDriver 取代。
3、Selenium 的主要用途包括:
·自动化功能测试:确保 Web 应用程序的功能符合预期。
·回归测试:在代码更改后,自动化执行测试用例,验证新修改没有破坏现有功能。
·性能测试:通过模拟大量用户的操作,评估 Web 应用程序的性能。
·Web 抓取:虽然 Selenium 主要用于测试,但也有时候被用来抓取网页上的数据。
·Selenium 可以与其他工具结合使用,如 TestNG、JUnit 进行测试框架的搭建,或与 CI/CD 工具(如 Jenkins)集成,实现自动化的持续集成和持续交付流程。
上述这些都是一些官方语言,嘿嘿~
下面才是重点

简介

Selenium是一个开源工具,它是模拟用户在浏览器上进行各种操作,所以它可以用来自动化测试,并且,它的适用性很强大,因为它支持多个浏览器和多种编程语言。

1.现在让我来讲讲Selenium的主要组成部分

·WebDriver:它是 Selenium 的核心,就像我们的四肢,通过手我们可以拿桌上的食物,通过腿我们可以去散步,同理,Selenium通过WebDriver能直接控制浏览器,执行各种操作,比如点击、输入、查找元素等。
·Selenium Grid:可以在不同的机器和浏览器上同时运行多个测试,节省时间,提高效率。(可以把它理解为分身术,它可以帮助我们实现分布式爬取)
·Selenium IDE:这是一个浏览器插件,可以录制用户的操作,适合不懂编程的人,帮助自动生成测试脚本。
·Selenium RC:是 Selenium 的旧版本,现在已被 WebDriver 替代,不再常用。

2.Selenium 主要有以下几种用途:

·自动化功能测试:检查网站的功能是否正常。
·回归测试:在网站修改后,自动检查这些修改是否影响了原有功能。
·性能测试:模拟大量用户访问,检查网站是否能承受高流量。
·数据抓取:有时 Selenium 也用来从网站上提取数据。
·Selenium 可以与其他工具一起使用,比如 TestNG、JUnit 用于构建测试框架,或者与 Jenkins 等工具结合,支持自动化的持续集成和部署。

二、Selenium使用方法

1、安装Selenium(这里以Edge浏览器为示例,其他浏览器类似)

1、首先,先确定自己浏览器的版本号,输入该网址查询:edge://settings/help
用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
这是我的浏览器目前的版本号。

2、接着,下载对应的Selenium 的edgedriver(浏览器的不同,驱动也不同,eg.谷歌的驱动就叫chromedriver),请输入一下网址下载驱动:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
通过浏览器版本号和电脑版本选取相应的webdriver版本下载(怎么看自己电脑的版本数?指路:https://baijiahao.baidu.com/s?id=1599865729643161638&wfr=spider&for=pc)

3、查看自己电脑的Python版本
打开cmd,输入python --version就可查看
用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
这个步骤是为了避免电脑装了多个版本的python,然后不知道当前的环境下使用的python版本是哪一个导致后面将webdriver放错Scripts文件夹。

4、查找Scripts文件夹
打开系统环境变量
用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
我的Scripts是在D:\\Python3.8.10下,所以我们可以通过路径搜索或者一层层文件打开去打开Scripts文件夹。

5、存放webbdriver到Scripts文件夹

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
至此,Selenium驱动就安装完成了。
注意:因为浏览器经常自动更新,所以过一段时间就要去检查浏览器的版本号,一旦浏览器版本数太高,webdriver可能无法与其相匹配,所以要进行删除重装操作。

三、天气数据爬取(这里以广州天气为示例)

1、观察网页布局,并决定所要爬取的数据对象有哪些

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存

打开多个网页可以发现该天气网站的url构成是非常有规则的:由https://lishi.tianqi.com/你所要爬取城市的拼音/你所要爬取天气数据的年份日期.html所构成(所以大家可以跟据自己的城市进行修改),其次我们爬取的内容则是红框框里的内容。
同时,我们可以发现只有我们点了查看更多,才会出现完整的数据,所以这也是本次实验使用Selenium进行数据爬取的最重要的原因
用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
点了查看更多后
用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存

2、导入所需库

from selenium.webdriver import Edgefrom selenium.webdriver.common.by import Byimport time

3、定义一个函数用于封装代码

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存

4、用Selenium打开网页

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存

5、用Selenium模拟鼠标切换页面

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
为避免爬取的时候网页没数据而报错,影响这个代码的运行,在Selenium模拟鼠标点击查看更多的代码上,我们用try和except进行操作,具体代码如下:

#点击展开更多按钮 try: more = web.find_element(By.CLASS_NAME, \"lishidesc2\") more.click() # 点击展开更多按钮 time.sleep(2) # 等待页面加载完 except: print(f\"无法展开 {j}{i}月的数据,跳过此月\") continue # 如果展开按钮不可点击,则跳过该月数据

6、用Xpath进行元素定位

 #获取天气信息 try: resp = web.find_elements(By.XPATH, \"//ul[@class=\'thrui\']/li\") for li in resp:  day_weather_info = {}  #获取日期  date_time_element = li.find_element(By.XPATH, \'./div[1]\')  date_time = date_time_element.text.split(\' \')[0]  day_weather_info[\'date_time\'] = date_time  #获取最高气温  high_element = li.find_element(By.XPATH, \'./div[2]\')  high = high_element.text  day_weather_info[\'high\'] = high[:high.find(\'℃\')] if \'℃\' in high else high  #获取最低气温  low_element = li.find_element(By.XPATH, \'./div[3]\')  low = low_element.text  day_weather_info[\'low\'] = low[:low.find(\'℃\')] if \'℃\' in low else low  #获取天气状况  weather_element = li.find_element(By.XPATH, \'./div[4]\')  weather = weather_element.text  day_weather_info[\'weather\'] = weather  #获取风向  wind_direction_element = li.find_element(By.XPATH, \'./div[5]\')  wind_direction = wind_direction_element.text.split(\' \')[ 0] if \' \' in wind_direction_element.text else wind_direction_element.text  day_weather_info[\'wind_direction\'] = wind_direction  # 将当前天气数据添加到总数据中  weather_info.append(day_weather_info) except Exception as e: print(f\"在 {j}{i}月,无法获取数据: {e}\") continue # 如果数据获取失败,跳过此月

7、关闭浏览器返回数据

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存

8、查看所爬取的数据

weather_data = get_weather_info()print(weather_data)

9、保存文件

import csv# 打开并写入 CSV 文件with open(\'guangzhou_weather.csv\', mode=\'w\', newline=\'\', encoding=\'utf-8\') as csvfile: writer = csv.writer(csvfile) # 写入表头 writer.writerow([\'日期\', \'最高气温\', \'最低气温\', \'天气\', \'风向\']) # 写入数据行 for day_weather_dict in weather_data: writer.writerow([day_weather_dict[\'date_time\'], day_weather_dict[\'high\'], day_weather_dict[\'low\'], day_weather_dict[\'weather\'], day_weather_dict[\'wind_direction\']])

10、结果展示

用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存
csv文件展示:
用Selenium爬取天气数据实践(附代码)_使用selenium爬取张家界2023年天气数据并保存


结束啦!

创作不易,转载请说明出处喔~
需要全部代码的请私信,看见都会及时回复的~