大数据时代下的Scrapy爬虫框架

Posted 右指

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据时代下的Scrapy爬虫框架相关的知识,希望对你有一定的参考价值。


前言

随着大数据时代的来临,数据对一个企业越来越重要,没有数据的支撑,那么这个企业必然会落后于其它企业,那么怎么样获取数据呢?本篇文章将告诉你如何从互联网上抓取有用的数据并持久化存储

一、Scrapy是什么?

Scrapy 是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便~

二、使用步骤

1.安装Scrapy

pip install scrapy

2.创建Scrapy项目

scrapy startproject 项目名

3.Scrapy架构图


Item Pipeline:可以简称为数据结构,即要存储的数据的结构,可以理解为面向对象中的类,这个模块在Spiders模块解析后,会进行回调。
Spiders:数据解析模块,即在此模块中,只是做对数据的解析,并提取链接信息发送给Scheduler模块进行排队。
Downloader:下载模块,只做数据请求,并将返回的数据放入Spiders中解析。
Scheduler:队列模块,只负责对请求的链接进行排序并发送给Downloader.

三.实战项目:爬取豆瓣电影TOP250电影信息

1.items.py

该模块对应items模块

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy
class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    ##电影序号
    movie_number=scrapy.Field()
    ##电影名字
    movie_name=scrapy.Field()
    ##电影信息
    movie_tostar=scrapy.Field()
    ##星级
    movie_star=scrapy.Field()
    ##评论人数
    movie_evaluate=scrapy.Field()
    ##电影介绍
    movie_introduction=scrapy.Field()

2.pipelines.py

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import pymongo


class DoubanPipeline:

    def __init__(self) -> None:
        host="mongodb://localhost"
        prot="27017"
        dbname="movie"
        client=pymongo.MongoClient("mongodb://localhost:27017")
        db=client[dbname]
        self.movie_table=db['movie_table']
    def process_item(self, item, spider):
        print(item)
        data=dict(item)
        self.movie_table.insert_one(data)
        return item

3.douban_spider.py

import scrapy
from douban.items import DoubanItem

class DoubanSpiderSpider(scrapy.Spider):
    ##爬虫名字
    name = 'douban_spider'
    ##允许的域名
    allowed_domains = ['movie.douban.com']
    ##入口url
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        next=response.xpath('//*[@id="content"]/div/div[1]/div[2]/span[3]/a/@href').extract()
        my_list=response.xpath('//*[@id="content"]/div/div[1]/ol/li')
        for item in my_list:
            my_item=DoubanItem()
            my_item['movie_number']=item.xpath('./div[@class="item"]//em/text()').extract_first()
            my_item['movie_name']=item.xpath('./div[@class="item"]/div[@class="info"]//a/span[1]/text()').extract_first()
            my_item['movie_tostar']=item.xpath('./div[@class="item"]/div[@class="info"]//div[@class="bd"]/p/text()').extract_first()
            my_item['movie_star']=item.xpath('./div[@class="item"]/div[@class="info"]//div[@class="star"]/span[2]/text()').extract_first()
            my_item['movie_evaluate']=item.xpath('./div[@class="item"]/div[@class="info"]//div[@class="star"]/span[4]/text()').extract_first()
            my_item['movie_introduction']=item.xpath('./div[@class="item"]/div[@class="info"]//p[@class="quote"]/span[1]/text()').extract_first()
            yield my_item
        if next:
            yield  scrapy.Request("https://movie.douban.com/top250"+next[0],self.parse)

4.运行结果

附带源码:下载源码

以上是关于大数据时代下的Scrapy爬虫框架的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

scrapy主动退出爬虫的代码片段(python3)

Python分布式爬虫必学框架Scrapy打造搜索引擎

爬虫相关之浅聊爬虫

初识python爬虫框架Scrapy

爬虫框架--scrapy简介