【爬虫】在云服务器上部署定时爬虫

您所在的位置:网站首页 scrapy定时爬虫 【爬虫】在云服务器上部署定时爬虫

【爬虫】在云服务器上部署定时爬虫

2023-08-27 12:35| 来源: 网络整理| 查看: 265

github指路

项目地址

准备环境

准备环境: 1.云服务器:centos7 2.docker安装 (可以参考我的其他文章) 本来是准备用scrapy框架写的,但是发现目前还玩不转,只是部署就已经费劲死了,所以这次就准备做一个简陋版的23333

正式开始(简陋版呜呜呜)

1.先在本地写好爬虫的主文件。 在这里插入图片描述 项目由

主函数 main爬虫类 Weather调度器 scheduler 组成

由主函数以及爬虫类实现爬虫逻辑:

请求响应清洗保存 其中主函数添加了错误捕获机制,防止请求失败 # main.py from Weather import WeatherSpider import time """要求: 每天定时爬取http://gd.weather.com.cn/zhuhai/index.shtml中珠海的天气最高温和最低温; """ def main(): url = "http://gd.weather.com.cn/zhuhai/index.shtml" # 实例化爬虫对象 spider = WeatherSpider(url) # 添加错误捕获机制 try: # 获得响应 spider.get_response() except: try: time.sleep(60) # 休息一分钟再去抓 spider.get_response() except: # 如果还失败,那就没办法 spider.save("抓取失败") else: # 如果获取没有问题,那就清洗数据以及保存数据 # 清洗数据 spider.clean() # 保存数据 spider.save() if __name__ == '__main__': main() # weather.py import requests from bs4 import BeautifulSoup import time class WeatherSpider: def __init__(self, url): self.url = url self.header = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"} def get_response(self): response = requests.get(self.url, header=self.header) self.text = response.text def clean(self): soup = BeautifulSoup(self.text, "html.parser") self.low = soup.find(id="forecastID").find_all('a')[3].find('span').text self.high = soup.find(id="forecastID").find_all('a')[2].find('span').text self.date_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) def save(self, defalut=None): if defalut != None: # 保存 with open("./Dayweather_log.txt", 'a') as f: f.write("今天的日期是{},{}\n".format(self.date_time, defalut)) # 保存当天温度 with open("./Dayweather_log.txt", 'a') as f: f.write("今天的日期是{},最高温度{}, 最低温度{}\n".format(self.date_time, self.high, self.low))

调度器则是为了让爬虫在固定的时间去爬取目标网站

import schedule import main # 设置调度器 # schedule.every(5).seconds.do(_timer.main)# 每隔5s执行一次job schedule.every().day.at("00:00").do(main.main) # 每天固定时间执行任务 if __name__ == '__main__': # 循执行 while True: schedule.run_pending()

目标网站截图:

在这里插入图片描述

部署在服务器上

作为一个合格的定时爬虫,除了有比一般的爬虫更强的鲁棒性(也就是像是错误捕获这种提高稳定性的技巧,其实使用框架才是最好的选择,可惜我不会wwww)以外,还需要一个持续运行的系统,那么服务器就是最好的选择了,这里,我选择了centos7+docker来部署。 首先clone一下我们的项目(真不是在打广告2333) git clone https://github.com/mi4da/Spyder-Wednesday 假设你已经安装好了docker,并且也有了对应的python镜像(不会的去看我的其他博客,打个广告哈哈) 在这里插入图片描述 我们使用倒数第二个镜像

创建容器: docker run -itd -v /home/weatherspider/:/home/weatherspider centos/python-36-centos7 weatherspider_py36 bash

-d,后台运行。

克隆项目: git clone https://gitee.com/jobilojostar/Spyder-Wednesday.git

在docker里面运行, nohup python scheduler.py & nohup — & :忽略shell关闭信号, 这样,python爬虫就能在一个完全不受干扰的环境里面一直运行啦! docker top [CONTAINER ID] # 查看一下目标容器的进程 在这里插入图片描述 注意这个时候我们已经退出容器了哦。所以成功了!



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3