大数据时代下的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 # # Dont 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.运行结果
附带源码:
上一篇:
JS实现多线程数据分片下载
下一篇:
大数据基础-数据存储组件介绍