大数据时代下的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爬虫框架的主要内容,如果未能解决你的问题,请参考以下文章