聽說用python寫的 爬蟲很強
日思夜想的網協線上小課堂終於開課了
當然,先分享一下我們唯一的直播地址:b站直播間8157428
第一堂課我們高(騷)大(氣)帥(十)氣(足)的會長大大給我們帶來了什麼乾貨呢??
看一看,瞧一瞧
這節課我們講了用python編寫網路爬蟲相關的知識。主要包括以下幾個小節:
1
什麼是網路爬蟲?網路爬蟲能做些什麼?
網路爬蟲(webspider)是個很形象的比喻,我們把網路比喻成一張大網,網路爬蟲按照某種規則在這張大網上來回爬行,並獲取它想要的信息。爬蟲程序從一個URL爬取起,再跳轉到該頁面關聯的URL上,這樣就能夠快速獲得站點內許多頁面的特定信息。簡單地說,網路爬蟲就是自動訪問網頁,並獲取其中有價值的信息的程序。
至於爬蟲的應用嘛,使用大規模的分散式爬蟲可以在短時間內獲得千萬甚至億級數據量,作為數據分析的基礎。有了數據就能幹很多事情,具體的就不再一一舉例,各位自行想像或者百度吧。
2
正則表達式
正則表達式是一種以某種格式匹配字元串的表達式。
我們就直接以代碼來舉例吧,假設我們現在需要找出一個網頁中所有的中國手機號碼,這裡就取首位為1一共11位的規則來進行匹配。 這是不用正則的代碼,簡單易懂。
以下是使用正則表達式的代碼:
我們先講講這個匹配是怎麼完成的,再回來看這個代碼。
首先要使用正則表達式這一工具,我們需要導入re這個模塊,也就是上面代碼中的import re
創建模式匹配與匹配符合正則表達式的字元串
然後對比著看一下上面的代碼,是不是大概能看懂啥意思了。
然後就是正則表達式的格式了,初步可以參照以下的表來編寫正則表達式:
正則表達式的匹配是貪婪的,因為它默認盡量去匹配最長的字元串,這就會出現這樣的情況: 我們要從awertyuic123456cbbb中匹配a到第一個c之間的內容,假設我們用a.*c匹配的話,就會匹配到a與第二個c之間的內容,正則表達式找到了最長的匹配該模式的字元串,這時候我們就需要把匹配模式設定成非貪婪,用?符號處理.*部分,使這段不需要匹配到最長,也就是a.*?c就會在第一個c處結束匹配了。
好了,本期涉及的正則表達式內容就這麼多,關於re庫的詳細用法請自行百度吧。
3
html/css是什麼
簡單來說html/css是網頁的框架。html標籤層層嵌套,構成了整個頁面的骨架,而css(層疊樣式表)則是修飾頁面的關鍵,通過賦予標籤id和class來修飾標籤內的內容,怎麼修飾的就不講了,關鍵在於,我們可以用標籤的id或class來迅速選擇我們要找的標籤。關於html/css/js的web開發方向的學習,此處強力推薦freecodecamp中文站和w3school在線教程。
4
URL分析
URL(統一資源定位符)是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示。比如說,天氣預報網網址http://www.tianqi.com/taiyuan 就是一個URL,第一段http://表示伺服器傳輸使用http協議,www.tianqi.com是這個網站的域名,/taiyuan則是具體定位到了這個存儲這個網站頁面的文件夾中的taiyuan.html文件,你可以把taiyuan換成你所在的城市的拼音試試,就會跳轉到你所在的城市的天氣了。
點擊網頁上的一些其他鏈接,會跳轉到對應的頁面,這是因為在這個鏈接所在的標籤里有一個href屬性,指向跳轉頁面的URL
你可以在地址欄里敲www.tianqi.com/news/list_404_1.html試試,就能跳到對應的網頁了,為什麼href屬性里沒有網站域名這一段?因為源碼裡面這是相對URL,我們用客戶端訪問伺服器資源是需要絕對URL的,所以要手動加上域名那一段。
互聯網中任何一個資源都是有其對應URL的,包括頁面、視頻、圖片等等,對應著資源在伺服器中的位置。
5
爬取環節
需要用到下面兩個第三方庫
1. 網頁下載(requests)
作用:負責從網際網路上下載文件和網頁,python本身也自帶urllib模塊可以完成這項工作,但是用起來複雜些,此處先用requests庫來完成這項工作
運用舉例:在xkcd極客漫畫網站下載其中的一幅漫畫
進入主頁,按下f12,找到第一頁漫畫對應的URL
有了漫畫的URL ,下載它
結合注釋,簡單易懂。只要能找到資源對應的URL,都可以用這種方式進行下載。其中res.iter_content(100000)中的100000表示這段傳輸過來的數據包含多少位元組,此處設定為100000,http資源的傳輸是按段進行的,如果你傳入一個很小的位元組數,就會獲得一張不完整的圖片。
2. 網頁解析(beautifulsoup)
作用:負責解析HTML,將html頁面內容轉換為BeautifulSoup類,以迅速定位頁面內容。需要用import bs4來引入這個模塊
運用舉例:用Beautifulsoup庫的select()函數來進行元素定位
select函數的選擇方法,和CSS選擇器的語法非常相似,如果有這方面基礎的同學可以很快理解,也可以參照下表
知道怎麼選擇元素之後呢,首先我們需要從HTML創建一個BeautifulSoup對象
把res的text屬性,也就是文本內容給bs4.BeautifulSoup()並用』html.parser』解釋器來解釋這段文本。此時可以用type()函數檢測weatherSoup的數據類型,是一個BeautifulSoup對象。
接下來繼續用select()函數尋找當前天氣的位置。
select返回的是一個列表,所以此時要用weather[0]來取出當前的天氣,至此,我們就可以完整的使用上面提到的知識去編寫一個查詢天氣的小腳本了!
完成代碼如下
我們僅僅講了4個相關的函數來進行網頁內容的下載解析,事實上,requests和BeautifulSoup這兩個庫還有更強大的功能可以讓我們編寫爬蟲程序時使用。
在最後會長還給我們實際演示了用爬蟲來自動下載漫畫。在這裡就不詳細寫出來啦!
這次我們的線上小課堂開展的時十分成功的,最高時有500人同時在線觀看,想想就讓人激動呢。錯過講課的小夥伴們也可以去B站觀看錄放教程
下次我們的網協小課堂將要教授關於小程序開發的知識,被跳一跳虐了千百遍的你,還不快來學習一下。
附會長苦口婆心的叮囑一份:
2. 網協將在這個假期不定時的在此直播間開設直播,去講解互聯網技術相關的內容,下周三將由小賤賤同學來為大家講解有關微信小程序相關的知識
3. 爬蟲雖然好用,但是一定要注意在爬取信息時的相關法規,比如不可將爬蟲得到的資源進行商用,不能對一個伺服器進行過快的採集,一方面伺服器會對行為過於像機器人的ip進行封ip處理,另一方面性能很高的爬蟲也會對伺服器造成一定的負擔。
4. 爬蟲的技術棧是相當豐富的,你可以用scrapy進行分散式爬蟲的快速開發,可以用seleium完成自動化爬取,可以用一些js的解析庫爬取動態數據,可以用xpath語法代替beautifulsoup和正則進行網頁內容的快速定位。網路爬蟲的學習是需要以網頁構建和http的知識為基礎的,在此推薦我們的web開發興趣小組:429583699和我們的公眾號天財網協正在更新我們原創的http基礎教程,今後也會有更多技術乾貨和大家分享。
5. 祝各位假期學習愉快。
文案:盧濤
排版:彭帥


TAG:天財網協 |