Python爬虫:scrapy从项目创建到部署可视化定时任务运行

news2025/7/18 5:42:41

目录

    • 前言
    • 第一节 基本功能
      • 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 HtmlResponse


class 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:app

stdout_logfile=logs/out.log
stderr_logfile=logs/err.log

stdout_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;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/18170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单shell批量文件转换gbk转为utf8编码

前言 matlab打包成exe时发现中文乱码,查找发现是gbk编码问题,找半天没找到合适的批量转换编码工具,就搞了个简单的shell来实现 准备工作 windows上有安装git bash命令行的话可以直接跑sh脚本,没有的话下一个很快。linux可以直接运行 代码 #!/bin/sh…

Answering the SDIs Step by Step

title: Notes of System Design No.01 —Answering the SDIs Step by Step description: Answering the SDIs Step by Step ’ date: 2022-05-04 14:52:06 tags: 系统设计 categories: 系统设计 In this Article , I will give a introduction to the guildline of answerin…

实验33:RFID门禁卡实验

OK,本实验分为两个部分 一、读卡 二、显示不同的卡的信息,同时继电器动作 01 硬件电路设计 读卡ID,两张卡,白卡和蓝卡,用txt文件名称体现 lib里面是库文件 把它放在自己的Arduino相应的文件家里,最好是…

MySQL数据库 -- 内置函数

今天来一起学习MySQL数据库的内置函数。 目录 日期函数 current_date current_time current_timestamp date_add date_sub datediff 实例演示 创建一张表,记录生日 创建一个留言表 字符串函数 charset concat length replace substring ucase…

第02章 变量

变量介绍 定义 定义:变量是程序的基本组成单位,变(变化)量(值) 变量有三个基本要素:数据类型 变量名称 值 变量相当于内存中的一个数据存储空间的表示,可以把变量看作是一个房间…

Pthread 并发编程(三)——深入理解线程取消机制

基本介绍 线程取消机制是 pthread 给我们提供的一种用于取消线程执行的一种机制&#xff0c;这种机制是在线程内部实现的&#xff0c;仅仅能够在共享内存的多线程程序当中使用。 基本使用 #include <stdio.h>#include <pthread.h>#include <assert.h>#incl…

数字化助力生产制造管理:专项生产管理系统

对于现今的生产企业而言&#xff0c;大家都是希望可以让整个制造生产过程更加的规范。同时越来越多的企业也已经分析到&#xff0c;在现有的社会生产方式中&#xff0c;如果不能够使加工业和制造业有先进的更为现代化的管理模式&#xff0c;是难以取得更好的竞争优势的。因此在…

Hadoop搭建

一、安装虚拟机 root 123456789 1、安装完系统后配置虚拟机ip vim /etc/sysconfig/network-scripts/ifcfg-ens33 DEFROUTE"yes" IPV4_FAILURE_FATAL"no" IPV6INIT"yes" IPV6_AUTOCONF"yes" IPV6_DEFROUTE"yes" IPV6_FAIL…

Git学习1

Git学习历程——努力入世的后浪~。 目录 一、Git安装 二、Git的初级使用 1.Git配置文件 2.Git基本命令 2.1 git init 2.2 ls -al 2.3 touch 2.4 git add 2.5 git commit -m 2.6 git status 2.7 git rm 2.8 git log 2.9 git reset --hard 2.10 git reflog 三、Git…

Linux操作系统面试题

Linux 概述 什么是Linux Linux是一套开源的类似Unix操作系统&#xff0c;是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络 为核心的设计思想&#xff0…

pytorch深度学习实战lesson22

第二十二课 LeNet LeNet神经网络由深度学习三巨头之一的Yan LeCun提出&#xff0c;他同时也是卷积神经网络 (CNN&#xff0c;Convolutional Neural Networks)之父。 LeNet主要用来进行手写字符的识别与分类&#xff0c;并在美国的银行中投入了使用。LeNet的实现确立了CNN的结构…

KKFileView在线预览禁用复制右键图片保存等操作

KKFileView在线预览禁用复制右键图片保存等操作一、需求背景二、修改kkFileview1.docx、doc文档不可复制、F12、右键、打印限制问题2.图片限制拖拽处理3.限制Excel转换后复制等操作4.PDF模式禁用右上角菜单栏一、需求背景 公司的运营平台&#xff0c;管理了一些如合同等内容&a…

【记录】软件自动修复工具Jaid配置、调试、运行及相关问题的解决方案

文章目录1. 前言2. Jaid原论文3. 环境4. 配置5. 调试6. 碰到的问题7. 一些发现8. 小结9. 参考文献1. 前言 创作开始时间&#xff1a;2022年11月18日20:50:38 如题&#xff0c;本文记录一下软件自动修复工具Jaid配置、调试、运行及相关问题的解决方案。 2. Jaid原论文 【ASE…

Jenkins+Docker+SVN实现SpringBoot项目半自动化部署

起因&#xff1a;入职后公司需要的技能&#xff0c;全部项目都使用的JenkinsDocker部署 Jenkins详细教程&#xff1a;知乎大佬写的文章 Docker详细教程&#xff1a;一个大佬的博客 SVN使用教程&#xff1a;一个大佬的博客 深入了解Jenkins、Docker、SVN&#xff0c;去上面三个大…

图书管理系统【java】

目录 &#x1f947;1.设计背景 &#x1f50e;2.设计思路 &#x1f511;3.book包 &#x1f4d7;3.1 Book类的实现 &#x1f4d5;3.2 BookList类的实现(书架) &#x1f511;4.user包 &#x1f4d9;4.1 User类的实现 &#x1f4d2;4.2 AdminUser&#xff08;管理员&#x…

MySQL导出csv数据文件

之前使用MySQL导出过一次线上数据&#xff0c;当时解决了乱码和数据没有正常分隔的问题。 参见这篇文章: 记一次“曲折“的MySQL数据导出 前几个月换了工作电脑&#xff0c;这几天又需要导出几十万的线上数据&#xff0c;在导出过程中还是出现了一些问题&#xff0c;再记录一…

OpenWrt 固件编译教程

一、编译环境准备 编译平台 阿里云 Ubuntu 20.04.5 LTS 安装编译环境依赖 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion f…

ICME 会议介绍

官网翻译来的&#xff0c;具体内容还是看官网&#xff1a;IEEE ICME23 Author Information and Submission Instructions 目录 常会和特别会议 研讨会 行业/应用文件 演示 一般信息 示例文件、格式化指南和模板 电子论文提交 提交论文的分步说明 感兴趣的主题包括但不…

右键发送到菜单+批处理实现批量自动化为文件名添加统一的后缀

WinR打开运行&#xff0c;并输入shell:sendto&#xff0c;打开系统右键发送到菜单的所在文件夹。 新建记事本文档&#xff0c;修改文件名为公开.bat&#xff0c;编辑并保存如下内容&#xff1a; echo off :loop if not "%~1" "" (ren "%~1" &…

[附源码]SSM计算机毕业设计在线二手车交易信息管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…