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

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] # 查看一下目标容器的进程
在这里插入图片描述
注意这个时候我们已经退出容器了哦。所以成功了!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值