摘要:運(yùn)行一下我們的代碼,然后刷新下數(shù)據(jù)庫,可看到數(shù)據(jù)已經(jīng)保存到中了查看數(shù)據(jù)庫內(nèi)容很清晰,每一項(xiàng)都有保存
抓取論壇、貼吧這種多分頁的信息時(shí),沒接觸scrapy之前,是前確定有多少頁,使用for循環(huán)抓取。這方法略顯笨重,使用scrapy則可以直接組合下一頁的鏈接,然后傳給request持續(xù)進(jìn)行抓取,一直到?jīng)]有下一頁鏈接為止。
還是以官方教程的網(wǎng)站為例子,先分析下元素:
可以看到下一頁的標(biāo)簽:
Next
其中的href屬性值/page/2與www.quotes.toscrape.com組合起來就是下一頁的網(wǎng)址,同理第二頁next的href屬性值組合起來就是第三頁,因此只要我們判斷出是否有下一頁的關(guān)鍵字,就可以進(jìn)行持續(xù)抓取。
上代碼:
import scrapy class myspider(scrapy.Spider): # 設(shè)置爬蟲名稱 name = "get_quotes" # 設(shè)置起始網(wǎng)址 start_urls = ["http://quotes.toscrape.com"] def parse(self, response): #使用 css 選擇要素進(jìn)行抓取,如果喜歡用BeautifulSoup之類的也可以 #先定位一整塊的quote,在這個(gè)網(wǎng)頁塊下進(jìn)行作者、名言,標(biāo)簽的抓取 for quote in response.css(".quote"): yield { "author" : quote.css("small.author::text").extract_first(), "tags" : quote.css("div.tags a.tag::text").extract(), "content" : quote.css("span.text::text").extract_first() } # 使用xpath獲取next按鈕的href屬性值 next_href = response.xpath("http://li[@class="next"]/a/@href").extract_first() # 判斷next_page的值是否存在 if next_href is not None: # 如果下一頁屬性值存在,則通過urljoin函數(shù)組合下一頁的url: # www.quotes.toscrape.com/page/2 next_page = response.urljoin(next_href) #回調(diào)parse處理下一頁的url yield scrapy.Request(next_page,callback=self.parse)
下面是處理結(jié)果:
可以看到一直抓取了10頁,此網(wǎng)站也只有10頁
整個(gè)網(wǎng)站的名人名言就全部抓取到了,是不是很方便
現(xiàn)在只是把抓取得到的只是打印到屏幕上,并沒有存儲(chǔ)起來,接下來我們使用Mongodb進(jìn)行存儲(chǔ),mongodb的優(yōu)點(diǎn)可自行g(shù)oogle,這里就不說了。從官網(wǎng)下載,參考官方安裝教程進(jìn)行配置安裝。
要使用Mongodb需要pymongo,直接pip install pymongo
先演示下直接存儲(chǔ),當(dāng)做Mongodb存儲(chǔ)例子,實(shí)際不推薦這么使用:
import scrapy # 導(dǎo)入pymongo import pymongo class myspider(scrapy.Spider): # 設(shè)置爬蟲名稱 name = "get_quotes" # 設(shè)置起始網(wǎng)址 start_urls = ["http://quotes.toscrape.com"] # 配置client,默認(rèn)地址localhost,端口27017 client = pymongo.MongoClient("localhost",27017) # 創(chuàng)建一個(gè)數(shù)據(jù)庫,名稱store_quote db_name = client["store_quotes"] # 創(chuàng)建一個(gè)表 quotes_list = db_name["quotes"] def parse(self, response): #使用 css 選擇要素進(jìn)行抓取,如果喜歡用BeautifulSoup之類的也可以 #先定位一整塊的quote,在這個(gè)網(wǎng)頁塊下進(jìn)行作者、名言,標(biāo)簽的抓取 for quote in response.css(".quote"): # 將頁面抓取的數(shù)據(jù)存入mongodb,使用insert yield self.quotes_list.insert({ "author" : quote.css("small.author::text").extract_first(), "tags" : quote.css("div.tags a.tag::text").extract(), "content" : quote.css("span.text::text").extract_first() }) # 使用xpath獲取next按鈕的href屬性值 next_href = response.xpath("http://li[@class="next"]/a/@href").extract_first() # 判斷next_page的值是否存在 if next_href is not None: # 如果下一頁屬性值存在,則通過urljoin函數(shù)組合下一頁的url: # www.quotes.toscrape.com/page/2 next_page = response.urljoin(next_href) #回調(diào)parse處理下一頁的url yield scrapy.Request(next_page,callback=self.parse)
如果使用的是pycharm編輯器,有一個(gè)mongodb插件,可以方便的查看數(shù)據(jù)庫,Mongo plugin,在plugin里面添加
添加之后,重啟pycharm,可以在setting -> other setting里面看到Mongo Servers,點(diǎn)擊Mongo servers配置mongodb:
Label隨意填寫,server url已經(jīng)有默認(rèn),test一下,連接成功確認(rèn)即可,完成之后,可在pycharm左側(cè)看到插件mongo explorer,點(diǎn)擊展開可看到數(shù)據(jù)庫。
OK運(yùn)行一下我們的代碼,
scrapy crawl get_quotes
然后刷新下數(shù)據(jù)庫,可看到數(shù)據(jù)已經(jīng)保存到mongodb中了
查看數(shù)據(jù)庫內(nèi)容:
很清晰,每一項(xiàng)都有保存
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38563.html
摘要:最近真是忙的吐血。。。上篇寫的是直接在爬蟲中使用,這樣不是很好,下使用才是正經(jīng)方法。 最近真是忙的吐血。。。 上篇寫的是直接在爬蟲中使用mongodb,這樣不是很好,scrapy下使用item才是正經(jīng)方法。在item中定義需要保存的內(nèi)容,然后在pipeline處理item,爬蟲流程就成了這樣: 抓取 --> 按item規(guī)則收集需要數(shù)據(jù) -->使用pipeline處理(存儲(chǔ)等) 定義it...
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...
摘要:學(xué)習(xí)爬蟲的背景了解。但是搜索引擎蜘蛛的爬行是被輸入了一定的規(guī)則的,它需要遵從一些命令或文件的內(nèi)容,如標(biāo)注為的鏈接,或者是協(xié)議。不同領(lǐng)域不同背景的用戶往往具有不同的檢索目的和需求,搜索引擎無法提供針對具體某個(gè)用戶的搜索結(jié)果。 學(xué)習(xí)python爬蟲的背景了解。 大數(shù)據(jù)時(shí)代數(shù)據(jù)獲取方式 如今,人類社會(huì)已經(jīng)進(jìn)入了大數(shù)據(jù)時(shí)代,數(shù)據(jù)已經(jīng)成為必不可少的部分,可見數(shù)據(jù)的獲取非常重要,而數(shù)據(jù)的獲取的方式...
閱讀 881·2021-11-15 11:37
閱讀 3619·2021-11-11 16:55
閱讀 3284·2021-11-11 11:01
閱讀 1008·2019-08-30 15:43
閱讀 2755·2019-08-30 14:12
閱讀 695·2019-08-30 12:58
閱讀 3397·2019-08-29 15:19
閱讀 2037·2019-08-29 13:59