手把手教你寫網絡爬蟲(4):Scrapy入門

2022-01-26 Python開發者

(點擊上方公眾號,可快速關注)

來源: 拓海

http://www.cnblogs.com/tuohai666/p/8879765.html

本系列:

上期我們理性的分析了為什麼要學習Scrapy,理由只有一個,那就是免費,一分錢都不用花!

咦?怎麼有人扔西紅柿?好吧,我承認電視看多了。不過今天是沒得看了,為了趕稿,又是一個不眠夜。。。言歸正傳,我們將在這一期介紹完Scrapy的基礎知識, 如果想深入研究,大家可以參考官方文檔,那可是出了名的全面,我就不佔用公眾號的篇幅了。

架構簡介

下面是Scrapy的架構,包括組件以及在系統中發生的數據流的概覽(紅色箭頭所示)。 之後會對每個組件做簡單介紹,數據流也會做一個簡要描述。

架構就是這樣,流程和我第二篇裡介紹的迷你架構差不多,但擴展性非常強大。

One more thing

scrapy startproject tutorial

該命令將會創建包含下列內容的 tutorial 目錄:

tutorial/

    scrapy.cfg            # 項目的配置文件

    tutorial/             # 該項目的python模塊。之後您將在此加入代碼

        __init__.py

        items.py          # 項目中的item文件

        pipelines.py      # 項目中的pipelines文件

        settings.py       # 項目的設置文件

        spiders/          # 放置spider代碼的目錄

            __init__.py

編寫第一個爬蟲

Spider是用戶編寫用於從單個網站(或者一些網站)爬取數據的類。其包含了一個用於下載的初始URL,以及如何跟進網頁中的連結以及如何分析頁面中的內容的方法。

以下為我們的第一個Spider代碼,保存在 tutorial/spiders 目錄下的 quotes_spider.py文件中:

import scrapy

 

class QuotesSpider(scrapy.Spider):

    name = "quotes"

 

    def start_requests(self):

        urls = [

            'http://quotes.toscrape.com/page/1/',

            'http://quotes.toscrape.com/page/2/',

        ]

        for url in urls:

            yield scrapy.Request(url=url, callback=self.parse)

 

    def parse(self, response):

        page = response.url.split("/")[-2]

        filename = 'quotes-%s.html' % page

        with open(filename, 'wb') as f:

            f.write(response.body)

        self.log('Saved file %s' % filename)

運行我們的爬蟲

進入項目的根目錄,執行下列命令啟動spider:

scrapy crawl quotes

這個命令啟動用於爬取 quotes.toscrape.com 的spider,你將得到類似的輸出:

2017-05-10 20:36:17 [scrapy.core.engine] INFO: Spider opened

2017-05-10 20:36:17 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

2017-05-10 20:36:17 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023

2017-05-10 20:36:17 [scrapy.core.engine] DEBUG: Crawled (404) <GET http://quotes.toscrape.com/robots.txt> (referer: None)

2017-05-10 20:36:17 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)

2017-05-10 20:36:17 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/2/> (referer: None)

2017-05-10 20:36:17 [quotes] DEBUG: Saved file quotes-1.html

2017-05-10 20:36:17 [quotes] DEBUG: Saved file quotes-2.html

2017-05-10 20:36:17 [scrapy.core.engine] INFO: Closing spider (finished)

提取數據

我們之前只是保存了HTML頁面,並沒有提取數據。現在升級一下代碼,把提取功能加進去。至於如何使用瀏覽器的開發者模式分析網頁,之前已經介紹過了。

import scrapy

 

class QuotesSpider(scrapy.Spider):

    name = "quotes"

    start_urls = [

        'http://quotes.toscrape.com/page/1/',

        'http://quotes.toscrape.com/page/2/',

    ]

 

    def parse(self, response):

        for quote in response.css('div.quote'):

            yield {

                'text': quote.css('span.text::text').extract_first(),

                'author': quote.css('small.author::text').extract_first(),

                'tags': quote.css('div.tags a.tag::text').extract(),

            }

再次運行這個爬蟲,你將在日誌裡看到被提取出的數據:

