之前呢,我怕去了百度貼吧的一些圖片,並且保存的下來,然後我想用相同的方法爬取淘女郎-美人庫的內容,發現不管怎麼編寫正則表達式都獲取不了“Elements”其中的圖片鏈接,之後去網上一查發現,原來我需要爬取的內容都是經過瀏覽器解析過的JS的內容,所以之前一直用的request.urlopen()方法此時就不管作用了,需要調用PhantomJS來解析網頁,然後將解析過的源碼進行篩選,就可以了,話不多說,看代碼
from selenium import webdriver
import re
from urllib import request
class heiheihei:
#初始化方法,url參數是等待爬取的網址
def __init__(self,url):
self.url=url
# 此方法用來獲取頁面內 (JS解析之後的界面)
def getPage(self):
#調用PhantomJS解析器解析網頁
driver = webdriver.PhantomJS(executable_path=r'C:\Users\liqifeng\AppData\Local\Programs\Python\Python36\Scripts\phantomjs')
#獲取網頁內容
driver.get(self.url)
#返回網頁源代碼
data = driver.page_source
return data
#獲取網頁中每個女模特的名字
def getName(self):
#首先,創建一個list,用來存儲名字
list=[]
#調用getPage()方法獲得網頁解析過的源代碼
content=self.getPage()
#編寫pattern
pattern=re.compile('<span class="name">(.*?)</span>',re.S)
#將網頁內容放進去匹配,並返回所有結果
result=re.findall(pattern,content)
#挨個遍歷並將內容添加到list中
for item in result:
list.append(item)
#返回list
return list
#獲取網頁中所有模特圖片的鏈接
def getJpg(self):
list=[]
content=self.getPage()
pattern=re.compile('<div class="img"><img src="//(.*?)"></div>')
result = re.findall(pattern, content)
for item in result:
#再編寫一個pattern,篩選鏈接
pattern2=re.compile('gtd.*',re.S)
result2=re.search(pattern2,item)
list.append(result2.group())
return list
#此方法用來保存圖片
#url爲圖片鏈接
#filename爲圖片名
def saveJpg(self,url,filename):
#一次遍歷url和filename
for (jpg,name) in zip(url,filename):
#完善網址
jpgurl='http://'+jpg
#打開網址
req=request.urlopen(jpgurl)
#獲取圖片資源
u=req.read()
#完善文件名
files='E:/jpg/'+name+'.jpg'
#打開文件
file=open(files,'wb')
with file as f:
#寫入圖片資源
f.write(u)
print('保存圖片'+name+'.jpg'+'成功')
#新建一個實例,並傳入網址
test=heiheihei('https://mm.taobao.com/search_tstar_model.htm?spm=5679.126488.640745.2.b17c0adHu3H5A')
#獲取姓名
lalala=test.getName()
#獲取圖片
hahaha=test.getJpg()
#保存圖片
test.saveJpg(hahaha,lalala)
以上爲程序運行的結果