2016-12-31 54 views
1

根據下面的代碼,我將拉取請求編號保存在一個文本文件中,我想將它們上傳到我的代碼中的url,但我得到了錯誤中提到的錯誤標題。urllib2.URLError:urlopen錯誤沒有給出主機

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') 

回溯(最近通話最後一個):

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> 

有人可以幫我解決這個問題呢? 謝謝。

+1

你檢查了生成的網址嗎?它有效嗎? – jophab

+0

文件中的每一行可能以換行符「\ n」結尾。所以從filw中讀取的數字最後可能會有\ n。這將導致網址無效 – jophab

回答

0

問題是從文件輸入。

read_file.readlines()返回一個列表,其中包含文件中的所有行,並在每行末尾換行符。

當您使用的URL,

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

這裏number將有\n底。

因此,生成的網址將不正確。

更好的方法是如下

閱讀使用str.splitlines

rf = read_file.read().splitlines() 

整個文件和分割線使用splitlines()你會得到文件中的行列表中沒有\n底。

所以不會有帶number

+0

非常感謝。問題已解決 –

+0

親愛的jophab,請你用另一種方式解釋,因爲我沒有得到你。 –

+0

是的,請請jophab –

1

上述問題有一個簡單的辦法了點。 我把它從https://github.com/rg3/youtube-dl/pull/11892/files(youtube-dl項目也有這個問題)。

修復pytube將是這樣(我會嘗試上傳一個拉請求今天): 在api.py文件中,你應該改變2代碼行。 首先作用下_get_cipher你應該改變行:

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

到:

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

二,功能from_url下,你應該改變這一行:

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

本代碼:

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

最後一個代碼清單的第一行中缺少一個換行符。 'js_url ='''[newline] 'js_partial_url = video_data.get(「assets」,{})。get(「js」)' – GuillaumeDufay