2017-05-10 20:38:33 [scrapy.core.scraper] DEBUG: Scraped from <200 http://quotes.toscrape.com/page/1/>

{'tags': ['life', 'love'], 'author': 'André Gide', 'text': '「It is better to be hated for what you are than to be loved for what you are not.」'}

2017-05-10 20:38:33 [scrapy.core.scraper] DEBUG: Scraped from <200 http://quotes.toscrape.com/page/1/>

{'tags': ['edison', 'failure', 'inspirational', 'paraphrased'], 'author': 'Thomas A. Edison', 'text': "「I have not failed. I've just found 10,000 ways that won't work.」"}

保存爬取的數據

最簡單存儲爬取的數據的方式是使用 Feed exports:

scrapy crawl quotes -o quotes.json

該命令將採用 JSON 格式對爬取的數據進行序列化,生成quotes.json文件。

在類似本篇教程裡這樣小規模的項目中,這種存儲方式已經足夠。如果需要對爬取到的item做更多更為複雜的操作,你可以編寫 Item Pipeline,tutorial/pipelines.py在最開始的時候已經自動創建了。

看完本文有收穫?請轉發分享給更多人

關注「Python開發者」,提升Python技能

相關焦點

  • python爬蟲-- Scrapy入門
    前言轉行做python程式設計師已經有三個月了,這三個月用Scrapy爬蟲框架寫了兩百多個爬蟲,不能說精通了Scrapy,但是已經對Scrapy有了一定的熟悉
  • 手把手教你寫網絡爬蟲(5):PhantomJS實戰
    本系列:《手把手教你寫網絡爬蟲(1):網易雲音樂歌單》《手把手教你寫網絡爬蟲(2):迷你爬蟲架構》
  • 【Scrapy】走進成熟的爬蟲框架
    所以只能自己來簡單寫一下了,也算是自己一個學習記錄。定義介紹我也不複製粘貼了。簡單來說,Scrapy是一個中大型的爬蟲框架,框架的意義就在於幫你預設好了很多可以用的東西,讓你可以從複雜的數據流和底層控制中抽離出來,專心於頁面的解析即可完成中大項目爬蟲,甚至是分布式爬蟲。
  • 使用Scrapy網絡爬蟲框架小試牛刀
    命令pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simplescrapy創建爬蟲項目命令scrapy startproject <項目名稱>示例:創建一個糗事百科的爬蟲項目(記得cd到一個乾淨的目錄哈)scrapy startproject
  • 手把手:教你用Scrapy建立你自己的數據集(附視頻)
    本文將以眾籌網站FundRazr為例,手把手教你如何從零開始,使用Python中非常簡便易學的Scrapy庫來爬取網絡數據。用Python進行網頁爬取當我開始工作時,我很快意識到有時你必須收集、組織和清理數據。 本教程中,我們將收集一個名為FundRazr(https://fundrazr.com/)的眾籌網站的數據。
  • Python爬蟲學習?Scrapy框架介紹
    一、Scrapy框架介紹1.
  • 從原理到實戰,一份詳實的 Scrapy 爬蟲教程
    之前分享了很多 requests 、selenium 的 Python 爬蟲文章,本文將從原理到實戰帶領大家入門另一個強大的框架 Scrapy。如果對Scrapy感興趣的話,不妨跟隨本文動手做一遍!完善spider 使用xpath等4 保存數據pipeline中保存數據3.3 程序運行在命令中運行爬蟲
  • scrapy爬蟲框架的運用
    # scrapy# 爬蟲框架- 框架- 爬蟲框架- scrapy- pyspider- crawley- scrapy框架介紹- https://doc.scrapy.org/en/latest/- http://scrapy-chs.readthedocs.io
  • 第7天|10天搞定Python網絡爬蟲,Scrapy爬更快
    說了好幾天用requests進行網絡爬蟲編程了,是時候換成專業,高效率的爬蟲庫--Scrapy了。我之所以一開始用requests,就想告訴你,網絡爬蟲,方法挺多的,合適就行。還有在之前說的各種解析庫,在Scrapy中,也會經常用到,特別是Lxml的XPath。如果之前不說,留到現在還得說。
  • 獨家 | 教你用Scrapy建立你自己的數據集(附視頻)
    本文將以眾籌網站FundRazr為例,手把手教你如何從零開始,使用Python中非常簡便易學的Scrapy庫來爬取網絡數據。用Python進行網頁爬取當我開始工作時,我很快意識到有時你必須收集、組織和清理數據。 本教程中,我們將收集一個名為FundRazr(https://fundrazr.com/)的眾籌網站的數據。
  • Python爬蟲框架:scrapy爬取知乎數據
    測試爬蟲效果我這裡先寫一個簡單的爬蟲,爬取用戶的關注人數和粉絲數,代碼如下:import scrapyclass ZhuHuSpider(scrapy.Spider): """ 知乎爬蟲 """ name = 'zhuhu' allowed_domains = ['zhihu.com'] start_urls
  • Python爬蟲:Scrapy從腳本運行爬蟲的5種方式!
    一、命令行運行爬蟲1、編寫爬蟲文件 baidu.py二、文件中運行爬蟲1、cmdline方式運行爬蟲三、文件中運行多個爬蟲項目中新建一個爬蟲 SinaSpider不過有了以下兩個方法來替代,就更優雅了2、CrawlerProcess方式運行多個爬蟲備註:爬蟲項目文件為:scrapy_demo/spiders/baidu.pyscrapy_demo
  • scrapy爬蟲如何穿越表單,採集你想要的數據
    我們用scrapy來建立一個爬蟲項目。首先我們來分析一下網站的機制,輸入用戶名密碼,這肯定是你事先申請好的,然後點擊登錄,看Network登錄反應,如圖所示,FormData裡面很清楚的看到了,登錄接口的URL,表單數據,從那個頁面登錄,登錄名,密碼,把它都複製下來。
  • Scrapy爬蟲框架結構介紹(各部分組件功能,常用命令)
    Python之srcapy介紹Scrapy是一個健壯的爬蟲框架,可以從網站中提取需要的數據。是一個快速、簡單、並且可擴展的方法。Scrapy使用了異步網絡框架來處理網絡通訊,可以獲得較快的下載速度,因此,我們不需要去自己實現異步框架。並且,Scrapy包含了各種中間件接口,可以靈活的完成各種需求。
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    好多朋友在入門python的時候都是以爬蟲入手,而網絡爬蟲是近幾年比較流行的概念,特別是在大數據分析熱門起來以後,學習網絡爬蟲的人越來越多,哦對,現在叫數據挖掘了!其實,一般的爬蟲具有2個功能:取數據和存數據!好像說了句廢話。。。
  • 網絡爬蟲框架Scrapy詳解之Request
    介紹Request類是一個http請求的類,對於爬蟲而言是一個很重要的類在Spider中通常用法:yield scrapy.Request(url = 'zarten.com')類屬性和方法有:urlmethodheadersbodymetacopy()replace([url, method, headers
  • 寫爬蟲一定要會scrapy?-Python每日3題(爬蟲專題)
    這裡是Python7編程挑戰-爬蟲專題!
  • python scrapy框架爬蟲當當網
    最近在複習scrapy框架,就隨便找了個網站做了一下爬蟲,當當網,說實話這種網站還是比較好做爬蟲的,我沒加代理,也沒限速,沒寫多線程,就直接搞下來了,
  • 爬蟲入門到放棄01:什麼是爬蟲
    序章18年初,還在實習期的我因為工作需求開始接觸Java爬蟲,從一個網站爬取了163W條poi數據,這是我人生中寫的第一個爬蟲,也是唯一的一個Java爬蟲。後來這些poi數據也成了我畢業設計中的一部分。
  • 零基礎如何入門Python寫爬蟲
    其實,學習Python很簡單,學習Python爬蟲也很簡單。最近就發現了一個趣味學編程的課程——「Python 小課」,課程的主要內容就是教你寫爬蟲和一些其他有趣的功能。看到這個課程真的是相見恨晚啊,要是我當初學編程就是這樣的課程,肯定能學的更好。