那些年,我爬過的北科(一)——爬蟲基礎之環境搭建與入門

環境搭建

關於語言

對於網絡爬蟲來講,其本質就是發送http請求,而後提取網頁的內容信息進行入庫分析等操做,因此對於任何語言均可以構建爬蟲應用。我曾經就用過C#、C++、Java、Swift、Golang、Python這些語言來編寫爬蟲應用。css

總結來講,這裏仍是最推薦python,其優勢就是學習簡單,而且庫十分全面,編寫起代碼來十分輕巧,另外python擁有豐富的機器學習庫、數據處理庫,如scikit-learn、numpy、pandas等等,能夠用來處理咱們爬取的數據。html

本系列文章假設讀者已經掌握了python語言的最基本語法,並有必定的編程基礎。python

關於代碼編輯器

做爲一門腳本語言,python代碼不須要編譯、連接等步驟,只須要使用python的解釋器解釋執行就行了,因此使用一個記事本就能夠完成python的編碼工做。不過爲了更加高效的編寫代碼,程序員都會選擇一款代碼編輯器。程序員

若是對於python很熟悉,不須要代碼拼寫提示等功能,其實使用常見的代碼編輯器如AtomSublime Text 便可(固然若是配置插件,這些編輯器也能夠有強大的代碼提示功能,不過新手配置起來可能會遇到困難)。chrome

若是須要代碼提示,我感受用的最舒服的仍是JetBrains系列的Pycharm更好用一些。我自己也主要在用Pycharm。編程

關於瀏覽器

瀏覽器除了瀏覽網頁之外,對爬蟲開發者來講還能夠對網頁的Html元素、發送的HTTP請求進行分析。市面上基本上全部的瀏覽器都支持這兩種功能,可是廣泛來講用的最多的仍是Chrome瀏覽器。瀏覽器

下面,咱們首先經過Chrome瀏覽器下載一個weibo上的小視頻,來學習如何用Chrome瀏覽器抓取網絡請求。網絡

用Chrome抓取網絡請求

視頻的連接:weibo.com/tv/v/FaOp9o…機器學習

打開Chrome瀏覽器後,咱們能夠首先打開一共空白頁面,而後右鍵,選擇檢查。編輯器

點擊檢查後,能夠看到彈出一個Dock窗口,爲了方便查看頁面內容,我習慣把這個Dock窗口放在右邊。

在這個Dock窗口中,有不少個選項卡,在本系列教程中,主要使用到Elements和NetWork這兩個,一個負責審查Html元素,一個負責記錄網絡請求。目前須要使用網絡抓取功能,因此先跳到Network這個選項卡中。

下面,在瀏覽器中輸入視頻的連接並回車,就能夠看到網頁加載出來了,其中的網絡請求也記錄在了右邊。

能夠看到這些網絡請求有html、css、js、圖片等等,點擊一個條目後均可以看到請求的詳情,在這裏面其中有一個請求大小很大,而且在一直增加,能夠想象這就是咱們正在觀看的視頻文件。

咱們點擊這個請求能夠看到請求的真實連接地址,這個地址中還帶了個mp4,顯然就是咱們正在觀看的視頻文件。

咱們把連接複製下來,在一個新的Tab中輸入連接後回車,能夠看到已經把視頻下載到了本地。

用本地的影音播放器打開,和線上的如出一轍。

爬蟲入門

學習了上面的小技巧,若是碰到你想下載的音樂、想下載的視頻,經過這種方法就能夠下載下來(固然優酷、愛奇藝這樣的專門作視頻的網站已經規避了這種方法)。

下面,將正式開始學習網絡爬蟲,本章將以nladuo.cn/scce_site/爲例, 爬取它的通知公告的文本信息。

使用requests下載網頁

網頁主要由HTML、CSS、JavaScript代碼以及圖片等資源組成,其中HTML控制頁面的結構,CSS控制頁面的樣式,JavaScript控制頁面的邏輯。對於目前大部分的網站,咱們要爬取的文本信息通常狀況下都保存在HTML中。(也有些網站使用JavaScript來控制頁面的結構和信息,HTML中不存在須要爬取的信息,咱們將在反反爬蟲篇再詳細介紹這種狀況。)

在python中,咱們能夠經過requests庫來下載一個網頁的html。好比說上面的這個連接,咱們能夠經過如下一行代碼把網頁信息下載下來,而後經過print打印它。

import requests

resp = requests.get("http://nladuo.cn/scce_site/")
print resp.content
複製代碼

在運行代碼前,請先使用pip安裝requests庫,使用如下命令便可完成對庫的安裝:

pip install requests
複製代碼

運行代碼後,能夠看到顯示出一堆html的標籤。

在瀏覽器中,也是先下載這樣的html頁面,而後根據html代碼的結構展現到顯示屏中的。

網頁結構

下面,咱們來看看HTML如何對應到網頁的結構中的,咱們先打開這個網址而後使用chrome瀏覽器查看一下這個網頁的結構,像上面的抓取網絡請求同樣,咱們按下右鍵而後選擇檢查,並在右邊彈出的選項卡中選擇Elements項。

在Elements的左側有個箭頭,點擊這個箭頭後,箭頭變爲選中狀態。箭頭處於選中狀態時,用鼠標滑動到左側的網頁中,能夠看到右側對應的html信息。

在上圖中,能夠看到新聞信息處在class爲every_list的div標籤中。展開div的class爲every_list標籤後,能夠看到在class爲list_title標籤下面的a標籤中,存放着新聞的連接(a.href),新聞的標題(a中間的文本);在class爲list_time的標籤中,存放了新聞發佈的日期。

使用BeautifulSoup解析Html

那麼,咱們如何從HTML中提取這些文本呢?這裏可使用HTML解析庫解析HTML的內容,常見的有BeautifulSoup,HtmlParser、PyQuery等等。

這裏,咱們選用BeautifulSoup,仍是先用pip安裝一下依賴。

pip install bs4
複製代碼

在使用requests下載html後,咱們把html傳給一個BeautifulSoup對象後,便可對html進行解析,使用find查找指定元素。

import requests
from bs4 import BeautifulSoup

if __name__ == '__main__':
    resp = requests.get("http://nladuo.cn/scce_site/")
    # print(resp.content)
    soup = BeautifulSoup(resp.content)
    items = soup.find_all("div", {"class": "every_list"})

    for item in items:
        title_div = item.find("div", {"class": "list_title"})
        title = title_div.a.get_text()
        url = title_div.a["href"]
        time = item.find("div", {"class": "list_time"}).get_text()
        print(time, title, url)
複製代碼

在上面代碼中,使用find_all方法首先找到全部的class爲every_list的div標籤,而後對div進行遍歷,逐個打印每一個標籤下面的list_title和list_time。(更詳細的API,讀者能夠查閱BeautifulSoup的文檔。)

運行上述代碼後,成功打印出了新聞的基本信息。

至此,咱們的第一個爬蟲也就完成了。

相關文章
相關標籤/搜索