Es gibt keine kurze Antwort auf Ihre Frage. Ich werde Ihnen eine komplette Lösung zeigen und diesen Code kommentieren.
Zunächst importieren notwendigen Module:
from bs4 import BeautifulSoup
import requests
import re
Als nächstes Index-Seite erhalten und BeautifulSoup
Objekt erstellen:
req = requests.get("http://www.chessgames.com/perl/chesscollection?cid=1014492")
soup = BeautifulSoup(req.text, "lxml")
ich dringend raten lxml
Parser zu verwenden, nicht gemeinsam html.parser
Danach werden Sie sollte die Linksliste des Spiels vorbereiten:
pages = soup.findAll('a', href=re.compile('.*chessgame\?.*'))
Sie können dies tun, indem Sie Links mit dem Wort "chessgame" darin suchen. Nun sollten Sie Funktion herzustellen, die Dateien für Sie herunterladen werden:
def download_file(url):
path = url.split('/')[-1].split('?')[0]
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)
und letzte Magie alle bisherigen Schritte der Vorbereitung Links für Datei-Downloader wiederholen:
host = 'http://www.chessgames.com'
for page in pages:
url = host + page.get('href')
req = requests.get(url)
soup = BeautifulSoup(req.text, "lxml")
file_link = soup.find('a',text=re.compile('.*download.*'))
file_url = host + file_link.get('href')
download_file(file_url)
(zuerst suchen Sie Links Text enthält 'download' in ihrer Beschreibung, dann Konstruieren vollständige URL - verketten Hostname und Pfad, und schließlich Download-Datei)
Ich hoffe, Sie können diesen Code ohne Korrektur verwenden!
Danke, funktioniert hervorragend! –
Warum sollte ich Anfragen und nicht urllib übrigens verwenden? Kannst du das gleiche mit Urllib machen? –
Natürlich können Sie 'urllib' verwenden, wie Sie es in Ihrer Frage getan haben. Aber 'Anfragen' sind eine gute Übung. Sie können zusätzliche Informationen erhalten [hier] (https://stackoverflow.com/questions/2018026/what-are-the-differences-between-the-urllib-urllib2-and-requests-module) –