2016-12-31 3 views
1

Gemäß diesem Code unten, ich habe die Pull-Anfrage Nummer in einer Textdatei gespeichert und ich möchte sie auf die URL hochladen, die in meinem Code ist, aber ich habe den Fehler in der erwähnt Titel.urllib2.URLError: urlopen Fehler kein Host angegeben

import urllib2 
import json 
import httplib 
def event_spider(org,repo): 
    try: 
     nbPrequest_reopened=0 #number of pull requests reopened 
     pages=1 
     while pages<=3: 
      headers={'User-Agent':'Mozilla/5.0(X11;Linux i686)', 
       'Authorization':'token 516ed78e0521c6b25d9726ad51fa63841d019936',} 
      read_file=open('C:\Python27\pullRequest_number.txt','r+') 
      rf=read_file.readlines() 
      for number in rf: 
       url_event=('https://api.github.com/repos/'+ org +'/'+ repo + '/issues/'+ str(number) +'/events?per_page=99&state=all&page='+str(pages)) 
       event_Request=urllib2.Request(url_event,headers=headers) 
       eventObject=urllib2.urlopen(event_Request) 
       eventData=json.load(eventObject) 
       for element in eventData: 
        if element['event']=='reopened': 
         nbPrequest_reopened+=1 
       #print url_event 
      pages+=1 
    except httplib.BadStatusLine: 
     pass 
    print 'The number of pull request reopened is %s ' %(nbPrequest_reopened) 
if __name__=='__main__': 
    event_spider('rails','rails') 

Traceback (jüngste Aufforderung zuletzt):

File "C:/Users/ABDILLAH/PycharmProjects/Pandas_data_analysis/event_spider.py", line 27, in <module> 
    event_spider('rails','rails') 
    File "C:/Users/ABDILLAH/PycharmProjects/Pandas_data_analysis/event_spider.py", line 16, in event_spider 
    eventObject=urllib2.urlopen(event_Request) 
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\Python27\lib\urllib2.py", line 427, in open 
    req = meth(req) 
    File "C:\Python27\lib\urllib2.py", line 1126, in do_request_ 
    raise URLError('no host given') 
urllib2.URLError: <urlopen error no host given> 

Kann jemand mir helfen, dieses Problem zu lösen? Danke.

+1

Haben Sie die generierte URL überprüft? Ist es gültig? – jophab

+0

Jede Zeile in der Datei endet möglicherweise mit einem Zeilenvorschubzeichen "\ n". So kann deine Zahl, die von filw gelesen wird, \ n am Ende haben. Das wird die URL ungültig machen – jophab

Antwort

0

Das Problem liegt in der Eingabe von Daten aus der Datei.

read_file.readlines() gibt eine Liste zurück, die alle Zeilen in der Datei mit einem Zeilenumbruchzeichen am Ende jeder Zeile enthält.

Wenn Sie die URL erstellen verwenden,

url_event=('https://api.github.com/repos/'+ org +'/'+ repo + 
'/issues/'+ str(number) +.....) 

Hier number ein \n am Ende werden zu müssen.

Daher wird die generierte URL nicht korrekt sein.

Ein besserer Ansatz ist wie folgt

Lesen Sie die gesamte Datei und Teilungslinien mit str.splitlines

rf = read_file.read().splitlines() 

von splitlines() verwenden Sie die Liste der Zeilen in der Datei ohne \n am Ende zu bekommen.

So wird es nicht das oben genannte Problem sein mit number

+0

Vielen Dank. Problem gelöst –

+0

Lieber Jophab, kannst du das bitte auf eine andere Art erklären, weil ich dich nicht verstehe. –

+0

Ja bitte jophab –

1

Es gibt eine einfache Lösung dafür. Ich nahm es von https://github.com/rg3/youtube-dl/pull/11892/files (Youtube-DL-Projekt hatte dieses Problem auch).

Fix in pytube wird so sein (Ich werde versuchen, eine Pull-Anfrage bis heute hochzuladen): In api.py Datei sollten Sie 2 Codezeilen ändern. Zunächst unter der Funktion _get_cipher Sie die Zeile ändern sollte:

reg_exp = re.compile(r'\.sig\|\|([a-zA-Z0-9$]+)\(') 

zu:

reg_exp = re.compile(r'"signature",\s?([a-zA-Z0-9$]+)\(') 

Zweitens unter der Funktion from_url sollten Sie diese Zeile:

js_url = "http:" + video_data.get("assets", {}).get("js") 

dazu Code:

js_url = '' js_partial_url = video_data.get("assets", {}).get("js") 
if js_partial_url.startswith('//'): 
    js_url = 'http:' + js_partial_url 
elif js_partial_url.startswith('/'): 
    js_url = 'https://youtube.com' + js_partial_url 
+0

In der ersten Zeile der letzten Codeauflistung fehlt ein Zeilenumbruch. 'js_url = ''' [Zeilenumbruch] 'js_partial_url = video_data.get (" Assets ", {}). Get (" js ")' – GuillaumeDufay

Verwandte Themen