Python爬蟲學習筆記總結(一)
〇. python 基礎
先放上python 3 的官方文檔:https://docs.python.org/3/ (看文檔是個好習慣)
關於python 3 基礎語法方面的東西,網上有很多,大家可以自行查找.
一. 最簡單的爬取程序
爬取百度首頁源代碼:
來看上面的代碼:
對於python 3來說,urllib是一個非常重要的一個模塊 ,可以非常方便的模擬瀏覽器訪問互聯網,對於python 3 爬蟲來說, urllib更是一個必不可少的模塊,它可以幫助我們方便地處理URL.
urllib.request是urllib的一個子模塊,可以打開和處理一些複雜的網址
The urllib.request
module defines functions and classes which help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more.
urllib.request.urlopen(url,data=None, [timeout, ]***,cafile=None,capath=None,cadefault=False,context=None)
For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponse
object slightly modified.
decode("utf-8")用來將頁面轉換成utf-8的編碼格式,否則會出現亂碼
二 模擬瀏覽器爬取信息
在訪問某些網站的時候,網站通常會用判斷訪問是否帶有頭文件來鑒別該訪問是否為爬蟲,用來作為反爬取的一種策略。
先來看一下Chrome的頭信息(F12打開開發者模式)如下:
如圖,訪問頭信息中顯示了瀏覽器以及系統的信息(headers所含信息眾多,具體可自行查詢)
Python中urllib中的request模塊提供了模擬瀏覽器訪問的功能,代碼如下:
可以通過add_header(key, value) 或者直接以參數的形式和URL一起請求訪問,urllib.request.Request()
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
三 爬蟲利器Beautiful Soup
Beautiful Soup是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.
文檔中的例子其實說的已經比較清楚了,那下面就以爬取簡書首頁文章的標題一段代碼來演示一下:
先來看簡書首頁的源代碼:
可以發現簡書首頁文章的標題都是在標籤中,並且class="title",所以,通過
便可獲得所有的文章標題,具體實現代碼及結果如下:
Beautiful Soup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,下表列出了主要的解析器,以及它們的優缺點:
四 將爬取的信息存儲到本地
之前我們都是將爬取的數據直接列印到了控制台上,這樣顯然不利於我們對數據的分析利用,也不利於保存,所以現在就來看一下如何將爬取的數據存儲到本地硬碟。
1 對.txt文件的操作
讀寫文件是最常見的操作之一,python3 內置了讀寫文件的函數:open
open(file,mode="r",buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None))
Openfileand return a corresponding file object. If the file cannot be opened, an OSError
is raised.
其中比較常用的參數為file和mode,參數file為文件的路徑,參數mode為操作文件的方式(讀/寫),函數的返回值為一個file對象,如果文件操作出現異常的話,則會拋出 一個OSError
還以簡書首頁文章題目為例,將爬取到的文章標題存放到一個.txt文件中,具體代碼如下:
open中mode參數的含義見下表:
其中"t"為默認模式,"r"相當於"rt",符號可以疊加使用,像"r+b"
另外,對文件操作一定要注意的一點是:打開的文件一定要關閉,否則會佔用相當大的系統資源,所以對文件的操作最好使用try:...finally:...的形式。但是try:...finally:...的形式會使代碼顯得比較雜亂,所幸python中的with語句可以幫我們自動調用close()而不需要我們寫出來,所以,上面代碼中的try:...finally:...可使用下面的with語句來代替:
效果是一樣的,建議使用with語句
2 圖片的儲存
有時候我們的爬蟲不一定只是爬取文本數據,也會爬取一些圖片,下面就來看怎麼將爬取的圖片存到本地磁碟。
我們先來選好目標,知乎話題:女生怎麼健身鍛造好身材? (單純因為圖多,不要多想哦 (# _ # ) )
看下頁面的源代碼,找到話題下圖片鏈接的格式,如圖:
可以看到,圖片在img標籤中,且class=origin_image zh-lightbox-thumb,而且鏈接是由.jpg結尾,我們便可以用Beautiful Soup結合正則表達式的方式來提取所有鏈接,如下:
提取出所有鏈接後,使用request.urlretrieve來將所有鏈接保存到本地
Copy a network object denoted by a URL to a local file. If the URL points to a local file, the object will not be copied unless filename is supplied. Return a tuple (filename, headers)
wherefilenameis the local file name under which the object can be found, andheadersis whatever the info()
method of the object returned by urlopen()
returned (for a remote object). Exceptions are the same as for urlopen()
.
具體實現代碼如下:
運行結果
注意營養哦~~~


※你猜猜看,這次的文章內容是什麼?猜對有獎!
※人生苦短,我學Python!非計算機專業的老師和同學最適合的編程語言!
TAG:python |