摘要:最近真是忙的吐血。。。上篇寫的是直接在爬蟲中使用,這樣不是很好,下使用才是正經(jīng)方法。
最近真是忙的吐血。。。
上篇寫的是直接在爬蟲中使用mongodb,這樣不是很好,scrapy下使用item才是正經(jīng)方法。
在item中定義需要保存的內(nèi)容,然后在pipeline處理item,爬蟲流程就成了這樣:
定義item,在items.py中定義抓取內(nèi)容
# -*- 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: # 定義我們需要抓取的內(nèi)容: # 1.名言內(nèi)容 # 2.作者 # 3.標(biāo)簽 content = scrapy.Field() author = scrapy.Field() tags = scrapy.Field()
我們將數(shù)據(jù)庫的配置信息保存在setting.py文件中,方便調(diào)用
MONGODB_HOST = "localhost" MONGODB_PORT = 27017 MONGODB_DBNAME = "store_quotes2" MONGODB_TABLE = "quotes2"
另外,在setting.py文件中一點(diǎn)要將pipeline注釋去掉,要不然pipeline不會(huì)起作用:
#ITEM_PIPELINES = { # "getquotes.pipelines.SomePipeline": 300, #}
改成
ITEM_PIPELINES = { "getquotes.pipelines.GetquotesPipeline": 300, }
現(xiàn)在在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導(dǎo)入,以使用定義內(nèi)容 from scrapy.conf import settings import pymongo class GetquotesPipeline(object): # 連接數(shù)據(jù)庫 def __init__(self): # 獲取數(shù)據(jù)庫連接信息 host = settings["MONGODB_HOST"] port = settings["MONGODB_PORT"] dbname = settings["MONGODB_DBNAME"] client = pymongo.MongoClient(host=host, port=port) # 定義數(shù)據(jù)庫 db = client[dbname] self.table = db[settings["MONGODB_TABLE"]] # 處理item def process_item(self, item, spider): # 使用dict轉(zhuǎn)換item,然后插入數(shù)據(jù)庫 quote_info = dict(item) self.table.insert(quote_info) return item
相應(yīng)的,myspider.py中的代碼變化一下
import scrapy import pymongo # 別忘了導(dǎo)入定義的item from getquotes.items import GetquotesItem 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() }) """ 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函數(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)
可以再scrapy輸出信息中看到pipeline啟用
再來看看數(shù)據(jù)庫保存情況
完美保存
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38619.html
摘要:是最有名的爬蟲框架之一,可以很方便的進(jìn)行抓取,并且提供了很強(qiáng)的定制型,這里記錄簡單學(xué)習(xí)的過程和在實(shí)際應(yīng)用中會(huì)遇到的一些常見問題一安裝在安裝之前有一些依賴需要安裝,否則可能會(huì)安裝失敗,的選擇器依賴于,還有網(wǎng)絡(luò)引擎,下面是下安裝的過程下安裝安裝 scrapy是python最有名的爬蟲框架之一,可以很方便的進(jìn)行web抓取,并且提供了很強(qiáng)的定制型,這里記錄簡單學(xué)習(xí)的過程和在實(shí)際應(yīng)用中會(huì)遇到的一...
摘要:組件引擎負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)中所有組件中流動(dòng),并在相應(yīng)動(dòng)作發(fā)生時(shí)觸發(fā)事件。下載器下載器負(fù)責(zé)獲取頁面數(shù)據(jù)并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。 Scrapy 是用Python實(shí)現(xiàn)一個(gè)為爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 一、Scrapy框架簡介 Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 ...
摘要:解析的方法,每個(gè)初始完成下載后將被調(diào)用,調(diào)用的時(shí)候傳入從每一個(gè)傳回的對象來作為唯一參數(shù),主要作用如下負(fù)責(zé)解析返回的網(wǎng)頁數(shù)據(jù),提取結(jié)構(gòu)化數(shù)據(jù)生成生成需要下一頁的請求。 Scrapy 框架 Scrapy是用純Python實(shí)現(xiàn)一個(gè)為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,用途非常廣泛。 框架的力量,用戶只需要定制開發(fā)幾個(gè)模塊就可以輕松的實(shí)現(xiàn)一個(gè)爬蟲,用來抓取網(wǎng)頁內(nèi)容以及各種圖片,非常...
摘要:使用工具一使用創(chuàng)建項(xiàng)目過程略二安裝框架三創(chuàng)建項(xiàng)目創(chuàng)建爬蟲項(xiàng)目創(chuàng)建爬蟲,先進(jìn)入爬蟲項(xiàng)目目錄創(chuàng)建完成后項(xiàng)目目錄如下目錄下的的就是我們的爬蟲文件四打開編寫爬蟲的代碼進(jìn)入需要爬去的書的目錄,找到開始設(shè)置鬼吹燈圖書目錄在創(chuàng)建項(xiàng)目的時(shí)候,篩選的地址為打 使用工具,ubuntu,python,pycharm一、使用pycharm創(chuàng)建項(xiàng)目:過程略二、安裝scrapy框架 pip install Scr...
摘要:很多人學(xué)習(xí)爬蟲的第一驅(qū)動(dòng)力就是爬取各大網(wǎng)站的妹子圖片,比如比較有名的。最后我們只需要運(yùn)行程序,即可執(zhí)行爬取,程序運(yùn)行命名如下完整代碼我已上傳到微信公眾號后臺,在癡海公眾號后臺回復(fù)即可獲取。本文首發(fā)于公眾號癡海,后臺回復(fù)即可獲取最新編程資源。 showImg(https://segmentfault.com/img/remote/1460000016780800); 閱讀文本大概需要 1...
閱讀 3438·2022-01-04 14:20
閱讀 3136·2021-09-22 15:08
閱讀 2235·2021-09-03 10:44
閱讀 2338·2019-08-30 15:44
閱讀 1523·2019-08-29 18:40
閱讀 2688·2019-08-29 17:09
閱讀 3011·2019-08-26 13:53
閱讀 3243·2019-08-26 13:37