《Python網路爬蟲與數據挖掘小課堂》——part2

  • 2019 年 11 月 24 日
  • 筆記

在介紹爬蟲及爬取網頁或圖片之前,大家需要知道如何使用pip快速方便的安裝第三方Python庫。

上節中我們介紹了Python的安裝及基礎知識,其中安裝Python時程式已經默認安裝了pip模組。如果你還沒有安裝和配置Python,請查看此系列文章part1的內容介紹,注意:老版本的python中只有easy_install,沒有pip。

win7系統下,pip的使用方法:

在cmd命令下輸入pip help按回車鍵會顯示pip命令的一些幫助,如下:

1)安裝庫

pip install <package_name>

pip install <package_name>==<version>

如安裝numpy,在cmd命令中輸入

在游標處輸入:pip install numpy 按Enter回車鍵即開始安裝numpy庫,這個numpy版本會和你系統安裝的Python版本保持一致。

2)升級庫 (如果不提供version版本號,升級到最新版本)

pip install –upgrade <package_name>>=<version>

pip install -U <package_name>>=<version>

如pip升級自己:

pip install –upgrade pip

pip install -U pip

3)卸載庫

pip uninstall <package_name>

如卸載numpy庫:pip install numpy

4)查看已經安裝了那些第三方庫

pip list

如下:

pip freeze

註:Python第三方庫的下載地址:

http://www.lfd.uci.edu/~gohlke/pythonlibs/

在這裡找到相應的第三方的及對應的Python版本的庫文件下載並通過pip安裝成功率更高!

通過Ctrl + F 查找相應的包,如numpy

通過瀏覽器或迅雷把numpy‑1.11.3+mkl‑cp27‑cp27m‑win_amd64.whl下載下來。

在cmd中輸入:

pip install numpy‑1.11.3+mkl‑cp27‑cp27m‑win_amd64.whl

按Enter回車即開始安裝。

正式進入爬蟲講解:

下面寫一個示例,抓取網頁和圖片

這節課所依賴的包有:httplib2 、urllib 、selenium

安裝方法如下:

pip install httplib2

pip install selenium

其中httplib2中包含urllib庫

如安裝httplib2

或是通過第三方網站下載相應的包,安裝如下

安裝selenium庫:

安裝成功後輸入:exit 按Enter退出cmd。

以上Python第三方庫安裝成功後,開始編寫下載網頁和圖片的腳本

下載網頁程式碼如下:


# coding=utf-8

import urllib

import httplib2

import webbrowser

#以爬取百度網站為例

url = "http://www.baidu.com/"

html = urllib.urlopen(url).read()

open("baidu.html","w").write(html)

#瀏覽並打開該網站

webbrowser.open_new_tab("baidu.html")


調用的是urllib庫裡面的urlopen方法,傳入一個URL(網址),這個網址是百度首頁,協議是HTTP協議,當然你也可以把HTTP換做ftp、file、https 等等,只是代表了一種訪問控制協議,urlopen一般接受三個參數,它的參數如下:

urlopen(url, data, timeout)

第一個參數url即為URL,且必填;後兩個參數可選。

第二個參數data是訪問URL時要傳送的數據。

第三個timeout是設置超時時間。

註:data默認為空None,timeout默認為 socket._GLOBAL_DEFAULT_TIMEOUT。 在這個例子裡面我們傳送了百度首頁網址URL,執行urlopen(url)方法之後,返回一個response對象,response對象有一個read()方法,可以返回獲取到的網頁內容,即通過response.read()方法讀取。

webbrowser是Python庫的內置模組,webbrowser模組提供了展示基於web文檔的高層介面。多數情況下, 簡單地調用open() 函數即可。open一般接受三個參數,它的參數如下:

webbrowser.open(url, new=0, autoraise=True)

使用默認的瀏覽器訪問url。如果new等於0,則url會在盡量在已有瀏覽器窗口打開。如果new等於1, 則打開新的瀏覽器窗口。new等於2,盡量在瀏覽器打開新標籤(tab)。如果autoraise為True,則瀏覽器窗口顯示在最前面(注意在多數窗口管理器會這樣)。

webbrowser.open_new(url) #使用默認的瀏覽器打開url,盡量只有一個窗口。

webbrowser.open_new_tab(url) #使用默認的瀏覽器的新tab中打開url。

運行上述腳本:

獲取的網頁本地保存為"baidu.html",通過默認瀏覽器打開如下圖所示:

下載圖片的程式碼編寫,首先要找到圖片的url,如下圖百度的logo,可以通過Firefox瀏覽器右鍵"查看頁面源程式碼"、"查看元素"或按快捷鍵"F12"來進行定位,不同的瀏覽器可能不太一樣。

在HTML源程式碼中可以通過Ctrl + F 定位元素位置,定位URL後,再通過urllib庫中的函數urlretrieve()直接將遠程數據下載到本地。

程式碼如下:


# coding=utf-8

import os

import urllib

import httplib2

import webbrowser

#爬取在線網站

url = "http://www.baidu.com/"

html = urllib.urlopen(url).read()

open("baidu.html","w").write(html)

#瀏覽求打開網站

webbrowser.open_new_tab("baidu.html")

#下載圖片

logo_url = "https://www.baidu.com/img/bd_logo1.png"

logo_name = os.path.basename(logo_url) #刪除路徑獲取logo圖片名字

urllib.urlretrieve(logo_url, logo_name)


運行結果:

運用Selenium庫編寫簡單爬蟲,程式碼如下:


# coding=utf-8

import os

import urllib

# 引入WebDriver包

from selenium import webdriver

# 獲取Firefox瀏覽器對象

driver = webdriver.Firefox()

# 獲取Chrome瀏覽器對象

#driver = webdriver.Chrome()

# 獲取IE瀏覽器對象

#driver = webdriver.Ie()

# 調用get方法來打開百度的url地址

driver.get("https://www.baidu.com/")

print u'當前瀏覽的URL:'

print driver.current_url # 列印當前瀏覽的URL網址

print u'n網頁標題:'

print driver.title # 列印當前瀏覽器頁面中的title

# 通過id方式定位介面元素

print u'n定位元素id:'

txt1 = driver.find_element_by_id("u1").text

print txt1

# 通過xpath表達式定位元素

print u'n定位元素xpath:'

txt2 = driver.find_element_by_xpath("//div[@id='u1']/a")

print txt2.text

# 退出並關閉瀏覽器窗口程式

driver.quit()


按F5運行會報錯:

Geckodriver executable needs to be in PATH。

Geckodirver的下載地址:https://github.com/mozilla/geckodriver/releases

本機是win7_64bit 所以下載對應的win64版本

報錯內容:

WebDriverException:Message:'geckodriver'executable needs to be in Path

geckodriver是一原生態的第三方瀏覽器,對於selenium3.x版本都會使用geckodriver來驅動firefox,所以需要下載geckodriver.exe。放置在Path 環境變數可以訪問到的地方。例如 C:python2712(本機Python安裝的目錄)

然後再運行該腳本即可運行成功!結果如下圖所示: