城市量化研究-PM2.5数据分析-配置云端服务器
前言
让我们的爬虫能够按照特定时间运行,将我们的代码放在云服务器上运行,因为像这类数据,一般网站会定时更新数据,将我们的爬虫放在云端服务器上执行,非人为因素,我们的代码可以一直跑下去。这样我们可以获取一个月、一年乃至更长的数据。
使用库 schedule arrow
需要库
import schedule
import arrow
将前一步代码进行优化
想对你说的都在代码里
import requests
from lxml import etree
import pandas as pd
import schedule
import arrow
import time
def main(date):
t1 = time.time() # 用来计算爬取一次的时间
res = requests.get('http://www.pm25.in').text
res = etree.HTML(res)
data = res.xpath("//div[@class='bottom']//li/a/@href")
for url in data[:2]:
url = 'http://www.pm25.in' + url
print(url)
res = requests.get(url).text
res = etree.HTML(res)
data = res.xpath("//tbody//tr")
dts = [] # 装每条数据的空列表
date_r = date # 添加日期
hr = arrow.now().format('HH') # 添加小时
city = res.xpath('//h2/text()')[0]
for td in data:
lst = []# 存放一条数据的列表
lst.append(date_r)
lst.append(hr) # date_r 与hr都是为了写入数据的时候看时间
lst.append(td.xpath('td[1]/text()')[0])
lst.append(td.xpath('td[5]/text()')[0])
lst.append(res.xpath('//h2/text()')[0])
dts.append(lst)
df = pd.DataFrame(dts) # 转成数据框
df.to_csv('./data-pm2{}.csv'.format(date),mode='a',header=False,encoding='utf-8') # 存为CSV文件
# mode = 'a'追加,header=False,不要表头 encoding='utf-8' 防止乱码
print('完成',city)
print('='*30)
t2 = time.time()
print('all finish')
print(t2-t1) # 计算时间
if __name__=='__main__':
def process_pm25():
# 我们定义这个执行函数
date = arrow.now().format('YYYY-MM-DD') # 格式化时间,为储存文件准备。
main(date)
print('running!')
schedule.every(0.1).minutes.do(process_pm25) # 设置我们云端服务器的休息时间
# schedule.every(10).hour.do(job)
# schedule.every(10).day.at('10:30').do(job)
# schedule.every(10).monday.do(job)
# schedule.every(10).wednesday.at('10:30').do(job)
# schedule.every(10).minutes.at(':30').do(job)
while True:
schedule.run_pending() # 固定写法
time.sleep(1) # 程序暂停
这里是重点
【新的链接,传送门,更新于2023-9-28】
我们需要立即分析,我们需要拿到一年的数据,当然不能等一年后再来更新博文,所以感谢那些为建设美丽和谐社会做出杰出共享的人
传送门
另一个传送门
学习笔记来源