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