このサイトからすべてのPGNをダウンロードしようとしています。
を使用urlopen
して各URLを開きurlretrieve
、各ゲームの下部にあるダウンロードボタンからアクセスして各pgnをダウンロードする必要があると思います。BeautifulSoup
ゲームごとに新しいオブジェクトを作成する必要がありますか?また、どのようにurlretrieve
機能するのかもわかりません。
import urllib
from urllib.request import urlopen, urlretrieve, quote
from bs4 import BeautifulSoup
url = 'http://www.chessgames.com/perl/chesscollection?cid=1014492'
u = urlopen(url)
html = u.read().decode('utf-8')
soup = BeautifulSoup(html, "html.parser")
for link in soup.find_all('a'):
urlopen('http://chessgames.com'+link.get('href'))
あなたの質問に対する短い答えはありません。完全な解決策を示し、このコードにコメントします。
まず、必要なモジュールをインポートします。
from bs4 import BeautifulSoup
import requests
import re
次に、インデックスページを取得し、BeautifulSoup
オブジェクトを作成します。
req = requests.get("http://www.chessgames.com/perl/chesscollection?cid=1014492")
soup = BeautifulSoup(req.text, "lxml")
lxml
一般的ではないパーサーを使用することを強くお勧めします。html.parser
その後、ゲームのリンクリストを準備する必要があります。
pages = soup.findAll('a', href=re.compile('.*chessgame\?.*'))
'chessgame'という単語を含むリンクを検索することでそれを行うことができます。ここで、ファイルをダウンロードする関数を準備する必要があります。
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)
そして最後の魔法は、ファイルダウンローダーのリンクを準備する前のすべての手順を繰り返すことです。
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)
(最初に説明に「ダウンロード」というテキストを含むリンクを検索し、次に完全なURLを作成します-ホスト名とパスを連結し、最後にファイルをダウンロードします)
このコードを修正せずに使用できることを願っています!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加