Python 네트워크 파충류 테스트 칼 - ZOL 데스크 톱 벽지 캡 처 그림 4
urllib 2, 정규 표현 식, threading 등 효율 적 인 다운로드 사 이 트 를 사용 합 니 다.http://desk.zol.com.cn'중 벽지 그림.
url lib 2 를 사용 하여 url = 'http://desk.zol.com.cn'중 HTML 코드, HTML 에서 정규 표현 식 을 사용 하여 우리 가 필요 로 하 는 내용 을 캡 처 합 니 다.함수 def getImgTotal (url, filePath) 만 들 기: 우선 HTML 을 가 져 옵 니 다.코드 는 다음 과 같 습 니 다:
115 def getImgTotal(url, filePath):
116 if not os.path.exists(filePath):
117 os.makedirs(urlPath)
118 if not filePath.endswith('/'):
119 filePath += '/'
120
121 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
122 headers = {'User-Agent' : user_agent}
123
124 request = urllib2.Request(url, headers=headers)
125 content = urllib2.urlopen(request).read().decode('GBK')
126
127 f = open('url.txt', 'w')
128 f.write(content.encode('utf-8'))
129 f.close()
130
131 print content
132
부분 결과 캡 처:
우리 가 가 져 올 부분 은 그림 형식 으로 다음 과 같은 그림 을 분류 합 니 다. 그 중에서 유형 집합 url 과 유형 집합 이름 을 가 져 올 것 입 니 다.정규 표현 식 을 사용 하여 다음 과 같이 캡 처 합 니 다. '
115 def getImgTotal(url, filePath):
116 if not os.path.exists(filePath):
117 os.makedirs(urlPath)
118 if not filePath.endswith('/'):
119 filePath += '/'
120
121 user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
122 headers = {'User-Agent' : user_agent}
123
124 request = urllib2.Request(url, headers=headers)
125 content = urllib2.urlopen(request).read().decode('GBK')
126
127 pattern = re.compile('(.+?)', \
128 re.S)
129 imgList = re.findall(pattern, content)
130
131 for item in imgList:
132 tmpUrl = ''
133 tmpPath = ''
134 tmpUrl = mUrl + '/' + item[0] + '/'
135 tmpPath = filePath + item[1]
136 print tmpUrl
137 print tmpPath
138
결 과 는 다음 과 같다.
이 제 는 전편 에 쓰 인 집합 함수 def getImgCatalog (url, filePath) 를 다운로드 할 수 있 습 니 다. 다 중 스 레 드 와 스 레 드 자 물 쇠 를 추가 하여 다운로드 속 도 를 높 일 수 있 습 니 다.전체 코드 는 다음 과 같 습 니 다.
#/usr/bin/env python
import os
import re
import urllib
import urllib2
import datetime
import threading
mUrl = 'http://desk.zol.com.cn'
def downloadImg(url, imgName, savePath):
if savePath == '':
return 'image save path is nil.'
if imgName == '':
return 'image is nil.'
if url == '':
return 'url is nil.'
if not os.path.exists(savePath):
os.makedirs(savePath)
if not savePath.endswith('/'):
savePath += '/'
savePathName = savePath + imgName
urllib.urlretrieve(url, savePathName)
print url
def getImgAssemble(url, fileName, filePath):
if not os.path.exists(filePath):
os.makedirs(filePath)
if not filePath.endswith('/'):
filePath += '/'
if not fileName in filePath:
filePath += fileName
print '******', url
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent' : user_agent}
tmpUrl = url
while True:
try:
request = urllib2.Request(tmpUrl, headers=headers)
content = urllib2.urlopen(request).read().decode('GBK')
imgUrl = re.search('', \
content).group(1)
imgCount = re.search('.+?.+?(\d+).+?
', \
content).group(1)
imgSuffix = re.search('http://.+?\..+?/.+?\.(.+?)$', \
imgUrl).group(1)
imgName = fileName + imgCount + '.' + imgSuffix
downloadImg(imgUrl, imgName, filePath)
nextUrlFlag = re.search('', \
content).group(1)
if not "javascript:" in nextUrlFlag:
tmpUrl = mUrl + nextUrlFlag
continue
else:
print '
'
break
except AttributeError:
print 'attributeError'
except urllib2.URLError, e:
if hasattr(e, 'code'):
print e.code
if hasattr(e, 'reason'):
print e.reason
catalogLock = threading.Lock()
def getImgCatalog(url, filePath):
if not os.path.exists(filePath):
os.makedirs(filePath)
if not filePath.endswith('/'):
filePath += '/'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent' : user_agent}
tmpUrl = url
while True:
request = urllib2.Request(tmpUrl, headers=headers)
content = urllib2.urlopen(request).read().decode('GBK')
pattern = re.compile('' , \
re.S)
imgInfoList = re.findall(pattern, content)
threads = []
for item in imgInfoList:
sUrl = mUrl + item[0]
#add thread
if catalogLock.acquire():
t = threading.Thread(target=getImgAssemble, args=(sUrl, item[1], filePath))
t.setDaemon(True)
threads.append(t)
catalogLock.release()
for i in range(len(threads)):
threads[i].start()
for i in range(len(threads)):
threads[i].join(3)
if not 'id="pageNext"' in content:
break
else:
tmpUrl = mUrl + re.search('', \
content).group(1)
imgTotalLock = threading.Lock()
def getImgTotal(url, filePath):
if not os.path.exists(filePath):
os.makedirs(urlPath)
if not filePath.endswith('/'):
filePath += '/'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent' : user_agent}
request = urllib2.Request(url, headers=headers)
content = urllib2.urlopen(request).read().decode('GBK')
pattern = re.compile('(.+?)', \
re.S)
imgList = re.findall(pattern, content)
threads = []
for item in imgList:
tmpUrl = ''
tmpPath = ''
tmpUrl = mUrl + '/' + item[0] + '/'
tmpPath = filePath + item[1]
if imgTotalLock.acquire():
t = threading.Thread(target=getImgCatalog, args=(tmpUrl, tmpPath))
t.setDaemon(True)
threads.append(t)
imgTotalLock.release()
for i in range(len(threads)):
threads[i].start()
for i in range(len(threads)):
threads[i].join(100)
def main():
startTime = datetime.datetime.now()
#img save path
savePath = os.getcwd()
url = 'http://b.zol-img.com.cn/desk/bizhi/image/7/960x600/1450950428732.jpg'
#img name4
imgName = 'pic1.jpg'
#downloadImg(url, imgName, savePath)
sUrl = 'http://desk.zol.com.cn/bizhi/6128_75825_2.html'
fileName = 'meinv'
#getImgAssemble(sUrl, fileName, savePath)
cUrl = 'http://desk.zol.com.cn/meinv/'
cFilePath = savePath+'/meinv'
#getImgCatalog(cUrl, cFilePath)
getImgTotal(mUrl, savePath)
endTime = datetime.datetime.now()
print '
total running time : %d s' %(endTime-startTime).seconds
if __name__ == '__main__':
main()
가사 문제.높 은 사람 에 게 조언 을 청 하 다.
감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.