Redis 之存儲盜墓筆記正文

setting.py

# -*- coding: utf-8 -*-
import scrapy_redis

BOT_NAME = 'CrawlWithRedis'

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

ITEM_PIPELINES = {'CrawlWithRedis.pipelines.CrawlWithRedisPipeline':300}

# Obey robots.txt rules
ROBOTSTXT_OBEY = True

# Redis 數(shù)據(jù)庫設(shè)置
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
REDIS_URL = None
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379

# MongonDB 設(shè)置
MONGODB_HOST    = '127.0.0.1'
MONGODB_PORT    = 27017
MONGODB_DBNAME  = 'XiaoYunKeji'
MONGODB_DOCNAME = 'daomubiji'

items.py

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

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

from scrapy import Item, Field

class CrawlWithRedisItem(Item):
    bookName    = Field()
    bookTitle   = Field()
    chapterNum  = Field()
    chapterName = Field()
    chapterURL  = Field()
    text        = Field()

pipelines.py

# -*- coding: utf-8 -*-
# Don't forget to add your pipeline to the ITEM_PIPELINES setting

from scrapy.conf import settings
from CrawlWithRedis.items import CrawlWithRedisItem
import pymongo

class CrawlWithRedisPipeline(object):
    def __init__(self):
        # 初始化 mongodb 數(shù)據(jù)庫
        host = settings['MONGODB_HOST']
        port = settings['MONGODB_PORT']
        dbName = settings['MONGODB_NAME']
        # 連接
        db = pymongo.MongoClient(host=host, port=port)
        self.post = db[settings['MONGODB_DOCNAME']]

    def process_item(self, item, spider):
        # 將 item 轉(zhuǎn)換為 dict
        item_info = dict(item)
        # 插入記錄
        self.post.insert(item_info)
        return item

spiders.py

#-*- coding:utf-8 -*-
from scrapy.http import Request
from scrapy.selector import Selector
from scrapy_redis.spiders import RedisSpider
from CrawlWithRedis.items import CrawlWithRedisItem

class spider(RedisSpider):
    name = "CrawlWithRedis"
    redis_key = 'CrawlWithRedis: start_urls'
    start_urls = ['http://daomubiji.com/']

    def parse(self, response):
        selector = Selector(response)
        tables = selector.xpath('//table')
        for each_table in tables:
            bookName = each_table.xpath('tr/td[@colspan="3"]/center/h2/text()').extract_first()
            contents = each_table.xpath('tr/td/a/text()').extract()
            urls     = each_table.xpath('tr/td/a/@href').extract()
            for i in range(len(urls)):
                item = CrawlWithRedisItem()
                item['bookName'] = bookName
                item['chapterURL'] = urls[i]

                try:
                    item['bookTitle']  = contents[i].split(' ')[0]
                    item['chapterNum'] = contents[i].split(' ')[1]
                except Exception as e:
                    continue
                try:
                    item['chapterName'] = content[i].split(' ')[2]
                except Exception as e:
                    item['chapterName'] = content[i].split(' ')[1][-3:]
                yield Request(urls[i], callback=self.parseContent, meta={'item':item})

    def parse_Content(self, response):
        # 把上面的 item 傳遞下來
        item = response.meta['item']
        selector = Selector(response)
        contents = selector.xpath('//div[@class="content"]/p/text()').extract()
        text = "\n".join(contents)
        item['text'] = text
        yield item

目前版本 scrapy 1.2 多矮, Python 3.5 運(yùn)行報錯。scrapy github 地址亏较。 暫時未搜索到解決辦法, 網(wǎng)上說可能是因為版本問題。改天在 CentOS 上測試下魄鸦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宴杀,一起剝皮案震驚了整個濱河市癣朗,隨后出現(xiàn)的幾起案子拾因,更是在濱河造成了極大的恐慌,老刑警劉巖旷余,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢记,死亡現(xiàn)場離奇詭異,居然都是意外死亡正卧,警方通過查閱死者的電腦和手機(jī)蠢熄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炉旷,“玉大人签孔,你說我怎么就攤上這事叉讥。” “怎么了饥追?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵图仓,是天一觀的道長。 經(jīng)常有香客問我但绕,道長救崔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任捏顺,我火速辦了婚禮六孵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幅骄。我一直安慰自己劫窒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布拆座。 她就那樣靜靜地躺著烛亦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懂拾。 梳的紋絲不亂的頭發(fā)上煤禽,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音岖赋,去河邊找鬼檬果。 笑死,一個胖子當(dāng)著我的面吹牛唐断,可吹牛的內(nèi)容都是我干的选脊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼脸甘,長吁一口氣:“原來是場噩夢啊……” “哼恳啥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起丹诀,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤钝的,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铆遭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硝桩,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年枚荣,在試婚紗的時候發(fā)現(xiàn)自己被綠了碗脊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡橄妆,死狀恐怖衙伶,靈堂內(nèi)的尸體忽然破棺而出祈坠,到底是詐尸還是另有隱情,我是刑警寧澤矢劲,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布颁虐,位于F島的核電站,受9級特大地震影響卧须,放射性物質(zhì)發(fā)生泄漏另绩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一花嘶、第九天 我趴在偏房一處隱蔽的房頂上張望笋籽。 院中可真熱鬧,春花似錦椭员、人聲如沸车海。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侍芝。三九已至,卻和暖如春埋同,著一層夾襖步出監(jiān)牢的瞬間州叠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工凶赁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咧栗,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓虱肄,卻偏偏與公主長得像致板,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咏窿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容