欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Scrapy 概览笔记

程序员文章站 2022-04-29 18:49:30
本项目代码可参考 "imzhizi/myspider: a scrapy demo with elasticsearch" 虚拟环境的创建 建议爬虫项目都创建虚拟环境 虚拟环境在 Python 项目中真的非常重要并且非常有意义 虚拟空间的使用可参考 "Python 虚拟空间的使用 难以想象的晴朗" ......

本项目代码可参考

虚拟环境的创建

建议爬虫项目都创建虚拟环境
虚拟环境在 python 项目中真的非常重要并且非常有意义
虚拟空间的使用可参考 python 虚拟空间的使用 - 难以想象的晴朗.

# 创建虚拟环境
mkdir spider-demo
cd spider-demo
python3 -m venv spidervenv
 
# 进入虚拟环境
source spidervenv/bin/activate

# 安装 scrapy
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

新建项目

# 使用 scrapy 新建工程
scrapy startproject myspider

# 此时文件夹中会创建一个 myspider 文件夹
# 项目结构大概是
spider-demo                                 # 根文件夹
├── myspider                          # 创建的爬虫项目, 若使用 ide, 可把此文件夹当作根文件夹
│   ├── myspider                    # 真正的爬虫代码文件夹
│   │   ├── __init__.py
│   │   ├── items.py              # 用于规定爬取数据形成的 model
│   │   ├── middlewares.py  # 中间件
│   │   ├── pipelines.py        # 流水线, 决定了爬取的数据的流向
│   │   ├── settings.py         # 配置信息
│   │   └── spiders              # 爬虫代码所在地
│   │       ├── __init__.py
│   │       └── __pycache__ 
│   └── scrapy.cfg                # 项目设置
└── spidervenv # 此处为虚拟环境文件, 已经忽略

新建爬虫

# 首先来到爬虫代码文件夹
cd myspider/myspider/spiders
# 使用 scrapy genspider 创建简单的爬虫模版
# 会在 spiders 文件夹下创建名为 doubanspider.py 的文件, 同时该爬虫也命名为 doubanspider
scrapy genspider doubanspider douban.com

pycharm 适配

经过一系列创建操作, 基本上一个爬虫应该有的组件就都准备好了, 一般情况下会使用命令 scrapy crawl name 启动爬虫, 但为了方便 ide (pycharm) 中直接开始爬虫, 一般会在 spider-demo/myspider 文件夹下创建 start.py 文件, 其中包含以下代码

若使用 pycharm 打开项目,还需将 interpreter 改为 spidervenv

from scrapy.cmdline import execute

import sys
import os

# 将系统当前目录设置为项目根目录
# os.path.abspath(__file__) 为当前文件所在绝对路径
# os.path.dirname 为文件所在目录
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy", "crawl", "doubanspider"])

工作流程

Scrapy 概览笔记

流程图中部分代码的参考

# items.py
class doubanitem(scrapy.item):
    title = scrapy.field()
    douban_link = scrapy.field()
    rating = scrapy.field()
    
    def save_to_db():
        douban = doubanmodel()
        douban.title = self['title']
        douban.douban_link = self['douban_link']
        douban.rating = self['rating']
        douban.save() 
# pipelines.py
class doubanpipeline(object):

    def process_item(self, item, spider):
        item.save_to_db()
        return item
# es model, 继承的 document 提供了 save() 方法
# 一般保存在 spiders 文件夹上层
class doubantype(document):
    title = text()
    douban_link = text()
    rating = double()

其他配置

为了让爬虫顺利进行, 需要对 settings.py 进行一些修改

# settings.py

## 不遵守 robot.tx 规则
robotstxt_obey = false

## 下载延迟
download_delay = 3

## 用户代理( 爬豆瓣用 )
user_agent = 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/55.0.2883.87 safari/537.36'

## 请求头
default_request_headers = {
  'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'accept-language': 'en',
}

## 启用的流水线
item_pipelines = {
   'myspider.pipelines.myspiderpipeline': 300,
}

参考项目
【python分布式爬虫开发搜索引擎_python数据挖掘/抓取_python网页抓取_工程师】-慕课网