第3次做業-MOOC學習筆記:Python網絡爬蟲與信息提取

1.註冊中國大學MOOC
2.選擇北京理工大學嵩天老師的《Python網絡爬蟲與信息提取》MOOC課程
3.學習完成第0周至第4周的課程內容,並完成各周做業


4.提供圖片或網站顯示的學習進度,證實學習的過程。


5.寫一篇很多於1000字的學習筆記,談一下學習的體會和收穫。

【第一週】網絡爬蟲之規則

        Requests是用Python語言編寫的,基於urllib3來改寫的,採用Apache2 Licensed 來源協議的HTTP庫。html

它比urllib更加方便,能夠節約咱們大量的工做,徹底知足HTTP測試需求。python

一句話---Python實現的簡單易用的HTTP庫。mysql

        網絡爬蟲的實質,實際上是從網絡上「偷」數據。經過網絡爬蟲,咱們能夠採集到所須要的資源,可是一樣,使用不當也可能會引起一些比較嚴重的問題。 所以,在使用網絡爬蟲時,咱們須要作到「盜亦有道」。 網絡爬蟲主要分爲如下三類: 1. 小規模,數據量小,爬取速度不敏感;對於這類網絡爬蟲咱們可使用Requests庫來實現,主要用於爬取網頁; 2. 中規模,數據規模較大,爬取速度敏感;對於這類網絡爬蟲咱們可使用Scrapy庫來實現,主要用於爬取網站或系列網站; 3. 大規模,搜索引擎,爬取速度關鍵;此時須要定製開發,主要用於爬取全網,通常是創建全網搜索引擎,如百度、Google搜索等。 在這三種中,咱們最爲常見的是第一種,大多數均是小規模的爬取網頁的爬蟲。 對於網絡爬蟲,也有不少反對聲音。由於網絡爬蟲會不停的向服務器發出請求,影響服務器性能,對服務器產生騷擾行爲,並加大了網站維護者的工做量。 除了對服務器的騷擾外,網絡爬蟲也有可能引起法律風險。由於服務器上的數據有產權歸屬,若是將該數據用於牟利的話,將會帶來法律風險。 此外,網絡爬蟲也可能會形成用戶的隱私泄露。 簡而言之,網路爬蟲的風險主要歸於如下三點: 對服務器的性能騷擾 內容層面的法律風險 我的隱私的泄露 所以,網絡爬蟲的使用須要有必定的規則。 在實際狀況中,一些較大的網站都對網絡爬蟲進行了相關限制,整個互聯網上也將網絡爬蟲視爲可規範的功能來看待。git

【第二週】網絡爬蟲之提取

       BeautifulSoup(下文簡稱 bs)翻譯成中文就是「美麗的湯」,這個奇特的名字來源於《愛麗絲夢遊仙境》(這也是爲什麼在其官網會配上奇怪的插圖,以及用《愛麗絲》的片斷做爲測試文本)。bs 最大的特色我以爲是簡單易用,不像正則和 xPath 須要刻意去記住不少特定語法,儘管那樣會效率更高更直接。對大多數 python 使用者來講,好用會比高效更重要。這也是我本身使用並推薦 bs 的主要緣由。github

        1.信息標記的三種形式

(1)XML(eXtensible Markup Language)可擴展標記語音正則表達式

<name> … </name>有內容的標籤
<name />無內容的標籤
<!‐‐ ‐‐>註釋redis

(2)JSON(JavsScript Object Notation)有類型的鍵值對 key:valuesql

「key」 : 「value」
「key」 : [「value1」, 「value2」]多值用[,]組織
「key」 : {「subkey」 : 「subvalue」}鍵值對嵌套用{,}mongodb

(3)YAML(YAML Ain’t Markup Language)無類型鍵值對 key:value數據庫

縮進表達所屬關係

‐ 表達並列關係

| 表達整塊數據 # 表示註釋

key : value
key : #Comment
‐value1
‐value2
key :
    subkey : subvalue

2.比較

XML

最先的通用信息標記語言,可擴展性好,但繁瑣

Internet上的信息交互與傳遞

JSON

信息有類型,適合程序處理(js),較XML簡潔

移動應用雲端和節點的信息通訊,無註釋

YAML

信息無類型,文本信息比例最高,可讀性好

各種系統的配置文件,有註釋易讀

3.信息提取的通常方法

方法一:完整解析信息的標記形式,再提取關鍵信息

優勢:信息解析準確
缺點:提取過程繁瑣,速度慢

方法二:無視標記形式,直接搜索關鍵信息

優勢:提取過程簡潔,速度較快
缺點:提取結果準確性與信息內容相關

融合方法:結合形式解析與搜索方法,提取關鍵信息

須要標記解析器及文本查找函數

4.基於bs4庫的html內容查找方法

<>.find_all(name, attrs, recursive, string, **kwargs)
返回一個列表類型,存儲查找的結果

 ∙ name : 對標籤名稱的檢索字符串

