Python 네트워크 파충류 테스트 칼 - ZOL 데스크 톱 벽지 캡 처 그림 4

17106 단어 python파충
전편 회고: 하나의 유형 집합 페이지 의 모든 집합 에 있 는 그림 을 얻 습 니 다.
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

부분 결과 캡 처: Python网络爬虫小试刀——抓取ZOL桌面壁纸图片4_第1张图片
우리 가 가 져 올 부분 은 그림 형식 으로 다음 과 같은 그림 을 분류 합 니 다. Python网络爬虫小试刀——抓取ZOL桌面壁纸图片4_第2张图片 그 중에서 유형 집합 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

결 과 는 다음 과 같다. Python网络爬虫小试刀——抓取ZOL桌面壁纸图片4_第3张图片
이 제 는 전편 에 쓰 인 집합 함수 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()

    가사 문제.높 은 사람 에 게 조언 을 청 하 다.
    감사합니다.

    좋은 웹페이지 즐겨찾기