
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, помогите пожалуйста новичку.
Есть скрипт, сохраняющий все картинки из html кода по веб ссылке на веб страницу. Проблема в том, что он пропускает картинки. Сохраняет не все. А именно метод handle_starttag с тегом img вызывается не для каждого тега img, т.е. происходит пропуск. Помогите, пожалуйста, понять в чем причина. Код скрипта привожу ниже ![]() ![]() """ Place files under C:\Python27\task Usage C:\Python27\python.exe 1.py http://www.google.ru """ import urllib2,urllib from urllib2 import URLError as urlError from HTMLParser import HTMLParser as HtmlParser import re import sys, traceback import os from optparse import OptionParser class LinkParser2(HtmlParser): def __init__(self): HtmlParser.__init__(self) self.links = [] def handle_starttag(self, tag, attrs): #print attrs #print "/n" #print tag #print attrs if (tag == "img"): print "ok" for attr in attrs: if (attr[0] != 'src'): #print "skip this one" continue if (len(attr) < 2): continue if ((attr[1] != "") and (attr[1] != None)): self.links.append(attr[1]) def exitWithError(error): print 'error : ' + error exit() def getPageSource(url): page = urllib2.urlopen(url) rpage = page.read() page.close() print rpage return rpage def getSiteFromUrl(url): if ((url == None) or(url == '')): return None siteRe = re.compile(r'^(https?://)?([\da-z\.-]*\.)?(?P<site>[\da-z\.-]+\.[a-z\.]{2,6})') res = siteRe.match(url) if (res): return res.groupdict()["site"] else: return None if __name__ == '__main__': op = OptionParser(description = 'getting external links from site' , prog = 'extHrefs' , usage = '%prog [-a] url') op.add_option('--all', '-a' , action = 'store_true' , help = 'print all links' , default = False) opts, args = op.parse_args() if (len(args) != 1): op.print_help() exit() url = args[0] try: source = getPageSource(url) except ValueError: exitWithError('wrong url - ' + url) except urlError: exitWithError("can't find url - " + url) except: traceback.print_exc() exitWithError("unknown error with url - " + url) site = getSiteFromUrl(url) linkParser = LinkParser2() print 'parsing...' linkParser.feed(source) print linkParser.links for src in linkParser.links: #linkSite = getSiteFromUrl(src) if not src.startswith('http://'): src = url + src try: try: os.makedirs("img") except OSError: pass print "src = ", src page = urllib2.urlopen(src) content = page.read() page.close() #print content #urllib.urlretrieve(src,"img/"+src.split('/')[-1]) fname = "img/"+src.split('/')[-1] pos = fname.find(".") if pos < 0: fname += ".jpg" pos1 = fname.find("?") if pos1 >= 0: fname = fname[0:pos1] f = open(fname, 'wb') f.write(content) f.close() except UnicodeEncodeError: print "error while encoding link" |
Сообщ.
#2
,
|
|
|
Может попробовать Beautiful Soup?
Цитата Tigra @ А именно метод handle_starttag с тегом img вызывается не для каждого тега img, т.е. происходит пропуск. Помогите, пожалуйста, понять в чем причина. Код скрипта привожу ниже А уверены, что эти пропущенные теги сформированы корректно? ![]() |
Сообщ.
#3
,
|
|
|
Beautiful Soup не подойдет... нужно реализовать стандартными библиотеками.
|