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