2012-12-08 15 views
30

ich diesen Fehler bekam, als test.py laufenImport httplib Import: Kein Modul httplib namens

C:\Python32>python.exe test.py 
Traceback (most recent call last): 
    File "test.py", line 5, in <module> 
    import httplib 
ImportError: No module named httplib 

Wie es zu korrigieren?

Codeblock:

#!/usr/local/bin/python 

import httplib 
import sys 
import re 
from HTMLParser import HTMLParser 


class miniHTMLParser(HTMLParser): 

    viewedQueue = [] 
    instQueue = [] 

    def get_next_link(self): 
    if self.instQueue == []: 
     return '' 
    else: 
     return self.instQueue.pop(0) 


    def gethtmlfile(self, site, page): 
    try: 
     httpconn = httplib.HTTPConnection(site) 
     httpconn.request("GET", page) 
     resp = httpconn.getresponse() 
     resppage = resp.read() 
    except: 
     resppage = "" 

    return resppage 


    def handle_starttag(self, tag, attrs): 
    if tag == 'a': 
     newstr = str(attrs[0][1]) 
     if re.search('http', newstr) == None: 
     if re.search('mailto', newstr) == None: 
      if re.search('htm', newstr) != None: 
      if (newstr in self.viewedQueue) == False: 
       print (" adding", newstr) 
       self.instQueue.append(newstr) 
       self.viewedQueue.append(newstr) 
      else: 
      print (" ignoring", newstr) 
     else: 
      print (" ignoring", newstr) 
     else: 
     print (" ignoring", newstr) 


def main(): 

    if sys.argv[1] == '': 
    print ("usage is ./minispider.py site link") 
    sys.exit(2) 

    mySpider = miniHTMLParser() 

    link = sys.argv[2] 

    while link != '': 

    print ("\nChecking link ", link) 

    # Get the file from the site and link 
    retfile = mySpider.gethtmlfile(sys.argv[1], link) 

    # Feed the file into the HTML parser 
    mySpider.feed(retfile) 

    # Search the retfile here 

    # Get the next link in level traversal order 
    link = mySpider.get_next_link() 

    mySpider.close() 

    print ("\ndone\n") 

if __name__ == "__main__": 
    main() 

Antwort

54

Sie führen Python-2-Code auf Python 3. In Python 3 ist das Modul an http.client umbenannt.

Sie könnten versuchen, die 2to3 tool auf Ihrem Code auszuführen, und versuchen, es automatisch übersetzt haben. Verweise auf httplib werden automatisch neu geschrieben, um stattdessen http.client zu verwenden.

+0

würde das 2to3-Tool auch für externe Lib als Selen funktionieren, weil ich das gleiche Problem habe, scheint mir, dass Selen-Python-Wrapper falschen Namen verwendet (ich aktualisiere es, so ist es die letzte Selen-Python-Wrapper) –

+1

Selen ist voll Python 3 kompatibel. Es sollte * nicht nötig * sein, mit dem '2to3' Werkzeug zu beginnen. Höchstwahrscheinlich stimmt etwas anderes nicht. –