爬虫-kaggle数据集Rain_in_AUS的Location气候分类

news/2024/7/19 11:46:01 标签: 爬虫, python, 数据挖掘

澳大利亚气象局和澳大利亚建筑规范委员会(ABCB)将澳大利亚不同地区不同城市的所在的气候区域进行划分,总共划分为八个区域,非常适合用来做分类。能够将Rain in Australia数据集中的地点Location转换成对应的气候,这个信息对于预测是否会下雨比较有用。
在google上进行爬虫,爬出每个城市对应的经纬度,并保存在数据city_climate.csv当中。原视频链接:https://www.bilibili.com/video/av39338080/
由于谷歌经常上不了,就另外找了个一个网站https://www.geodatos.net/en/coordinates,输入城市名称可以查询经纬度,如输入Adelaide Australia
在这里插入图片描述
具体爬虫代码如下:(可能因为网站或者网速不稳定?经常容易跑出错,抛出NoSuchElementException以及TimeoutException错误)

python">#导入需要的模块
import time
#pip install selenium,安装爬虫使用的selenium
from selenium import webdriver
import pandas as pd
import numpy as np
from lxml import etree
import selenium.webdriver.support.ui as ui

city = pd.read_csv(r"C:\Users\86188\Desktop\coding\kaggle-raininaustralia\cityclimate.csv")#导入原数据
city.head()#查看原数据,第一列是城市名称,第二列是城市对应的气候
#提取城市名称
cityname = city.iloc[:,0]
cityname

在这里插入图片描述

python">df = pd.DataFrame(index = cityname.index)#创建新dataframe用于存储爬取的数据
driver_url = r"D:\Anaconda\msedgedriver.exe"
driver = webdriver.Edge(executable_path = driver_url)#调用MS Edge浏览器

time0 = time.time()#计时开始
#循环开始
for num,city in enumerate(cityname):#在城市名称中进行遍历
    driver_url = "https://www.geodatos.net/en/coordinates"
    driver.get(driver_url)    #首先打开MS Edge主页
    time.sleep(0.3)#停留0.3秒,看看发生了什么
    search_box = driver.find_element_by_name(name = "qs")#锁定网站的搜索输入框
    search_box.send_keys("%s Australia" % (city))#在输入框中输入“城市”澳大利亚
    search_box.submit()#enter,确认开始搜索
    resulturl = driver.find_element_by_xpath("/html/body/div[2]/div[1]/ul/li[1]/a").get_attribute("href")#选择第一个超链接
    driver.get(resulturl)#获取第一个超链接的网址
    wait = ui.WebDriverWait(driver,60,1)#在60秒内每隔1秒检查一次
    #WebDriverWait,是指在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
    wait.until(lambda driver: driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[2]/p"))#知道检查出存在元素href
    result = driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[2]/p").text##爬取需要的经纬度
    resultsplit = result.split(" ")#将爬取的结果用split进行分割
    df.loc[num,"City"] = city#向提前创建好的df中输入爬取的数据,第一列是城市名
    df.loc[num,"Latitude"] = resultsplit[0]#第二列是维度
    df.loc[num,"Longitude"] = resultsplit[2]#第三列是经度
    df.loc[num,"Latitudedir"] = resultsplit[1]#第四列是维度的方向
    df.loc[num,"Longitudedir"] = resultsplit[3]#第五列是经度的方向
    print("%i webcrawler successful for city %s" % (num,city))#每次爬虫成功之后,打印“城市”爬取成功
    
time.sleep(1)#全部爬取完毕后,停留1秒钟
driver.quit()#关闭浏览器
print(time.time()-time0)#打印爬虫花费的时间
#结果:186.37813663482666
df.head()#所有的城市的经纬度数据集

在这里插入图片描述

python">df.to_csv(r"C:\Users\86188\Desktop\coding\kaggle-raininaustralia\city_climate.csv",mode ="a+",index=False,header=True)#将数据写入csv文件中

http://www.niftyadmin.cn/n/975521.html

相关文章

推荐近乎免费的调试神器——OzCode

https://walterlv.github.io/post/using-ozcode-to-improve-debug.html 当一只断点打在 Visual Studio 的代码编辑器中,程序命中断点的那一刻,调试才刚刚开始……这个时候忙碌的手在键盘和鼠标之间来回跳跃,试图抓住每一次单步执行带来的状态…

Docker 打包 部署

(1).此刻我假设你已经把你的 通过 maven 自动化构建的 java demo 打包了,就是说生成了以 jar 或者 war 结尾的包文件了。 (2).假设你已经成功安装 docker 。  如果上面的俩个假设为True的话,那您可以接着往下看。 Docker相关术语: (1).镜…

sklearn中的支持向量机SVM(下)

1 二分类SVC的进阶 1.1 SVC用于二分类的原理复习 sklearn中的支持向量机SVM(上) 1.2 参数C的理解进阶 有一些数据,可能是线性可分的,但在线性可分状况下训练准确率不能达到100%,即无法让训练误差为0。这种数据被称…

WEB API 配置 ajax跨域 以及 清理XML格式返回Json

在项目中使用ajax调webAPI服务时候&#xff0c;通常会遇到以下两种问题&#xff0c; 一、ajax 跨域 跨域需要在API的webconfig中配置此代码&#xff1a; <!--配置API可跨域--> <httpProtocol> <customHeaders> <add name"Access-Control-Allow-Origi…

OKHttpUtil工具类

导入jar包下载链接 http://square.github.io/okhttp/ package com.common.util;import java.io.IOException;import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response;/*** 利用okhttp进行get和…

Cnario 3.8支持哪些操作系统?

Cnario是基于Windows平台开发的软件&#xff0c;包含Server、Messenger和Player三个组件&#xff0c;支持以下Windows 版本系统&#xff1a; Server/Messenger 支持英文版的以下操作系统&#xff1a;Windows 7 Enterprise, Windows 7 Pro, Windows 7 Ultimate, Windows 10 Pro,…

流式断言器AssertJ介绍

本文来自网易云社区 作者&#xff1a;范旭斐 大家在使用testng、junit做自动化测试的过程中&#xff0c;经常会用到testng、junit自带的断言器&#xff0c;有时候对一个字符串、日期、列表进行断言很麻烦&#xff0c;需要借助到jdk或者第三方包的方法进行处理后断言&#xff0…

python入门第三十三天--网络通信原理(补充)(补)路由器和交换器啥区别

交换机和路由器分别是什么 ★交换机(Switch)是一种基于MAC(网卡的硬件地址)识别&#xff0c;为始发者和接收者之间建立临时的联网路径。 交换机分为&#xff1a;二层交换机、三层交换机或更高层的交换机。三层交换机可以有路由的功能&#xff0c;而且比低端路由器的转发速率更快…