(2018-05-21.Python從Zero到One)5、(爬蟲)scrapy實戰(zhàn)項目__1.5.5(實戰(zhàn)項目五)用pymongo保存數(shù)據(jù)到MongoDB中

用Pymongo保存數(shù)據(jù)

爬取豆瓣電影top250movie.douban.com/top250的電影數(shù)據(jù),并保存在MongoDB中。

items.py

class DoubanspiderItem(scrapy.Item):
    # 電影標(biāo)題
    title = scrapy.Field()
    # 電影評分
    score = scrapy.Field()
    # 電影信息
    content = scrapy.Field()
    # 簡介
    info = scrapy.Field()

spiders/douban.py

import scrapy
from doubanSpider.items import DoubanspiderItem

class DoubanSpider(scrapy.Spider):
    name = "douban"
    allowed_domains = ["movie.douban.com"]
    start = 0
    url = 'https://movie.douban.com/top250?start='
    end = '&filter='
    start_urls = [url + str(start) + end]

    def parse(self, response):

        item = DoubanspiderItem()

        movies = response.xpath("http://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)

pipelines.py


from scrapy.conf import settings
import pymongo

class DoubanspiderPipeline(object):
    def __init__(self):
        # 獲取setting主機名、端口號和數(shù)據(jù)庫名
        host = settings['MONGODB_HOST']
        port = settings['MONGODB_PORT']
        dbname = settings['MONGODB_DBNAME']

        # pymongo.MongoClient(host, port) 創(chuàng)建MongoDB鏈接
        client = pymongo.MongoClient(host=host,port=port)

        # 指向指定的數(shù)據(jù)庫
        mdb = client[dbname]
        # 獲取數(shù)據(jù)庫里存放數(shù)據(jù)的表名
        self.post = mdb[settings['MONGODB_DOCNAME']]

    def process_item(self, item, spider):
        data = dict(item)
        # 向指定的表里添加數(shù)據(jù)
        self.post.insert(data)
        return item

settings.py

BOT_NAME = 'doubanSpider'

SPIDER_MODULES = ['doubanSpider.spiders']
NEWSPIDER_MODULE = 'doubanSpider.spiders'

ITEM_PIPELINES = {
        'doubanSpider.pipelines.DoubanspiderPipeline' : 300
        }

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'

# MONGODB 主機環(huán)回地址127.0.0.1
MONGODB_HOST = '127.0.0.1'
# 端口號,默認是27017
MONGODB_PORT = 27017
# 設(shè)置數(shù)據(jù)庫名稱
MONGODB_DBNAME = 'DouBan'
# 存放本次數(shù)據(jù)的表名稱
MONGODB_DOCNAME = 'DouBanMovies'

運行

啟動MongoDB數(shù)據(jù)庫需要兩個命令:

mongod:是mongoDB數(shù)據(jù)庫進程本身
mongo:是命令行shell客戶端

sudo mongod # 首先啟動數(shù)據(jù)庫服務(wù),再執(zhí)行Scrapy
sudo mongo # 啟動數(shù)據(jù)庫shell

在mongo shell下使用命令:

# 查看當(dāng)前數(shù)據(jù)庫
> db

# 列出所有的數(shù)據(jù)庫
> show dbs

# 連接DouBan數(shù)據(jù)庫
> use DouBan

# 列出所有表
> show collections

# 查看表里的數(shù)據(jù)
> db.DouBanMoives.find()

day55_爬蟲-scrapy實戰(zhàn)項目-01.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)python時,爬蟲是一種簡單上手的方式,應(yīng)該也是一個必經(jīng)階段。本項目用Scrapy框架實現(xiàn)了抓取豆瓣top2...
    豌豆花下貓閱讀 1,559評論 0 6
  • Scrapy,Python開發(fā)的一個快速,高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化...
    Evtion閱讀 6,187評論 12 18
  • 這兩天摸索了下scrapy,剛看文檔的時候覺得有點生無可戀,scrapy框架個人還是覺得比較難懂的,需要學(xué)習(xí)的地方...
    Treehl閱讀 5,844評論 7 10
  • 很久很久以前??嗪I掀≈恢恍〈?。都知苦海無涯,怎能靠岸? 隨著歲月的推移。風(fēng)為小船帶來的希望。 時間的流逝...
    盡快回來呀閱讀 358評論 0 1
  • 我本不想去說一些什么或者是表達些什么,但看著身邊的你們回顧著那些時光的時候,突然有些動容了。 感謝與你們最好的相遇...
    深海的藍閱讀 254評論 3 5

友情鏈接更多精彩內(nèi)容