本實驗任務主要對網絡爬蟲進行一些基本操做,經過完成本實驗任務,要求學生熟練掌握網絡爬蟲的網絡請求及數據解析,並對網絡爬蟲的基本操做進行整理並填寫工做任務報告。css
一、掌握正則表達式html
二、掌握網絡爬蟲的原理html5
Ubuntu16.0四、Python2.7python
學習爬蟲,首先是要學習它的原理。打開網址,每頁都有不少套圖,若是要手動去保存,怎麼操做?想應該是這樣,從第一頁開始,點進第一個套圖,而後保存每張圖片,而後進行第二個套圖……第一頁完了以後第二頁,從第一個套圖開始,保存保存……這就是原理,固然,雖然這樣能達到這個目的,但你們應該沒有那麼多的時間,那麼就來學習爬蟲,來保存圖片。web
步驟一、環境準備正則表達式
右擊Ubuntu操做系統桌面,從彈出菜單中選擇【Open in Terminal】命令 打開終端。apache
經過【cd /home】切換到home目錄下。【ls】查看該目錄下的全部內容。vim
【mkdir Image】在home目錄下建立Image文件夾。瀏覽器
步驟二、爬蟲分析ruby
爬取的MM圖片URL爲https://mm.taobao.com/search_tstar_model.htm?
打開瀏覽器輸入該URL,查看界面效果。把全部的MM圖片下載下來。
經過【cd /Image】切換到Image目錄下。【vim taobaoMM.py】回車後建立並編輯taobaoMM.py的Python文件。
回車後進入編輯框內,按鍵盤【i】進入編輯狀態,編譯以下程序。
導入程序所需的全部庫。
browserPath是Phantomjs的路徑
homeUrl是爬取的頁面
outputDir是保存的文件夾路徑
parser是解析器
加載PhantomJS的瀏覽器,經過driver.get(url)來訪問URL,用BeautifulSoup來對獲得爬取的URL進行解析。driver.page_source是網頁的所有HTML源碼。最後經過主方法來調用main方法。
編輯完畢後,按【esc】退出編輯狀態,【:wq】保存並退出編輯框,【python taobaoMM.py】執行taobaoMM的Python文件。driver.page_source輸出的結果是網頁的所有HTML源碼。
打開訪問URL的瀏覽器,右鍵選擇【Inspect Element(Q)】根據判斷得知,MM的全部信息在id爲J_GirlsList
內。
【vim taobaoMM.py】再次編輯taobaoMM.py文件。
在main函數內經過find_element_by_id得到全部信息,正則表達式獲取妹子的封面圖片以及我的主頁的地址。
在main函數內經過list列表的截取獲得妹子的名字地點、身高體重、我的主頁地址以及封面圖片地址。
在main函數內將妹子的信息經過zip函數封裝(zip函數接受任意多個(包括0個和1個)序列做爲參數,返回一個tuple列表)。再經過for循環,對妹子的信息進行寫入。
定義mkdir函數,判斷圖片輸出的路徑是否存在,不存在則建立。
在主方法內調用mkdir函數,並將輸出路徑做爲參數傳遞。
編輯完畢後,按【esc】退出編輯狀態,【:wq】保存並退出編輯框,【python taobaoMM.py】執行taobaoMM的Python文件。爬取須要幾分鐘。靜等幾分鐘後。打開/home/Image/MMImage下。發現生成不少文件夾。
每一個目錄下都包含MM的主圖以及保存信息的txt文件。
txt文件內包含了MM的基本信息。
步驟三、源代碼
#coding:utf-8
import os
import re
from bs4 import BeautifulSoup
import urllib2
from selenium import webdriver
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
browserPath = "/home/soft/phantomjs/bin/phantomjs"
homeUrl = "https://mm.taobao.com/search_tstar_model.htm?"
outputDir = "MMImage/"
parser = "html5lib"
def main():
#PhantomJS瀏覽器的地址
driver = webdriver.PhantomJS(executable_path=browserPath)
#訪問目標網頁地址
driver.get(homeUrl)
#解析目標網頁的 Html 源碼
bsObj = BeautifulSoup(driver.page_source,parser)
#得到主頁上全部妹子的姓名、所在城市、身高、體重等信息
girlsList = driver.find_element_by_id("J_GirlsList").text.split("\n")
#獲取全部妹子的封面圖片
imagesUrl = re.findall(r"//gtd.alicdn.com/sns_logo.*.jpg",driver.page_source)
#解析出妹子的我的主頁地址等信息
girlsUrl = bsObj.find_all("a",{"href":re.compile("\/\/.*\.htm\?(userId=)\d*")})
# 全部妹子的名字地點
girlNL = girlsList[::3]
# 全部妹子的身高體重
girlsHW = girlsList [1::3]
# 全部妹子的我的主頁地址
girlsHURL = [("http:" + i["href"]) for i in girlsUrl]
# 全部妹子的封面圖片地址
girlsPhotoURL = [("https:" + i) for i in imagesUrl]
girlsInfo = zip(girlNL, girlsHW, girlsHURL, girlsPhotoURL)
for girlNL,girlHW,girlHURL,girlCover in girlsInfo:
#創建文件夾
mkdir(outputDir + girlNL)
# 獲取妹子封面圖片
data = urllib2.urlopen(girlCover).read()
with open(outputDir + girlNL + "/cover.jpg","wb") as f:
f.write(data)
f.close()
with open(outputDir + girlNL + "/information.txt","wb") as a:
a.write("Name And City:" + girlNL + "\n")
a.write("Hight And weight:" + girlHW + "\n")
a.write("personal homepage:" + girlHURL)
a.close()
driver.close()
def mkdir(path):
#判斷路徑是否存在
isExists = os.path.exists(path)
#判斷結果
if not isExists:
#若是不存在則建立目錄
print(" 新建了文件夾",path)
#建立目錄操做函數
os.makedirs(path)
else:
#若是目錄存在則不建立,並提示目錄已存在
print("文件夾", path, "已建立")
if __name__ == "__main__":
if not os.path.exists(outputDir):
os.makedirs(outputDir)
main()