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