爬虫5-Scrapy爬虫架构

简介

Scrapy是爬取网站,提取结构性数据并存储的应用框架。对爬取过程中的请求、返回、解析、存储、调度等流程提供模块化支持。

items模块——定义需要爬取的数据字段

保存爬取到的数据的容器,python的字典类型。根据网站数据对item进行定义字段。

# items示例
import scrapy
class DangDangItem(scrapy.Item):
    _id = scrapy.Field()
    title = scrapy.Field()
    chubanshe = scrapy.Field()

pipelines模块——连接数据库、存储

# pipelines示例:通过__init__初始化连接mongodb,需要连接的库名、表名、主机地址、端口号在setting.py模块定义完毕;在process_item方法通过isinstance函数判断item数据类型,若传入与item一致则存入数据库表
import pymongo
from scrapy.conf import settings
from .items import DangdangItem

class DangdangPipeline(object):
    def __init__(self):
        host = settings['MONGODB_HOST']
        port = settings['MONGODB_PORT']
        db_name = settings['MONGODB_DBNAME']
        client = pymongo.MongoClient(host=host,port=port)
        tdb = client[db_name]
        self.post = tdb[settings['MONGODB_DOCNAME']]

    def process_item(self, item, spider):
        if isinstance(item,DangdangItem):
            try:
                book_info = dict(item)
                if self.post.insert(book_info):
            except Exception:
                pass
        return item

settings模块——定制Scrapy组件的方法

可以控制核心core、插件extension、pipeline及spyder组件,实现对调度、请求等待时间、存储优先级、请求队列清理方式、数据库连接方式的定义

# settings参数举例
SPIDER_MODULES=['****']  #scrapy搜索spider模块列表
DOWNLOAD_DELAY              #爬取延时等待时间
SCHEDULER                         #Scrapy的调度器配置
DUPEFILTER_CLASS              #对爬取链接去重,第二个链接不再爬取
SCHEDULER_PERSIST           #TRUE不清队列;FALSE清队列
SCHEDULER_QUEUE_CLASS  #爬虫的优先级算法:队列、栈、优先级
MONGODB_DBNAME             #定义连接到的数据库
MONGODB_DOCNAME          #定义存储到的表名

spider模块

# spider模块中有用于爬取的文件,命名为****.py.
# 创建爬虫文件,需要继承crapy.spider,需要定义三个属性
name         #名字要唯一,不可以为不同的spider设定相同的名字
start_urls   #含spider启动时爬取的url列表
parse()      #spider的一个方法,用于接收请求链接返回的response数据

 

posted @ 2020-12-23 21:42  foolangirl  阅读(96)  评论(0编辑  收藏  举报