2016-12-31 56 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