使用Scrapy結(jié)合MongoDB爬取最美應(yīng)用數(shù)據(jù)

又開新坑了,最近迷上了爬蟲禽炬,塞爾達(dá)涧卵,數(shù)據(jù)結(jié)構(gòu)。腹尖。柳恐。時間不夠用了已經(jīng)。

近幾天簡單的學(xué)習(xí)了Scrapy這個框架热幔,簡單好用乐设;

第一步 準(zhǔn)備工作

1、安裝(基于python3.x環(huán)境)

pip3 install scrapy

2绎巨、安裝pycharm
建議購買正版近尚。。场勤。

3戈锻、下載MongoDB和它的GUI工具 下載鏈接;

4歼跟、安裝pymongo

pip3 install pymongo

安裝完畢之后 終端輸入 mongod 啟動數(shù)據(jù)庫服務(wù);

2017-04-28T10:32:43.344+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2017-04-28T10:32:43.345+0800 I NETWORK  [thread1] waiting for connections on port 27017

開始

簡單介紹下Scrapy
簡單使用主要需要了解三個文件格遭;
1哈街、items.py
主要用來接收和暫時保存爬取到的數(shù)據(jù)
2、spider
主要負(fù)責(zé)爬取數(shù)據(jù)
3如庭、pipelines.py
如果需要存入數(shù)據(jù)庫叹卷,在這個文件中操作

爬取數(shù)據(jù)

目標(biāo):爬取最美應(yīng)用網(wǎng)頁端的APP數(shù)據(jù)

1、打開終端

scrapy startproject zhuimei

2坪它、使用 pyCharm打開工程


項目結(jié)構(gòu)

其中main.py 需要自己創(chuàng)建骤竹,為后面調(diào)試做準(zhǔn)備

3、接下來需要將zhuimei文件夾設(shè)置為Sources Root 以便pycharm查找module往毡;
右擊文件夾按下面圖操作


操作過程

4蒙揣、打開items.py,文件中已經(jīng)存在一個和項目同名的Item开瞭,可以使用也可以重新聲明一個類懒震;
在文件中聲明一個類 zuimeiItem;

class zuimeiItem(scrapy.Item):
    id = Field()    # 每個APP的id編號
    title = Field()  #APP 大標(biāo)題
    subtitle = Field() #副標(biāo)題
    url = Field()   #下載鏈接
    date = Field() #時間

5嗤详、在Spiders文件夾下新建文件zuimeispider.py
導(dǎo)入

from scrapy import Spider,Request
from scrapy import Selector
from zhuimei.items import zuimeiItem

聲明一個類繼承于Spider

class ZuiMeiSpider(Spider):
    name = "zuimei"   #啟動爬蟲時以這個名為準(zhǔn)
    allowd_domains = ["http://www.zuimeia.com"]
    start_urls = ['http://www.zuimeia.com']

接下來解析我們爬取到的數(shù)據(jù)
利用火狐瀏覽器的 firebug 和 firepath插件來審查頁面


結(jié)構(gòu)

通過審查我們可以看到 app的title是存儲在 一個類名為“app-title”的標(biāo)簽下面的h1標(biāo)簽下个扰,所以我們使用Xpath獲取文字

sel = Selector(response)
        title_list = sel.xpath(".//*[@class='app-title']/h1/text()").extract()

同理獲取到副標(biāo)題,時間和下載鏈接

        subtitle_list = sel.xpath(".//*[@class='sub-title']/text()").extract()
        date_list = sel.xpath(".//*[@class='pub-time']/text()").extract()
        url_list = sel.xpath(".//*[@class='detail-icon']/@href").extract()

最后將獲取到的數(shù)據(jù)用item接收保存

        for title,subtitle,date,url in zip(title_list,subtitle_list,date_list,url_list):
            item = zuimeiItem()
            item["id"] = url[5:9]
            item["title"] = title
            item["subtitle"] = subtitle
            item["date"] = date
            item["url"] = self.allowd_domains[0] + url #下載需要拼接成完整的url
            yield item

可以在上述代碼中添加 print葱色,輸出爬取到的數(shù)據(jù)
到這步結(jié)束递宅,我們就可以啟動爬蟲,爬取數(shù)據(jù)了可以選擇兩個方法

1苍狰、直接打開終端办龄,進(jìn)入到項目目錄下

scrapy crawl zuimei

2、在新建的main.py中

from  scrapy import cmdline

cmdline.execute("scrapy crawl zuimei".split())

打開 Run下的Edit Configurations


打開

新建一個 python淋昭,并把main.py的路徑添加到Script俐填;


