scrapy+redis增量爬蟲

scrapy適合一次性爬取全站船殉,如果我想多次爬取薪韩,主目錄頁面難免會出現(xiàn)重復(fù),去重增量爬取就很有必要了丧凤。
我在網(wǎng)上搜到了這樣的文章scrapy+redis增量爬取,
邏輯是前一次存取每次爬過的url進數(shù)據(jù)庫募闲,這一次在pipeline中再把數(shù)據(jù)庫中已爬url讀取存進redis里,然后比對這次爬的item里的url息裸,一樣就不存蝇更。

看了這個邏輯,我覺得核心思想有道理呼盆,用redis鍵值比對年扩,不過,更優(yōu)化的邏輯應(yīng)該是我先比對url访圃,重復(fù)的url直接不request厨幻,而不是還去request-response-獲取到item到pipeline再來處理。

所以文章的邏輯都對腿时,只是篩選位置不對况脆,應(yīng)該放在spider里。

import scrapy
from pyquery import PyQuery as pq
from rscrapydouban.items import RscrapydoubanItem
import sqlite3
import redis
import pandas as pd


class JianshuCrawler(scrapy.Spider):
    name = 'jianshu'
    start_urls =['http://www.reibang.com/users/3a2f7a33a8cc/timeline']


    def parse(self, response):
  
        self.conn = sqlite3.connect('jianshu.sqlite')
        self.cur = self.conn.cursor()
        redis_db = redis.Redis(host='127.0.0.1', port='6379')
        redis_data_dict = "dup_url"
        redis_db.flushdb()
        sql = 'select url from js'
        df = pd.read_sql(sql, self.conn)
        self.conn.commit()
        self.conn.close()
        if len(df['url']):
            for url in df['url'].tolist():
                redis_db.hset(redis_data_dict, url, 0)
        res = pq(response.body)
        for title in res('#list-container .title').items():
            urlpa ='http://www.reibang.com'+title.attr('href')
            if redis_db.hexists(redis_data_dict, urlpa):
                pass
            else:
                yield scrapy.Request(urlpa,callback=self.parse_detai)  

  def parse_detail(self,response):
        res = pq(response.body)
        jsitems = RscrapydoubanItem()
        jsitems['name'] = res('.article .title').text()
        jsitems['url'] =response.url
        return jsitems

Redis相關(guān)的有三條:
redis_db.flushdb()清空數(shù)據(jù)庫db批糟,這是粗暴的解決方案格了,可以保證每次都能把所有的url都放入,假如也是增量添加的話徽鼎,可以考慮在item中添加一項flag盛末,已表示這次新增的量,每次讀取數(shù)據(jù)庫得到flag只添加flag相同的項否淤,然后flag+1為這次的項悄但。但是數(shù)據(jù)io一個也是讀,一堆也是讀石抡,所以我倒覺得這樣url的增量無關(guān)緊要吧檐嚣。

redis_db.hset(redis_data_dict, url, 0)
這個是把url作為keys存入redis,至于values無所謂
redis_db.hexists(redis_data_dict, urlpa)
判斷url是否存在了

反思:
1.初始request的額外需求應(yīng)該可以放在spider中間件中的process_start_requests,但是然后剩查重還是要在spider里啰扛,這里又要再連接一次數(shù)據(jù)庫感覺有些麻煩嚎京,故全部放在spider。

2.增量我覺得有兩種侠讯,一種就是上面說的挖藏,每次爬的url不一樣,想從不同頁面繼續(xù)爬厢漩。比方說簡書里新增一篇文章就有一個新的url膜眠,比如什么值得買雖然page1的內(nèi)容永遠是新的,但是每個div里的內(nèi)容頁面確是獨一無二的。
一種是每次新增的內(nèi)容在相同的頁面里宵膨,比如文章的修改架谎,或者論壇的評論之類的,這種可能就要在pipeline里來去重了辟躏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谷扣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捎琐,更是在濱河造成了極大的恐慌会涎,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑞凑,死亡現(xiàn)場離奇詭異末秃,居然都是意外死亡,警方通過查閱死者的電腦和手機籽御,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門练慕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人技掏,你說我怎么就攤上這事铃将。” “怎么了哑梳?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵劲阎,是天一觀的道長。 經(jīng)常有香客問我鸠真,道長哪工,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任弧哎,我火速辦了婚禮,結(jié)果婚禮上稚虎,老公的妹妹穿的比我還像新娘撤嫩。我一直安慰自己,他們只是感情好蠢终,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布序攘。 她就那樣靜靜地躺著,像睡著了一般寻拂。 火紅的嫁衣襯著肌膚如雪程奠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天祭钉,我揣著相機與錄音瞄沙,去河邊找鬼。 笑死,一個胖子當著我的面吹牛距境,可吹牛的內(nèi)容都是我干的申尼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼垫桂,長吁一口氣:“原來是場噩夢啊……” “哼师幕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诬滩,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤霹粥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疼鸟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體后控,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年愚臀,在試婚紗的時候發(fā)現(xiàn)自己被綠了忆蚀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡姑裂,死狀恐怖馋袜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舶斧,我是刑警寧澤欣鳖,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站茴厉,受9級特大地震影響泽台,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矾缓,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一怀酷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗜闻,春花似錦蜕依、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翠肘,卻和暖如春檐束,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背束倍。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工被丧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盟戏,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓晚碾,卻偏偏與公主長得像抓半,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子格嘁,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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

  • Scrapy笛求,Python開發(fā)的一個快速,高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化...
    Evtion閱讀 5,832評論 12 18
  • 前言 scrapy是python界出名的一個爬蟲框架糕簿。Scrapy是一個為了爬取網(wǎng)站數(shù)據(jù)探入,提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)...
    以后的以后_hzh閱讀 2,257評論 0 14
  • 引言 在上篇使用Scrapy爬取知乎用戶信息我們編寫了一個單機的爬蟲,這篇記錄了使用Scrapy-Redis將其重...
    朱曉飛閱讀 6,676評論 1 24
  • 這個項目也是初窺python爬蟲的一個項目懂诗,也是我的畢業(yè)設(shè)計蜂嗽,當時選題的時候,發(fā)現(xiàn)大多數(shù)人選擇的都是網(wǎng)站類殃恒,實在是...
    夢航韓語閱讀 2,985評論 2 37
  • 1植旧、今日狀態(tài)27 昨晚10:00睡,今早5:00起离唐,累計早5第20天病附,連續(xù)早5第14天。 今天才是27天亥鬓,昨天記錄...
    啵啵啵嗤昊Γ花開了閱讀 152評論 0 0