2010-10-29 151 views
-5

我做了一些python腳本,我想讓這個腳本exe文件。py2exe編譯時出錯

但在編譯此腳本時,EXE,一些錯誤的邂逅,我是嘗試解決此問題

,但沒有運氣。

以下是腳本源

如果有人能幫助我真的很感激!

# -*- coding: utf-8 -*- 

import lxml,cookielib,urllib,configobj,sys,getopt,string,mechanize,time,os 
from lxml import etree 
from lxml.html import parse, fromstring 
import sys, getopt, string 
import lxml.html 

br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 
br.set_handle_equiv(True) 
br.set_handle_gzip(True) 
br.set_handle_redirect(True) 
br.set_handle_referer(True) 
br.set_handle_robots(False) 

# Follows refresh 0 but not hangs on refresh > 0 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 

# Want debugging messages? 
br.set_debug_http(False) 
br.set_debug_redirects(False) 
br.set_debug_responses(False) 

# User-Agent (this is cheating, ok?) 
br.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)')] 

SAVEFILE= 'betextract.txt' 
post_count = 0 
mac = '' 
def getMacAddress(): 
     if sys.platform == 'win32': 
     for line in os.popen("ipconfig /all"): 
      if line.lstrip().startswith('Physical Address'): 
      mac = line.split(':')[1].strip().replace('-',':') 
      break 
     else: 
     for line in os.popen("/sbin/ifconfig"): 
      if line.find('Ether') > -1: 
      mac = line.split()[4] 
      break 
     return mac 
     print mac 
getMacAddress() 
print mac 
def safeunicode(s): 
     s = str(s).decode('utf-8') 
     try: 
     return s.encode('euc-kr').decode('cp949') 
     except UnicodeDecodeError: 
     return s 

#check_demo() 
#from configobj import ConfigObj Template 화일 불러오기 ini 
config = configobj.ConfigObj('config.ini') 
section1 = config['NAVERPASS'] 
section2 = config['NAVERID'] 
section3 = config['Nblogkeyword'] 
section4 = config['end_line'] 
section5 = config['Content'] 
section6 = config['HongboSubject'] 
section7 = config['HongboBody'] 

NAVERPASS  = section1['NAVERPASS'] 
NAVERID  = section2['NAVERID'] 
Nblogkeyword = section3['Nblogkeyword'] 
end_line  = section4['end_line'] 
Content  = section5['Content'] 
HongboSubject = section6['HongboSubject'] 
HongboBody = section7['HongboBody'] 

enkw = str(Nblogkeyword).decode('cp949') 

#아래부분에서 빼기를 위한 int로 변환 
end_line  = int(section4['end_line']) 
start_line = 0 
while end_line: 
    #end_line = end_line - 9 
    form = { 
     'where': 'post', 
     'sm' : 'ab_pge', 
     'query' : enkw, 
     'st' : 'sim', 
     'date_option' : '-1', 
     'date_from' : '', 
     'date_to' : '', 
     'dup_remove' : '1', 
     'post_blogid' : '', 
     'post_blogurl' : '', 
     'post_blogurl_without' : '', 
     'detail_and_query' : '', 
     'detail_not_query' : '', 
     'detail_or_query' : '' , 
     'detail_udp_query' : '', 
     'srchby' : 'all', 
     'nso' : 'so%3Ar%2Ca%3Aall%2Cp%3A', 
     'ie' : 'utf8', 
     'start' : start_line 
     } 
    qstring = urllib.urlencode(form) 
    f = urllib.urlopen('http://cafeblog.search.naver.com/search.naver?%s' %qstring) 
    html = f.read() 
    f.close() 
    start_line += 10 
    end_line = end_line - 10 
    s= [] 
    html = lxml.html.fromstring(html) 
    save = open(SAVEFILE, 'w+') 
    for content in html.cssselect('li.sh_blog_top'): 
     try: 
      subject = content.cssselect('dl dt a.sh_blog_title b')[0].text_content() 
      body = content.cssselect('dl dd.sh_blog_passage')[0].text_content() 
      print u'[+추출중+] %s | %s ' %(subject , body) 

      chen = '%s|%s' %(subject, body) #중요 이런식으로 처리를 해야함 꼭 인코딩! 
      title2 = chen.encode('cp949') 
      save.write(title2 + '\n')    
     except Exception, err: 
      sys.stderr.write(u'에러발생 => 에러 자동처리중... %s\n' % str(err)) 
      content = '' 
      break 


    save.close() 
    #print subject , body 
    #s.append(subject) 
    #s.append(body) 
    #print '|'.join(s) 


## Show the response headers 
#print br.info() 
## or 
##print br.response().info() 
#for link in br.links(): 
    #print link 
br.open('http://nid.naver.com/nidlogin.login') 
#for f in br.forms(): 
    #print f 

br.select_form(nr=0) 
br.form['id']=NAVERID 
br.form['pw']=NAVERPASS 
#br.click(type="submit", nr=0) 
#print br.forms() 
#br.submit(name="URL", nr=0) 
#html = br.response().read() 
#print html 
br.form.action='https://nid.naver.com/nidlogin.login' #javascript source analysis!! have to find inside javascript source 
br.submit() 
html = br.response().read() 
#decoded = br.response().read().decode('utf-8') 
#print html 
br.open('http://m.blog.naver.com/') 
save = open(SAVEFILE) 
for line in save: 
    sub = line.split('|')[0] 
    con = line.split('|')[1].replace('\n', '') 
    #print sub, con 

    br.open('http://m.blog.naver.com/PostWriteForm.nhn?blogId=ylgwn&categoryNo=') 
    #print br.response().read()  
    #for f in br.forms(): 
     #print f 
    br.select_form(nr=0) 
    entest = "%s" %(sub) 
    br.form['post.title']= sub.decode('cp949') + HongboSubject.decode('cp949') 
    br.form['post.contents.contentsValue']= con.decode('cp949') + HongboBody.decode('cp949') 
    #req = br.click_link(text=u'확인') 
    #br.open(req) 
    #br.form.click(kind="clickable") 
    #for link in br.links(): 
     #print link 
    #br.follow_link(nr=1 

    #br.follow_link(text=u"확인") 
    #req = br.click(type="submit") 
    #br.open(req) 
    br.form.action='http://m.blog.naver.com/PostWrite.nhn' 
    br.submit() 
    post_count += 1 
    print str(post_count) +u'개 글올리기 성공!!' 
save.close() 
print u'블로그 글올리기 완료!' 
+8

什麼是錯誤?說「有些錯誤」並不是非常具體,因此很難提供幫助。 – eldarerathis 2010-10-29 13:39:29

+0

Hello..i被用來通過py2exe製作exe文件。 – paul 2010-10-29 15:03:41

+2

是的,我明白這一點。不過,我的問題是,你得到了什麼特定的錯誤?有很多事情可能會導致錯誤,併發布「遇到一些錯誤」,而代碼牆並不是那麼有用。但是,錯誤消息的文本會*有幫助。 – eldarerathis 2010-10-29 15:16:28

回答

1

在我看來,你打印gzipped的數據到命令行。可能是因爲服務器返回的數據在編譯爲exe時沒有被urllib解壓縮。

嘗試手動刪除Accept-Encoding標頭,這將阻止服務器返回壓縮數據並防止腳本失敗。您可能還想嘗試使用urllib2或其他解決方案從網上下載數據。

+0

非常感謝..解決了我的問題:) – paul 2010-11-03 23:07:02