Disons qu'il y a un dossier qui vit au GitHub Repo:
https://github.com/someguy/brilliant/blob/master/somefile.txt
J'essaie d'utiliser des demandes pour demander ce fichier, écrire le contenu de celui-ci sur le disque dans le répertoire de travail actuel où il peut être utilisé ultérieurement. En ce moment, j'utilise le code suivant:
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)
Sans aucun doute moche, et plus important encore, ne fonctionne pas. Au lieu du texte attendu, je reçois:
<!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%;
}
etc.
Contenu de GitHub, mais pas le contenu du fichier. Qu'est-ce que je fais mal?
Le contenu du fichier en question est inclus dans les données retournées. Vous obtenez la vue complète Github de ce fichier, pas seulement le contenu.
Si vous souhaitez télécharger juste Le fichier, vous devez utiliser le lien Raw
en haut de la page, qui sera (pour votre exemple):
https://raw.github.com/someguy/brilliant/master/somefile.txt
Notez la modification du nom de domaine et la blob/
Une partie du chemin est parti.
Pour démontrer cela avec le référentiel requests
github lui-même:
>>> import requests
>>> r = requests.get('https://github.com/kennethreitz/requests/blob/master/README.rst')
>>> 'Requests:' in r.text
True
>>> r.headers['Content-Type']
'text/html; charset=utf-8'
>>> r = requests.get('https://raw.github.com/kennethreitz/requests/master/README.rst')
>>> 'Requests:' in r.text
True
>>> r.headers['Content-Type']
'text/plain; charset=utf-8'
>>> print r.text
Requests: HTTP for Humans
=========================
.. image:: https://travis-ci.org/kennethreitz/requests.png?branch=master
[... etc. ...]
Vous devez demander la version brute du fichier, de https://raw.github.com
.
Regarde la différence:
https://raw.github.com/django/django/master/setup.py vs. https://github.com/django/django/blob/master/setup. py
En outre, vous devriez probablement ajouter un /
entre votre répertoire et le nom de fichier:
>>> getcwd()+'foo.txt'
'/Users/burhanfoo.txt'
>>> import os
>>> os.path.join(getcwd(),'foo.txt')
'/Users/burhan/foo.txt'