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

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

目录

前言

  1. 前面1-3小节就是基本功能实现,完成了scrapy项目的创建和运行功能,能够爬取网络数据了,需要具备一定的Python基础和页面解析的能力
  2. 中间的4-6小节是部署工作的内容,主要是实现定时任务,自动运行爬虫,可视化查看爬虫运行状态
  3. 最后的7-9小节是部署优化工作的内容,基本上每个Python web应用甚至其他编程语言实现的Web应用都通用

第一节 基本功能

1、使用 pyenv创建虚拟环境

文档

创建虚拟环境

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

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

2、创建 scrapy项目

image.png

文档

创建步骤

# 安装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

文档

安装启动

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

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

image.png

最佳实践

方式一:

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

方式二:

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

scrapyd.conf

[scrapyd]
username    = 
password    =

5、使用 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管理爬虫

文档

pip install spider-admin-pro
# 启动
gunicorn 'spider_admin_pro.main:app'

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

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

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

image.png

设置定时任务

image.png

第三节 部署优化

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管理进程

文档:

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


相关文章
|
3月前
|
数据可视化 搜索推荐 大数据
基于python大数据的北京旅游可视化及分析系统
本文深入探讨智慧旅游系统的背景、意义及研究现状,分析其在旅游业中的作用与发展潜力,介绍平台架构、技术创新、数据挖掘与服务优化等核心内容,并展示系统实现界面。
|
5月前
|
数据采集 数据可视化 搜索推荐
Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
在数字化转型中,数据分析成为企业决策核心,而Python凭借其强大生态和简洁语法成为首选工具。本文通过实战案例详解数据分析全流程,涵盖数据采集、清洗、探索、建模、可视化及自动化部署,帮助读者掌握从数据到业务价值的完整技能链。
588 0
|
3月前
|
数据可视化 数据挖掘 大数据
基于python大数据的水文数据分析可视化系统
本研究针对水文数据分析中的整合难、分析单一和可视化不足等问题,提出构建基于Python的水文数据分析可视化系统。通过整合多源数据,结合大数据、云计算与人工智能技术,实现水文数据的高效处理、深度挖掘与直观展示,为水资源管理、防洪减灾和生态保护提供科学决策支持,具有重要的应用价值和社会意义。
|
3月前
|
机器学习/深度学习 搜索推荐 数据可视化
基于python大数据的音乐可视化与推荐系统
本研究基于Python实现音乐数据采集、清洗、分析与可视化,并结合协同过滤算法构建个性化推荐系统。通过Echarts展示音乐热度及用户偏好,提升用户体验,助力音乐产业智能化发展。
|
3月前
|
搜索推荐 算法 大数据
基于python大数据的旅游景点可视化与推荐系统
本系统基于大数据与网络技术,构建个性化旅游推荐平台。通过收集用户偏好及行为数据,结合机器学习算法,提供精准的旅游目的地、住宿及交通推荐,旨在优化旅游信息传递,提升用户决策效率与旅行体验。
|
4月前
|
JavaScript 前端开发 机器人
【Azure Bot Service】在中国区Azure上部署机器人的 Python 版配置
本文介绍了在中国区Azure上使用Python SDK配置Azure Bot Service时遇到的问题及解决方案,涵盖参数设置与适配器配置,适用于希望在Azure中国区部署Python机器人的开发者。
143 6
|
4月前
|
数据采集 数据可视化 API
驱动业务决策:基于Python的App用户行为分析与可视化方案
驱动业务决策:基于Python的App用户行为分析与可视化方案
|
5月前
|
存储 数据采集 数据可视化
Python自动化分析知网文献:爬取、存储与可视化
Python自动化分析知网文献:爬取、存储与可视化

推荐镜像

更多