人生苦短,我用 Pythoncss
前文傳送門:html
小白學 Python 爬蟲(1):開篇python
小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝git
小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門github
小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門shell
小白學 Python 爬蟲(5):前置準備(四)數據庫基礎數據庫
小白學 Python 爬蟲(6):前置準備(五)爬蟲框架的安裝數據結構
小白學 Python 爬蟲(10):Session 和 Cookies
小白學 Python 爬蟲(11):urllib 基礎使用(一)
小白學 Python 爬蟲(12):urllib 基礎使用(二)
小白學 Python 爬蟲(13):urllib 基礎使用(三)
小白學 Python 爬蟲(14):urllib 基礎使用(四)
小白學 Python 爬蟲(15):urllib 基礎使用(五)
小白學 Python 爬蟲(16):urllib 實戰之爬取妹子圖
小白學 Python 爬蟲(17):Requests 基礎使用
小白學 Python 爬蟲(18):Requests 進階操做
小白學 Python 爬蟲(21):解析庫 Beautiful Soup(上)
小白學 Python 爬蟲(22):解析庫 Beautiful Soup(下)
小白學 Python 爬蟲(23):解析庫 pyquery 入門
小白學 Python 爬蟲(26):爲啥買不起上海二手房你都買不起
小白學 Python 爬蟲(27):自動化測試框架 Selenium 從入門到放棄(上)
小白學 Python 爬蟲(28):自動化測試框架 Selenium 從入門到放棄(下)
小白學 Python 爬蟲(29):Selenium 獲取某大型電商網站商品信息
小白學 Python 爬蟲(31):本身構建一個簡單的代理池
小白學 Python 爬蟲(32):異步請求庫 AIOHTTP 基礎入門
首先恭喜看到這篇文章的各位同窗,從這篇文章開始,整個小白學 Python 爬蟲系列進入最後一部分,小編計劃是介紹一些經常使用的爬蟲框架。
說到爬蟲框架,首先繞不過去的必然是 Scrapy 。
Scrapy 是一個基於 Twisted 的異步處理框架,是純 Python 實現的爬蟲框架,其架構清晰,模塊之間的耦合程度低,可擴展性極強,能夠靈活完成各類需求。
固然第一件事兒仍是各類官方地址:
Scrapy 官網: https://scrapy.org/
Github:https://github.com/scrapy/scrapy
首先看一下 Scrapy 框架的架構體系圖:
從這張圖中,能夠看到 Scrapy 分紅了不少個組件,每一個組件的含義以下:
上面這張圖的數據流程以下:
這張圖的名詞有些多,記不住實屬正常,不過不要緊,後續小編會配合着示例代碼,和各位同窗一塊兒慢慢的學習。
先來個最簡單的示例項目,在建立項目以前,請肯定本身的環境已經正確安裝了 Scrapy ,若是沒有安裝的同窗能夠看下前面的文章,其中有介紹 Scrapy 的安裝配置。
首先須要建立一個 Scrapy 的項目,建立項目須要使用命令行,在命令行中輸入如下命令:
scrapy startproject first_scrapy
而後一個名爲 first_scrapy
的項目就建立成功了,項目文件結構以下:
first_scrapy/ scrapy.cfg # deploy configuration file first_scrapy/ # project's Python module, you'll import your code from here __init__.py items.py # project items definition file middlewares.py # project middlewares file pipelines.py # project pipelines file settings.py # project settings file spiders/ # a directory where you'll later put your spiders __init__.py
到此,咱們已經成功建立了一個 Scrapy 項目,可是這個項目目前是空的,咱們須要再手動添加一隻 Spider 。
Scrapy 用它來從網頁裏抓取內容,並解析抓取的結果。不過這個類必須繼承 Scrapy 提供的 Spider 類 scrapy.Spider,還要定義 Spider 的名稱和起始請求,以及怎樣處理爬取後的結果的方法。
建立 Spider 可使用手動建立,也可使用命令建立,小編這裏演示一下如何使用命令來建立,以下:
scrapy genspider quotes quotes.toscrape.com
將會看到在 spider 目錄下新增了一個 QuotesSpider.py 的文件,裏面的內容以下:
# -*- coding: utf-8 -*- import scrapy class QuotesSpider(scrapy.Spider): name = 'quotes' allowed_domains = ['quotes.toscrape.com'] start_urls = ['http://quotes.toscrape.com/'] def parse(self, response): pass
能夠看到,這個類裏面有三個屬性 name
、 allowed_domains
、 start_urls
和一個 parse()
方法。
到這裏咱們就清楚了, parse()
方法中的 response 是前面的 start_urls
中連接的爬取結果,因此在 parse()
方法中,咱們能夠直接對爬取的結果進行解析。
先看下網頁的 DOM 結構:
接下來要作的事情就比較簡單了,獲取其中的數據,而後將其打印出來。
數據提取的方式能夠是 CSS 選擇器也能夠是 XPath 選擇器,小編這裏使用的是 CSS 選擇器,將咱們剛纔的 parse()
方法進行一些簡單的改動,以下:
def parse(self, response): quotes = response.css('.quote') for quote in quotes: text = quote.css('.text::text').extract_first() author = quote.css('.author::text').extract_first() tags = quote.css('.tags .tag::text').extract() print("text:", text) print("author:", author) print("tags:", tags)
首先是獲取到全部的 class 爲 quote 的元素,而後將全部元素進行循環後取出其中的數據,最後對這些數據進行打印。
程序到這裏就寫完了,那麼接下來的問題是,咱們如何運行這隻爬蟲?
Scrapy 的運行方式一樣適用適用命令行的,首先要到這個項目的根目錄下,而後執行如下代碼:
scrapy crawl quotes
結果以下:
能夠看到,咱們剛纔 print()
的內容正常的打印在了命令行中。
除了咱們 print()
中的內容的打印,還能夠看到在 Scrapy 啓動的過程當中, Scrapy 輸出了當前的版本號以及正在啓動的項目名稱,而且在爬取網頁的過程當中,首先訪問了 http://quotes.toscrape.com/robots.txt 機器人協議,雖然這個協議在當前這個示例中響應了 404的狀態碼,可是 Scrapy 會根據機器人協議中的內容進行爬取。
本系列的全部代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便你們取用。
https://docs.scrapy.org/en/latest/intro/tutorial.html
https://docs.scrapy.org/en/latest/topics/architecture.html
https://cuiqingcai.com/8337.html
原文出處:https://www.cnblogs.com/babycomeon/p/12159528.html