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