Scrapy實戰之儲存在MongoDB中

2021-10-02 21:15:23 字數 3342 閱讀 1793

爬取豆瓣電影top250的電影資料(並儲存在mongodb中。

scrapy startproject douban

scrapy genspider doubanspider "movie.douban.com"

class doubanspideritem(scrapy.item):

# 電影標題

title = scrapy.field()

# 電影評分

score = scrapy.field()

# 電影資訊

content = scrapy.field()

# 簡介

info = scrapy.field()

import scrapy

from doubanspider.items import doubanspideritem

class doubanspider(scrapy.spider):

name = "douban"

allowed_domains = ["movie.douban.com"]

start = 0

url = ''

end = '&filter='

start_urls = [url + str(start) + end]

def parse(self, response):

item = doubanspideritem()

movies = response.xpath("//div[@class=\'info\']")

for each in movies:

title = each.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract()

content = each.xpath('div[@class="bd"]/p/text()').extract()

score = each.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()

info = each.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()

item['title'] = title[0]

# 以;作為分隔,將content列表裡所有元素合併成乙個新的字串

item['content'] = ';'.join(content)

item['score'] = score[0]

item['info'] = info[0]

# 提交item

yield item

if self.start <= 225:

self.start += 25

yield scrapy.request(self.url + str(self.start) + self.end, callback=self.parse)

# -*- coding: utf-8 -*-

import pymongo

from scrapy.utils.project import get_project_settings

class doubanpipeline(object):

def __init__(self):

settings = get_project_settings()

host = settings["mongodb_host"]

port = settings["mongodb_port"]

dbname = settings["mongodb_dbname"]

sheetname= settings["mongodb_sheetname"]

# 建立mongodb資料庫鏈結

client = pymongo.mongoclient(host = host, port = port)

# 指定資料庫

mydb = client[dbname]

# 存放資料的資料庫表名

self.sheet = mydb[sheetname]

def process_item(self, item, spider):

data = dict(item)

self.sheet.insert(data)

return item

bot_name = 'doubanspider'

spider_modules = ['doubanspider.spiders']

newspider_module = 'doubanspider.spiders'

item_pipelines =

# crawl responsibly by identifying yourself (and your website) on the user-agent

# mongodb 主機環迴位址127.0.0.1

mongodb_host = '127.0.0.1'

# 埠號,預設是27017

mongodb_port = 27017

# 設定資料庫名稱

mongodb_dbname = 'douban'

# 存放本次資料的表名稱

mongodb_docname = 'doubanmovies'

啟動mongodb資料庫需要兩個命令:

mongod:是mongodb資料庫程序本身

mongo:是命令列shell客戶端

sudo mongod # 首先啟動資料庫服務,再執行scrapy

sudo mongo # 啟動資料庫shell

在mongo shell下使用命令:

# 檢視當前資料庫

> db

# 列出所有的資料庫

> show dbs

# 連線douban資料庫

> use douban

# 列出所有表

> show collections

# 檢視表裡的資料

> db.doubanmoives.find()

驗證結果如下:

Scrapy實戰之儲存在Excel中

爬取自己在csdn部落格的資料 並儲存在excel中。scrapy startproject csdn scrapy genspider csdnspider blog.csdn.net blog.csdn.net coding utf 8 import scrapy class csdnitem ...

Scrapy學習篇(四)之資料儲存

修改items.py檔案來定義我們的item item 是儲存爬取到的資料的容器 其使用方法和python字典類似。雖然你也可以在scrapy中直接使用dict,但是item提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤。簡單的來說,你所要儲存的任何的內容,都需要使用item來定義,比如我們現...

虛擬化實戰 儲存設計之七Block Size

在 實戰儲存設計之六latnecy 我們介紹latency過高的原因和一些建議。本文重點分析block size對效能特別是latency的影響。什麼是block size?block size這個詞在不同的語境中有不同含義。在此文中指的是在os中執行的應用發出乙個io讀或寫請求所傳送的資料單元的大...