∙ attrs: 對標籤屬性值的檢索字符串,可標註屬性檢索
∙ recursive: 是否對子孫所有檢索,默認True
∙ string: <>…</>中字符串區域的檢索字符串

<tag>(..) 等價於 <tag>.find_all(..)
soup(..)  等價於 soup.find_all(..)

擴展方法:

<>.find() 搜索且只返回一個結果,同.find_all()參數
<>.find_parents() 在先輩節點中搜索,返回列表類型,同.find_all()參數
<>.find_parent() 在先輩節點中返回一個結果,同.find()參數
<>.find_next_siblings() 在後續平行節點中搜索,返回列表類型,同.find_all()參數
<>.find_next_sibling() 在後續平行節點中返回一個結果,同.find()參數
<>.find_previous_siblings() 在前序平行節點中搜索,返回列表類型,同.find_all()參數
<>.find_previous_sibling() 在前序平行節點中返回一個結果,同.find()參數

【第三週】網絡爬蟲之實戰

正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。

Python 自1.5版本起增長了re 模塊,它提供 Perl 風格的正則表達式模式。

re 模塊使 Python 語言擁有所有的正則表達式功能。

compile 函數根據一個模式字符串和可選的標誌參數生成一個正則表達式對象。該對象擁有一系列方法用於正則表達式匹配和替換。

re 模塊也提供了與這些方法功能徹底一致的函數,這些函數使用一個模式字符串作爲它們的第一個參數。

【第四周】網絡爬蟲之框架

每個網頁都有一個對應的url,而url在頁面上又有不少指向其餘頁面的url,這種url之間相互的指向關係就造成一個網,這就是互聯網。一般,咱們使用瀏覽器訪問互聯網,獲取須要的、感興趣的信息,但這種方式效率低下。對於批量數據的獲取,網絡爬蟲有着天生的優點。

網絡爬蟲是一段自動抓取互聯網信息的程序,它模仿瀏覽器訪問互聯網的過程,下載網頁,而後解析獲得須要的數據。此外,爬蟲能夠從一個url出發,訪問它關聯的全部url,而且從每一個頁面上提取咱們所須要的、有價值的數據。

Python是編寫爬蟲程序的經常使用工具。Python中有多個模塊使得爬蟲編寫很是簡單,經常使用的模塊有:urllib、requests、re、bs四、Selenium等。

1 - 通用爬蟲框架

通用爬蟲框架定義了編寫一個網絡爬蟲最基本的過程。一個通用的爬蟲框架一般包含待抓取的URL列表、已抓取的URL列表、URL下載器、URL解析器、數據庫等幾個模塊。根據任務的需求,還能夠加入監控模塊、定時啓動模塊等。

通用爬蟲框架的工做流程以下:
step 一、肯定種子URL,並存入待抓取的URL列表;
step 二、從待抓取的URL列表中隨機提取一個URL,發送到URL下載器;
step 三、URL下載器開始下載頁面,若是下載成功,將頁面發送給URL解析器,同時把URL存入已抓取的URL列表;若是下載失敗,將URL從新存入待抓取的URL列表,重複step 2;
step 四、URL解析器開始解析頁面,將得到的新的URL存入待抓取的URL列表,同時將須要的、有價值的數據存入數據庫;
step 五、重複step2-4,直到待抓取的URL列表爲空。

2 - Scrapy框架

Scrapy是用python下的一個互聯網爬蟲應用框架,它可以爬取網站並抽取結構化的數據,它也可以使用API獲取數據。Scrapy框架中有不少實用的內置插件和中間件,如:cookies and session handling、user-agent spoofing、robots.txt、crawl depth restriction等,這寫插件和中間件使得Scrapy框架的實用性更強。Scrapy框架的示意圖以下:

Scrapy框架的工做流程:首先從初始 URL 開始,Scheduler 會將其交給 Downloader 進行下載,下載以後會交給 Spider 進行分析,Spider 分析出來的結果有兩種:一種是須要進一步抓取的連接,例如「下一頁」的連接,這些東西會被傳回 Scheduler;另外一種是須要保存的數據,它們則被送到 Item Pipeline 那裏,那是對數據進行後期處理(詳細分析、過濾、存儲等)的地方。

3 - PySpider框架

PySpider是國人用python編寫的一個功能強大的網絡爬蟲框架。主要特性以下:
一、強大的WebUI,包含:腳本編輯器、任務監控器,項目管理器和結果查看器;
二、多數據庫支持,包括:MySQL, MongoDB, Redis, SQLite, Elasticsearch; PostgreSQL with SQLAlchemy等;
三、使用RabbitMQ, Beanstalk, RedisKombu做爲消息隊列;
四、支持任務優先級設定、定時任務、失敗後重試等;
五、支持分佈式爬蟲

 

 

 

 

 

高級操做

在上滿咱們瞭解了requests的基本用法,如基本的GET、POST請求以及Response對象,接下來,咱們再來了解下request的一些高級用法,如上傳文件、Cookies設置。代理設置等。

相關文章
相關標籤/搜索