假设有一个文件存在于github repo中:
https://github.com/someguy/brilliant/blob/master/somefile.txt
我尝试使用requests来请求这个文件,把它的内容写到磁盘的当前工作目录中,以便以后使用。现在,我使用下面的代码:
import requests
from os import getcwd
url = "https://github.com/someguy/brilliant/blob/master/somefile.txt"
directory = getcwd()
filename = directory + 'somefile.txt'
r = requests.get(url)
f = open(filename,'w')
f.write(r.content)
毫无疑问很丑,更重要的是,不起作用。而不是预期的文本,我得到:
<!DOCTYPE html>
<!--
Hello future GitHubber! I bet you're here to remove those nasty inline styles,
DRY up these templates and make 'em nice and re-usable, right?
Please, don't. https://github.com/styleguide/templates/2.0
-->
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Page not found · GitHub</title>
<style type="text/css" media="screen">
body {
background: #f1f1f1;
font-family: "HelveticaNeue", Helvetica, Arial, sans-serif;
text-rendering: optimizeLegibility;
margin: 0; }
.container { margin: 50px auto 40px auto; width: 600px; text-align: center; }
a { color: #4183c4; text-decoration: none; }
a:visited { color: #4183c4 }
a:hover { text-decoration: none; }
h1 { letter-spacing: -1px; line-height: 60px; font-size: 60px; font-weight: 100; margin: 0px; text-shadow: 0 1px 0 #fff; }
p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; }
ul { list-style: none; margin: 25px 0; padding: 0; }
li { display: table-cell; font-weight: bold; width: 1%; }
#error-suggestions { font-size: 14px; }
#next-steps { margin: 25px 0 50px 0;}
#next-steps li { display: block; width: 100%; text-align: center; padding: 5px 0; font-weight: normal; color: rgba(0, 0, 0, 0.5); }
#next-steps a { font-weight: bold; }
.divider { border-top: 1px solid #d5d5d5; border-bottom: 1px solid #fafafa;}
#parallax_wrapper {
position: relative;
z-index: 0;
}
#parallax_field {
overflow: hidden;
position: absolute;
left: 0;
top: 0;
height: 370px;
width: 100%;
}
等等等等。
来自Github的内容,但不是文件的内容。我做错了什么?
4条答案
按热度按时间yizd12fk1#
相关文件的内容被包含在返回的数据中,你将得到该文件的完整GitHub视图,而不仅仅是内容。
如果您只想下载该文件,您需要使用页面顶部的
Raw
链接,该链接将是(对于您的示例):注意域名的变化,路径的
blob/
部分消失了。要使用
requests
GitHub仓库本身来演示这一点:odopli942#
您需要从
https://raw.githubusercontent.com
请求文件的原始版本。查看差异:
https://raw.githubusercontent.com/django/django/master/setup.py与https://github.com/django/django/blob/master/setup.py的比较
此外,您可能应该在目录和文件名之间添加一个
/
:2ic8powd3#
作为更新,
https://raw.github.com
was migrated更改为https://raw.githubusercontent.com
。因此,通用格式为:例如
https://raw.githubusercontent.com/earnestt1234/seedir/master/setup.py
。仍然使用Martijn答案中的requests.get(url)
。pod7payv4#
添加准备好复制+粘贴的工作示例:
(*)如果存储库不是私有的-删除标题部分。
查看this Curl Python-requests在线转换器。< --> Python-requests online converter.