摘要:最近真是忙的吐血。。。上篇寫的是直接在爬蟲中使用,這樣不是很好,下使用才是正經方法。
最近真是忙的吐血。。。
上篇寫的是直接在爬蟲中使用mongodb,這樣不是很好,scrapy下使用item才是正經方法。
在item中定義需要保存的內容,然后在pipeline處理item,爬蟲流程就成了這樣:
定義item,在items.py中定義抓取內容
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html import scrapy class GetquotesItem(scrapy.Item): # define the fields for your item here like: # 定義我們需要抓取的內容: # 1.名言內容 # 2.作者 # 3.標簽 content = scrapy.Field() author = scrapy.Field() tags = scrapy.Field()
我們將數據庫的配置信息保存在setting.py文件中,方便調用
MONGODB_HOST = "localhost" MONGODB_PORT = 27017 MONGODB_DBNAME = "store_quotes2" MONGODB_TABLE = "quotes2"
另外,在setting.py文件中一點要將pipeline注釋去掉,要不然pipeline不會起作用:
#ITEM_PIPELINES = { # "getquotes.pipelines.SomePipeline": 300, #}
改成
ITEM_PIPELINES = { "getquotes.pipelines.GetquotesPipeline": 300, }
現在在pipeline.py中定義處理item方法:
# -*- coding: utf-8 -*- # Define your item pipelines here # # Don"t forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html # 將setting導入,以使用定義內容 from scrapy.conf import settings import pymongo class GetquotesPipeline(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.table = db[settings["MONGODB_TABLE"]] # 處理item def process_item(self, item, spider): # 使用dict轉換item,然后插入數據庫 quote_info = dict(item) self.table.insert(quote_info) return item
相應的,myspider.py中的代碼變化一下
import scrapy import pymongo # 別忘了導入定義的item from getquotes.items import GetquotesItem 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() }) """ item = GetquotesItem() item["author"] = quote.css("small.author::text").extract_first() item["content"] = quote.css("span.text::text").extract_first() item["tags"] = quote.css("div.tags a.tag::text").extract() yield item # 使用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)
可以再scrapy輸出信息中看到pipeline啟用
再來看看數據庫保存情況
完美保存
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38619.html
摘要:是最有名的爬蟲框架之一,可以很方便的進行抓取,并且提供了很強的定制型,這里記錄簡單學習的過程和在實際應用中會遇到的一些常見問題一安裝在安裝之前有一些依賴需要安裝,否則可能會安裝失敗,的選擇器依賴于,還有網絡引擎,下面是下安裝的過程下安裝安裝 scrapy是python最有名的爬蟲框架之一,可以很方便的進行web抓取,并且提供了很強的定制型,這里記錄簡單學習的過程和在實際應用中會遇到的一...
摘要:組件引擎負責控制數據流在系統中所有組件中流動,并在相應動作發生時觸發事件。下載器下載器負責獲取頁面數據并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。 Scrapy 是用Python實現一個為爬取網站數據、提取結構性數據而編寫的應用框架。 一、Scrapy框架簡介 Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 ...
摘要:解析的方法,每個初始完成下載后將被調用,調用的時候傳入從每一個傳回的對象來作為唯一參數,主要作用如下負責解析返回的網頁數據,提取結構化數據生成生成需要下一頁的請求。 Scrapy 框架 Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,用途非常廣泛。 框架的力量,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常...
摘要:使用工具一使用創建項目過程略二安裝框架三創建項目創建爬蟲項目創建爬蟲,先進入爬蟲項目目錄創建完成后項目目錄如下目錄下的的就是我們的爬蟲文件四打開編寫爬蟲的代碼進入需要爬去的書的目錄,找到開始設置鬼吹燈圖書目錄在創建項目的時候,篩選的地址為打 使用工具,ubuntu,python,pycharm一、使用pycharm創建項目:過程略二、安裝scrapy框架 pip install Scr...
摘要:很多人學習爬蟲的第一驅動力就是爬取各大網站的妹子圖片,比如比較有名的。最后我們只需要運行程序,即可執行爬取,程序運行命名如下完整代碼我已上傳到微信公眾號后臺,在癡海公眾號后臺回復即可獲取。本文首發于公眾號癡海,后臺回復即可獲取最新編程資源。 showImg(https://segmentfault.com/img/remote/1460000016780800); 閱讀文本大概需要 1...
閱讀 3374·2022-01-04 14:20
閱讀 3116·2021-09-22 15:08
閱讀 2197·2021-09-03 10:44
閱讀 2318·2019-08-30 15:44
閱讀 1498·2019-08-29 18:40
閱讀 2662·2019-08-29 17:09
閱讀 2992·2019-08-26 13:53
閱讀 3223·2019-08-26 13:37