Après avoir exécuté le code suivant, je ne parviens pas à ouvrir les fichiers PDF téléchargés. Même si le code s'est exécuté correctement, les fichiers PDF téléchargés sont endommagés.
Le message d'erreur de mon ordinateur est
Impossible d'ouvrir le fichier. il est peut-être endommagé ou dans un format que Preview ne reconnaît pas.
Pourquoi sont-ils endommagés et comment résoudre ce problème?
import os import requests from urllib.parse import urljoin from bs4 import BeautifulSoup url = "https://github.com/sonhuytran/MIT8.01SC.2010F/tree/master/References/University%20Physics%20with%20Modern%20Physics%2C%2013th%20Edition%20Solutions%20Manual" #If there is no such folder, the script will create one automatically folder_location = r'/Users/rahelmizrahi/Desktop/ Physics_Solutions' if not os.path.exists(folder_location):os.mkdir(folder_location) response = requests.get(url) soup= BeautifulSoup(response.text, "html.parser") for link in soup.select("a[href$='.pdf']"): filename = os.path.join(folder_location,link['href'].split('/')[-1]) with open(filename, 'wb') as f: f.write(requests.get(urljoin(url,link['href'])).content)
3 Réponses :
Le problème est que le fichier n'est pas correctement fermé après l'ouverture / l'écriture.
Ajoutez simplement f.close ()
à la fin du code pour le faire.
Ce problème est que vous demandez le lien qui se trouve dans github 'blob'
lorsque vous avez besoin du lien 'raw'
:
import os import requests from urllib.parse import urljoin from bs4 import BeautifulSoup url = "https://github.com/sonhuytran/MIT8.01SC.2010F/tree/master/References/University%20Physics%20with%20Modern%20Physics%2C%2013th%20Edition%20Solutions%20Manual" #If there is no such folder, the script will create one automatically folder_location = r'/Users/rahelmizrahi/Desktop/Physics_Solutions' if not os.path.exists(folder_location):os.mkdir(folder_location) response = requests.get(url) soup= BeautifulSoup(response.text, "html.parser") for link in soup.select("a[href$='.pdf']"): pdf_link = link['href'].replace('blob','raw') pdf_file = requests.get('https://github.com' + pdf_link) filename = os.path.join(folder_location,link['href'].split('/')[-1]) with open(filename, 'wb') as f: f.write(pdf_file.content)
mais vous voulez:
'/sonhuytran/MIT8.01SC.2010F/raw/master/References/University%20Physics%20with%20Modern%20Physics%2C%2013th%20Edition%20Solutions%20Manual/A01_YOUN6656_09_ISM_FM.pdf'
Alors ajustez cela. Code complet ci-dessous:
'/sonhuytran/MIT8.01SC.2010F/blob/master/References/University%20Physics%20with%20Modern%20Physics%2C%2013th%20Edition%20Solutions%20Manual/A01_YOUN6656_09_ISM_FM.pdf'
J'ai dû utiliser soup.select ("a [href $ =. pdf]") (sans les guillemets intérieurs) pour qu'il sélectionne correctement les liens.
Après cela, votre script fonctionne, mais: quoi que vous téléchargez n'est pas un PDF, mais une page Web HTML! Essayez de visiter l'une des URL: https://github.com/sonhuytran/MIT8.01SC.2010F/blob/master/References/University%20Physics%20with%20Modern%2201%20Physics % 20Edition% 20Solutions% 20Manual / A01_YOUN6656_09_ISM_FM.pdf
Une page Web GitHub vous sera présentée, pas le PDF réel. Pour l'obtenir, vous avez besoin de l'URL GitHub "brute", que vous pouvez voir lorsque vous passez la souris sur le bouton Télécharger: https://github.com/sonhuytran/MIT8.01SC.2010 /master/References/University%20Physics%20with%20Modern%20Physics%2C%2013th%20Edition%20Solutions%20Manual/A01_YOUN6656_09_ISM_FM.pdf
Il semble donc que vous ayez juste à remplacer blob avec raw
au bon endroit pour le faire fonctionner:
href = link['href'] href = href.replace('/blob/', '/raw/') requests.get(urljoin(url,href).content)