亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

scrapy學(xué)習(xí)筆記(二):連續(xù)抓取與數(shù)據(jù)保存

ShevaKuilin / 2868人閱讀

摘要:運(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

相關(guān)文章

  • scrapy學(xué)習(xí)筆記(三):使用itempipeline保存數(shù)據(jù)

    摘要:最近真是忙的吐血。。。上篇寫(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...

    13651657101 評(píng)論0 收藏0
  • 首次公開(kāi),整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(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...

    KunMinX 評(píng)論0 收藏0
  • Python爬蟲(chóng)筆記1-爬蟲(chóng)背景了解

    摘要:學(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ù)的獲取的方式...

    oujie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<