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