Python爬虫:scrapy从项目创建到部署可视化定时任务运行
创始人
2024-02-01 02:44:03
0

目录

    • 前言
    • 第一节 基本功能
      • 1、使用 pyenv创建虚拟环境
      • 2、创建 scrapy项目
      • 3、创建爬虫
    • 第二节 部署爬虫
      • 4、启动 scrapyd
      • 5、使用 scrapyd-client 部署爬虫项目
      • 6、使用 spider-admin-pro管理爬虫
    • 第三节 部署优化
      • 7、使用 Gunicorn管理应用
      • 8、使用 supervisor管理进程
      • 9、使用 Nginx转发请求

前言

  1. 前面1-3小节就是基本功能实现,完成了scrapy项目的创建和运行功能,能够爬取网络数据了,需要具备一定的Python基础和页面解析的能力

  2. 中间的4-6小节是部署工作的内容,主要是实现定时任务,自动运行爬虫,可视化查看爬虫运行状态

  3. 最后的7-9小节是部署优化工作的内容,基本上每个Python web应用甚至其他编程语言实现的Web应用都通用

第一节 基本功能

1、使用 pyenv创建虚拟环境

文档

  • https://github.com/pyenv/pyenv
  • Python编程:pyenv管理多个python版本环境

创建虚拟环境

# 创建虚拟环境
$ pyenv virtualenv 3.7.0 scrapy-env# 切换环境
$ pyenv local scrapy-env

强烈建议:不同的项目使用各自单独的虚拟环境来运行,确保不同项目的依赖库不冲突

2、创建 scrapy项目

在这里插入图片描述

文档

  • 官网:https://scrapy.org/
  • 文档:https://docs.scrapy.org/en/latest/index.html
  • github:https://github.com/scrapy/scrapy/

创建步骤

# 安装scrapy
$ pip install scrapy# 查看版本
$ pip show scrapy
Version: 2.7.1# 创建项目
$ scrapy startproject scrapy_demo$ cd scrapy_demo

需要修改一些必要的配置

settings.py

# Obey robots.txt rules
# ROBOTSTXT_OBEY = True
ROBOTSTXT_OBEY = False# 日志级别
# https://docs.scrapy.org/en/latest/topics/settings.html#std-setting-LOG_LEVEL
LOG_LEVEL = 'INFO'

3、创建爬虫

# 创建爬虫
$ scrapy genspider baidu_spider www.baidu.com

爬虫文件示例

仅完成一个title标题的解析打印输出功能

scrapy_demo/scrapy_demo/spiders/baidu_spider.py

import scrapy
from scrapy import cmdline
from scrapy.http import HtmlResponseclass BaiduSpiderSpider(scrapy.Spider):name = 'baidu_spider'allowed_domains = ['www.baidu.com']start_urls = ['http://www.baidu.com/']def parse(self, response: HtmlResponse, **kwargs):title = response.css('title::text').extract_first()print({'title': title})if __name__ == '__main__':cmdline.execute("scrapy crawl baidu_spider".split())

运行爬虫

# 运行爬虫
$ scrapy crawl baidu_spider

第二节 部署爬虫

4、启动 scrapyd

文档

  • https://scrapyd.readthedocs.io/en/latest/index.html
  • https://github.com/scrapy/scrapyd/

安装启动

pip install scrapyd# 运行scrapyd,可以单独新建一个文件夹,作为运行目录
$ scrapyd

浏览器访问:http://127.0.0.1:6800/
在这里插入图片描述

最佳实践

方式一:

scrapyd 仅运行在本机,避免外网访问,仅通过 本机地址 和 可视化的工具访问

方式二:

如果需要外网访问,必须 配置用户名和密码,以免遭受到网络攻击

scrapyd.conf

[scrapyd]
username    = 
password    =

5、使用 scrapyd-client 部署爬虫项目

文档

  • https://github.com/scrapy/scrapyd-client

切换回项目根目录

$ pip install scrapyd-client

修改部署信息的配置文件

scrapy.cfg

[settings]
default = scrapy_demo.settings[deploy:default]
url = http://localhost:6800/
project = scrapy_demo

部署

$ scrapyd-deploy

6、使用 spider-admin-pro管理爬虫

文档

  • pypi https://pypi.org/project/spider-admin-pro/
  • Github https://github.com/mouday/spider-admin-pro
pip install spider-admin-pro# 启动
gunicorn 'spider_admin_pro.main:app'

浏览器访问:http://127.0.0.1:8000/

  • 默认账号:admin
  • 默认密码:123456

最佳实践:修改配置文件,设置用户名和密码

在这里插入图片描述
设置定时任务
在这里插入图片描述

第三节 部署优化

7、使用 Gunicorn管理应用

Gunicorn文档:https://docs.gunicorn.org/

# 启动服务
$ gunicorn --config gunicorn.conf.py spider_admin_pro.run:app

注意:

一个配置示例:gunicorn.conf.py

# -*- coding: utf-8 -*-"""
$ gunicorn --config gunicorn.conf.py spider_admin_pro.run:app
"""import multiprocessing
import os# 日志文件夹
LOG_DIR = 'logs'if not os.path.exists(LOG_DIR):os.mkdir(LOG_DIR)def resolve_file(filename):return os.path.join(LOG_DIR, filename)def get_workers():return multiprocessing.cpu_count() * 2 + 1# daemon = True
daemon = False  # 使用supervisor不能是后台进程# 进程名称
proc_name = "spider-admin-pro"# 启动端口
bind = "127.0.0.1:5001"# 日志文件
loglevel = 'debug'
pidfile = resolve_file("gunicorn.pid")
accesslog = resolve_file("access.log")
errorlog = resolve_file("error.log")# 启动的进程数
# workers = get_workers()
workers = 1
worker_class = 'gevent'# 启动时钩子
def on_starting(server):ip, port = server.address[0]print('server.address:', f'http://{ip}:{port}')

8、使用 supervisor管理进程

文档:

  • http://www.supervisord.org
  • Python编程:supervisor模块管理进程实例

spider-admin-pro.ini

[program: spider-admin-pro]
directory=/spider-admin-pro
command=/usr/local/python3/bin/gunicorn --config gunicorn.conf.py spider_admin_pro.run:appstdout_logfile=logs/out.log
stderr_logfile=logs/err.logstdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 0
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=0

9、使用 Nginx转发请求

一般线上环境都是通过Nginx来转发外部请求到内部地址

server {listen 80;server_name _;access_log  /var/log/nginx/access.log;error_log  /var/log/nginx/error.log;location / {proxy_pass         http://127.0.0.1:5001/;proxy_redirect     off;proxy_set_header   Host                 $host;proxy_set_header   X-Real-IP            $remote_addr;proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;proxy_set_header   X-Forwarded-Proto    $scheme;}
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...