筆者聲明:只用於學習交流,不用於其餘途徑。源代碼已上傳github。githu地址:https://github.com/Erma-Wang/Spider
筆者聲明:只用於學習交流,不用於其餘途徑。源代碼已上傳github。githu地址:https://github.com/Erma-Wang/Spider
筆者聲明:只用於學習交流,不用於其餘途徑。源代碼已上傳github。githu地址:https://github.com/Erma-Wang/Spiderpython
重要的事情說三遍~~~!!!只用於學習交流,私自用於其餘途徑,後果自負!!!
github源代碼地址https://github.com/Erma-Wang/Spider(注意,本倉庫還有其餘的小爬蟲,本文章講解的是DouBanSpider···),別忘了給個star哦 ! @、@git
筆者是iOS開發從業者,可是我相信不少小夥伴也和我同樣,並非Python開發者,卻對爬蟲技術(scrapy)頗感興趣兒~以前寫過一些iOS的博客,最近在寫爬蟲技術分享的博客的時候,發現不少小夥伴對爬蟲技術比對iOS興趣點來的大~這時候,我就在想,爲何叻?github
我認爲爬蟲技術基本原理就三點~下載數據~匹配數據~保存數據~
,原本一件很簡單的事兒,卻有這麼多的爬蟲愛好者去研究~去探索~而且還誕生了偉大的框架scrapy
、pyspider
,可是我的認爲其是一種工具
。這麼多的非python開發者對爬蟲技術(scrapy、pyspider)感興趣,我想是由於爬蟲技術屬於逆向工程
吧~人們一直以來對正向的思惟,正向的發展,正向的軟件開發等等一切事物指揮若定,卻不多有人對一件事物,一件物品,一個軟件,甚至一個網站開發出來後反向對到其製做過程,製做工序,製做原料做其推導~古文說以古爲鏡,能夠知興替
,我想,對一件已經制做出來的物品,推導其製做過程,比製做這件物品更來得有興趣吧~mongodb
以前在上一篇博客中有些小夥伴給我了一些不錯的idea~數據庫
筆者在以前的博客裏寫過京東的Spider,首先很是感謝小夥伴對個人支持~在此,筆者寫了一個入門級別的小爬蟲,給一些想學scrapy可是尚未開始學習scrapy的小夥伴講解一些scrapy的一些基礎知識吧~本文雖然對於scrapy來講徹底算是入門級別,可是您應該具備必定的網頁編程基礎和網絡基礎知識。本文中主要講解mongodb的基本使用,附帶一個實戰小爬蟲~編程
仍是同樣,scrapy不作詳細解釋~有疑問,找度娘~數組
標題:title = Field()
電影信息:movieInfo = Field()
評分:star = Field()
經典名言:quote = Field()網絡
先看看目標網站吧~是的,網上不少用豆瓣作爬蟲教程,由於比較好爬取吧~筆者在這也用豆瓣爬蟲來做爲演示~
框架
是的,和常規網站同樣一個li標籤表明一個小模塊的整合~思路先把每一個li抓取出來放入一個數組中,這也是常規思路,先看關鍵代碼吧~scrapy
selector = Selector(response)
Movies = selector.xpath('//div[@class="info"]')
for in循環取出~沒啥說的
抓取數據~
title = eachMovie.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract() movieInfo = eachMovie.xpath('div[@class="bd"]/p/text()').extract() star = eachMovie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract() quote = eachMovie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()
熟悉MVC的小夥伴在學習scrapy的時候都應該知道~item在這裏就至關於MVC裏面的Model。
item['title'] = title item['movieInfo'] = ';'.join(movieInfo) item['star'] = star item['quote'] = quote
抓取下一頁href的url,遞歸調用Request
nextLink = selector.xpath('//span[@class="next"]/link/@href').extract()
if nextLink:
nextLink = nextLink[0]
print(nextLink)
yield Request(self.url + nextLink,callback=self.parse)
本博客主要講解的是mongodb和scrapy配合使用~下面看看代碼怎麼寫的吧~
ITEM_PIPELINES = ['DouBanSpider.pipelines.DoubanspiderPipeline']
MONGODB_HOST = '127.0.0.1'
MONGODB_PORT = 27017
MONGODB_DBNAME = 'DouBan'
MONGODB_DOCNAME = 'DouBanDy'
咱們藉助pymongo這個模塊來配置Pipeline吧~導入pymongo模塊後~
只作關鍵兩步講解~
client = pymongo.MongoClient(host=host,port=port)
tdb = client[dbName]
self.post = tdb[settings['MONGODB_DOCNAME']]
self.post.insert(dyInfo)
好吧~看看效果吧~
mongodb屬於非關係型數據庫~是一個基於分佈式文件存儲的數據庫。由C++語言編寫。。。好吧~這些廢話我不在這裏說了~本身百度百科吧~我寫博客寫你能在其餘地方都能找到的理論性的知識~簡單的說說使用mongodb的安裝和使用吧~
網上有一大把一大把mongodb的安裝教程~本身搜索去吧~筆者是經過brew安裝的mongodb,由於筆者使用的Mac,嘗試過不少種安裝mongodb的方法都未成功~最後,嘗試了brew安裝成功~若是讀者使用的是Mac,請嘗試嘗試brew安裝吧~
在控制檯輸入 mongod
,這個指令是啓動mongod的服務,當出現下圖,表示成功~
啓動mongodb服務後從新打開一個新的控制檯窗口~啓動mongodb數據庫~在新的控制檯窗口輸入mongo
,這時候會出現下面的界面~表示成功~
在Mac上最好用的就是Robmongo把~界面還行~基本的功能也有~
轉載請註明來自吃飯睡覺擼碼的博客 http://www.cnblogs.com/Erma-king/,幷包含相關連接。