前言
最近學完Python,寫了幾個爬蟲練練手,網上的教程有很多,但是有的已經不能爬了,主要是網站經常改,可是爬蟲還是有通用的思路的,即下載數據、解析數據、保存數據。下面一一來講。
1.下載數據
首先打開要爬的網站,分析URL,每打開一個網頁看URL有什么變化,有可能帶上上個網頁的某個數據,例如xxID之類,那么我們就需要在上一個頁面分析HTML,找到對應的數據。如果網頁源碼找不到,可能是ajax異步加載,去xhr里去找。
有的網站做了反爬的處理,可以添加User-Agent :判斷瀏覽器
self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'# 初始化 headersself.headers = {'User-Agent': self.user_agent}
如果不行,在Chrome上按F12分析請求頭、請求體,看需不需要添加別的信息,例如有的網址添加了referer:記住當前網頁的來源,那么我們在請求的時候就可以帶上。按Ctrl + Shift + C,可以定位元素在HTML上的位置
動態網頁
有一些網頁是動態網頁,我們得到網頁的時候,數據還沒請求到呢,當然什么都提取不出來,用Python 解決這個問題只有兩種途徑:直接從JavaScript 代碼里采集內容,或者用Python 的第三方庫運行JavaScript,直接采集你在瀏覽器里看到的頁面。
1.找請求,看返回的內容,網頁的內容可能就在這里。然后可以復制請求,復雜的網址中,有些亂七八糟的可以刪除,有意義的部分保留。切記刪除一小部分后先嘗試能不能打開網頁,如果成功再刪減,直到不能刪減。
2.Selenium:是一個強大的網絡數據采集工具(但是速度慢),其最初是為網站自動化測試而開發的。近幾年,它還被廣泛用于獲取精確的網站快照,因為它們可以直接運行在瀏覽器上。Selenium 庫是一個在WebDriver 上調用的API。
WebDriver 有點兒像可以加載網站的瀏覽器,但是它也可以像BeautifulSoup對象一樣用來查找頁面元素,與頁面上的元素進行交互(發送文本、點擊等),以及執行其他動作來運行網絡爬蟲。
PhantomJS:是一個“無頭”(headless)瀏覽器。它會把網站加載到內存并執行頁面上的JavaScript,但是它不會向用戶展示網頁的圖形界面。把Selenium和PhantomJS 結合在一起,就可以運行一個非常強大的網絡爬蟲了,可以處理cookie、JavaScript、header,以及任何你需要做的事情。
下載數據的模塊有urllib、urllib2及Requests
Requests相比其他倆個的話,支持HTTP連接保持和連接池,支持使用cookie保持會話,支持文件上傳,支持自 動確定響應內容的編碼,支持國際化的 URL 和 POST 數據自動編碼,而且api相對來說也簡單,但是requests直接使用不能異步調用,速度慢。
新聞熱點
疑難解答