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