1 前端網頁基礎 在介紹爬蟲之前我們先介紹一下網頁基礎,理解前端網頁有利于我們對后面爬蟲的學習,它是爬蟲的基礎之一。 1.網頁構成 通常來說網頁由三部分組成,分別為 HTML、CSS 以及 Javascript。HTML 承擔網頁內容,CSS 負責對網頁的排版美化,而 Javascript 則使得網頁更加有交互性。接下來我們分別介紹這三個部分。 (1) HTML,即 HyperText Mark-up Language,中文名超文本標記語言。超文本指的是超鏈接,標記指的是標簽,所以 HTML 文件由一個個標簽所組成的。 (2) CSS 即層疊樣式表,它用來定義如何顯示控制 HTML 元素,像拼圖一樣對 HTML 標簽進行拼圖,得到美觀,優(yōu)雅的網頁顯示效果。 (3) JavaScript,上面介紹的 HTML 和 CSS 只能展現(xiàn)一種靜態(tài)的信息,缺乏交互性。我們在網頁中看到的諸如輪播圖等動態(tài)效果,都是基于 Javascript 實現(xiàn)的。在前后端分離的開發(fā)中,Javascript 還會擔任一部分的邏輯操作。它的出現(xiàn)使得用戶與網頁信息之間不再只是一種冷冰冰的瀏覽與顯示關系,而是實現(xiàn)了一種實時、動態(tài)、交互的頁面功能。 2.URL 爬蟲最主要的處理對象就是 URL,通過對 URL 的解析互取所需要的內容,然后再做進一步的處理。其格式由3部分組成: (1) 協(xié)議,它告訴瀏覽器如何處理將要打開的文件。如大家常見的 http、https。 (2) 存有該資源的主機的IP地址(有時也包括端口號) (3) 路徑,一般來說不同部分之間以斜線(/)分隔。 2 爬蟲基礎概述 在了解了網頁的一些基礎知識之后,我們來繼續(xù)學習一下爬蟲的基礎概念,以及 python 爬蟲的一些庫。我會首先介紹 robots.txt 文檔,即 robots 協(xié)議,讓大家合理、合法的進行網絡爬蟲。然后我們介紹 Requests 庫,它可以幫助我們自動爬取 HTML 頁面、自動網絡請求提交 。接下來我們針對爬取回來的頁面介紹數據解析庫,如 lxml、re、beautifulsoup,它們可以很好地幫助我們解析 html 數據,并幫助我們提取信息。 1.robots.txt robots.txt 即 robots 協(xié)議,存在于幾乎每個網站的根目錄,用來告訴我們此網站哪些數據是可以通過爬蟲獲取的,哪些內容是不應該被爬蟲獲取的。對于沒有設定 robots 協(xié)議的網站,我們可以通過爬蟲獲取沒有口令加密的數據,也就是可以獲取該網站的全部數據。如果網站有 robots.txt 文檔,我們就要判斷是否禁止訪客獲取數據。 2.數據爬取 Python 擁有很多優(yōu)秀的開源庫,針對爬蟲,python2 有 urllib1、2,python3 有自帶的 urllib庫。接下來我們以 python3(以下默認為 python )為例,介紹 urllib。 (1) urllib 介紹 Python urllib庫官方文檔鏈接: https://docs./3/library/urllib.html 在這個頁面中我們可以選擇對應的 python 版本進行 urllib 庫的學習。 (2) urllib 基礎用法 urllib 中包括了四個模塊,request 模塊可以用來實現(xiàn)網頁請求和響應獲取;parse 模塊用來解析和處理 URL;error 包含了對 request 模塊產生異常的異常處理;robotparse 用來解析頁面的robots.txt 文件。 從上面的代碼我們可以看到,urllib.request 模塊提供了最基本的構造 HTTP 請求方法,可以模擬瀏覽器的一個請求發(fā)起過程。同時它還帶有處理 authenticaton(授權驗證),redirections(重定向), cookies(瀏覽器 Cookies)以及其它內容。該函數會返回HTTPResposne類型的對象,使用response.read() 就可以得到返回的網頁內容,再使用decode(“utf-8”)解碼字符串,就可以獲取網頁。同時,我們還使用了正則表達表達式來提取數據,以獲得我們想要的信息。 3.數據解析 我們通過上面的學習,了解了如何使用 urllib 進行數據爬取。但只對數據進行爬取是不足夠的,所以我們要學習使用數據解析庫,對爬取的數據進行數據解析。數據解析方面的庫有:beautifulsoup4、lxml、re 等。接下來我們以 BeautifulSoup 為例,來看一下數據解析過程: 3 爬蟲框架 通過上面的基本爬蟲的簡單學習,我們發(fā)現(xiàn)使用原始的爬蟲存在著低效率、代碼量大的缺點,一般只能用作小型項目的爬蟲。接下來我們會介紹一個爬蟲框架,我們現(xiàn)在有了基礎爬蟲的知識,所以這個框架我們可以快速的上手,實現(xiàn)中等規(guī)模的爬蟲。 1.Scrap 框架介紹 Scrapy 框架是一個專門由 python 開發(fā)的,用于快速、高層次的屏幕抓取和 web 抓取框架,用于抓取 web 站點并從頁面中提取結構化的數據。Scrapy 框架可以用于數據挖掘、監(jiān)測和自動化測試。它提供用戶進行各種類型爬蟲的編寫,如我們前面提到的增量式網絡爬蟲等。 2. Scrapy 的安裝 pip install scrapy 3. Scrapy 框架的基本使用 Scrapy 框架命令分為兩種,一種是全局命令,另一種是項目命令。全局命令顧名思義,就是在哪里都可以去使用,項目命令是只有在爬蟲項目中才可使用的命令。全局命令和項目命令可以在命令行窗口使用 scrapy -h 來查看。 在爬蟲中,我們常用的命令有: scrapy startproject # 創(chuàng)建一個爬蟲項目 scrapy genspider # 在項目下創(chuàng)建一個爬蟲 spider 類 scrapy runspider # 運行一個 spider 類文件 scrapy crawl # 通過名稱指定爬取信息 scrapy shell # 使用命令行與 scrapy 交互 scrapy list # 查看當前項目下有多少個爬蟲 4. Scrapy 使用實戰(zhàn) (1) 首先使用 scrapy startproject scarpy_demo 命令創(chuàng)建一個名為 scarpy_demo 爬蟲項目. 目錄結構說明: (2) cd scarpy_demo 進入項目目錄,使用 scrapy genspider demo www.baidu.com 創(chuàng)建一個 spider 類文件 (3) 進入 items.py 創(chuàng)建自己的 Item 容器類 引用這個 ScrapyDemoItem 類,在 spider/demo.py 開頭加上 解析 respone 信息,并封裝到 item中,再使用 Item Pipeline 管道對解析出來的 Item 數據進行清理、驗證、去重、存儲等操作。 開啟 Item Pipeline 注釋以及以 json 格式保存數據 scrapy crawl demo -o json 4 開源項目推薦 1. 圖片爬蟲 當我們開始一個新任務的時候,可以用搜索引擎爬小批量的數據。 GitHub 地址:https://github.com/sczhengyabin/Image-Downloader 特點: (1) 圖片種類豐富(所有類型) (2) 爬取速度快(200張/分) (3) 接口穩(wěn)定且使用簡單 但是爬取數量有限制,通常一個關鍵字不能超過2000張。 2. 視頻爬蟲 GitHub 地址:https://github.com/iawia002/annie annie [OPTIONS] URL [URL...] 3. 復雜爬蟲 GitHub 地址:https://github.com/chenusc11/flickr-crawler (1) 注冊 Flickr API Key 按照網頁引導申請API Key。 (2) 調用接口 其中函數 flickr.photos_search() 可以獲得大中小三種不同尺寸的圖像,參數 tags 是我們的關鍵詞。 photos=flickr.photos_search(tags=tags,tag_mode='all',per_page=number) |
|