《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安裝的目錄)

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