新建一個debug配置

現(xiàn)在可以直接使用pycharm的debug功能了;
兩種方法其實原理上相同翔忽;

將數(shù)據(jù)存入數(shù)據(jù)庫

1英融、打開settings.py文件

#取消注釋
ITEM_PIPELINES = {
   'zhuimei.pipelines.ZhuimeiPipeline': 300,
}

#添加下面代碼
MONGODB_HOST = '127.0.0.1'
MONGODB_PORT = 27017
#本地數(shù)據(jù)庫的名字可以自己起,這邊直接使用 MongoDB自帶
MONGODB_DBNAME = 'local'

2歇式、打開pipelines.py 矢赁,添加下面代碼

class ZhuimeiPipeline(object):
    def __init__(self):
        host = settings['MONGODB_HOST']
        port = settings['MONGODB_PORT']
        dbName = settings['MONGODB_DBNAME']
        client = pymongo.MongoClient(host=host, port=port)
        db = client[dbName]
        self.post = db["zuimei"] # 連接表,表需要在MongoDB compass 中創(chuàng)建

    def process_item(self, item, spider):
        appInfo = dict(item)
        #防止數(shù)據(jù)重復(fù)存入
        self.post.update({'id':item['id']},{'$set':dict(item)},True)
        return item

3贬丛、確認(rèn)數(shù)據(jù)庫服務(wù)已經(jīng)啟動
打開MongoDB Compass, connect给涕;


打開Compass
  在 local數(shù)據(jù)庫中新建表 zuimei豺憔,注意這里一定要和pipelines中表名一致
新建表

4额获、啟動爬蟲,待程序運行結(jié)束后


數(shù)據(jù)

結(jié)語

這只是個簡單的爬蟲恭应,只能爬取當(dāng)前頁面的數(shù)據(jù)抄邀,后面我會補全翻頁抓取的操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昼榛,一起剝皮案震驚了整個濱河市境肾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胆屿,老刑警劉巖奥喻,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異非迹,居然都是意外死亡环鲤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門憎兽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冷离,“玉大人,你說我怎么就攤上這事纯命∥靼” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵亿汞,是天一觀的道長瞭空。 經(jīng)常有香客問我,道長留夜,這世上最難降的妖魔是什么匙铡? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮碍粥,結(jié)果婚禮上鳖眼,老公的妹妹穿的比我還像新娘。我一直安慰自己嚼摩,他們只是感情好钦讳,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枕面,像睡著了一般愿卒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潮秘,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天琼开,我揣著相機與錄音,去河邊找鬼枕荞。 笑死柜候,一個胖子當(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
  • 正文 獨居荒郊野嶺守林人離奇死亡筏餐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年开泽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魁瞪。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡穆律,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出导俘,到底是詐尸還是另有隱情峦耘,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布旅薄,位于F島的核電站辅髓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏少梁。R本人自食惡果不足惜洛口,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凯沪。 院中可真熱鬧第焰,春花似錦、人聲如沸妨马。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烘跺。三九已至湘纵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滤淳,已是汗流浹背梧喷。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铺敌。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓绊困,卻偏偏與公主長得像,于是被迫代替她去往敵國和親适刀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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

  • 這兩天摸索了下scrapy煤蹭,剛看文檔的時候覺得有點生無可戀笔喉,scrapy框架個人還是覺得比較難懂的,需要學(xué)習(xí)的地方...
    Treehl閱讀 5,631評論 7 10
  • 最近想在工作相關(guān)的項目上做技術(shù)改進(jìn)硝皂,需要全而準(zhǔn)的車型數(shù)據(jù)常挚,尋尋覓覓而不得,所以就只能自己動手豐衣足食稽物,到網(wǎng)上獲(竊...
    littlelory閱讀 3,895評論 7 19
  • 序言第1章 Scrapy介紹第2章 理解HTML和XPath第3章 爬蟲基礎(chǔ)第4章 從Scrapy到移動應(yīng)用第5章...
    SeanCheney閱讀 15,068評論 13 61
  • 目錄 第三十章:安然的直覺 下午的課程結(jié)束了奄毡,水月吃了飯,寫完了作業(yè)贝或,直接來到專上靈術(shù)操縱課的體育館里吼过。 泗黎路是...
    默默數(shù)梨閱讀 255評論 0 1
  • 不管是說走就走的旅行羊赵,還是我要到世界看看趟佃,實際都看不到什么。 人開拓視野是要靠拓寬發(fā)展空間昧捷,自我定位之后在優(yōu)勢方面...
    江仙兒閱讀 159評論 0 1