6

このサイトからいくつかのファイルをダウンロードしたい:http ://www.emuparadise.me/soundtracks/highquality/index.php

しかし、私は特定のものだけを手に入れたいです。

これを行うためのPythonスクリプトを作成する方法はありますか?私はPythonの中間知識を持っています

私はちょっとしたガイダンスを探しています。これを達成するためにウィキまたはライブラリに私を向けてください

ありがとう、低木

これが私のコードへのリンクです

4

4 に答える 4

4

そのページを見ました。リンクは、ファイルがホストされている別のページにリダイレクトされているように見えます。クリックすると、ファイルがダウンロードされます。

mechanizeを使用して適切なページへの必要なリンクをたどり、BeautifulSoupまたはlxmlを使用して結果のページを解析し、ファイル名を取得します。

次に、urlopenを使用してファイルを開き、その内容を次のようにローカルファイルに書き出すだけです。

f = open(localFilePath, 'w')
f.write(urlopen(remoteFilePath).read())
f.close()

お役に立てば幸い

于 2012-09-25T22:34:34.900 に答える
1

ページのURLリクエストを作成します。ソースを取得したら、フィルターで除外してURLを取得します。

ダウンロードするファイルは、特定の拡張子を含むURLです。これにより、条件に一致するすべてのURLに対して正規表現検索を実行できます。フィルタリング後、一致したURLのデータごとにURLリクエストを実行し、メモリに書き込みます。

サンプルコード:

#!/usr/bin/python
import re
import sys
import urllib

#Your sample url
sampleUrl = "http://stackoverflow.com"
urlAddInfo = urllib.urlopen(sampleUrl)
data = urlAddInfo.read()

#Sample extensions we'll be looking for: pngs and pdfs
TARGET_EXTENSIONS = "(png|pdf)"
targetCompile = re.compile(TARGET_EXTENSIONS, re.UNICODE|re.MULTILINE)

#Let's get all the urls: match criteria{no spaces or " in a url}
urls = re.findall('(https?://[^\s"]+)', data, re.UNICODE|re.MULTILINE)

#We want these folks
extensionMatches = filter(lambda url: url and targetCompile.search(url), urls)

#The rest of the unmatched urls for which the scrapping can also be repeated.
nonExtMatches = filter(lambda url: url and not targetCompile.search(url), urls)


def fileDl(targetUrl):
  #Function to handle downloading of files.
  #Arg: url => a String
  #Output: Boolean to signify if file has been written to memory

  #Validation of the url assumed, for the sake of keeping the illustration short
  urlAddInfo = urllib.urlopen(targetUrl)
  data = urlAddInfo.read()
  fileNameSearch = re.search("([^\/\s]+)$", targetUrl) #Text right before the last slash '/'
  if not fileNameSearch:
     sys.stderr.write("Could not extract a filename from url '%s'\n"%(targetUrl))
     return False
  fileName = fileNameSearch.groups(1)[0]
  with open(fileName, "wb") as f:
    f.write(data)
    sys.stderr.write("Wrote %s to memory\n"%(fileName))
  return True

#Let's now download the matched files
dlResults = map(lambda fUrl: fileDl(fUrl), extensionMatches)
successfulDls = filter(lambda s: s, dlResults)
sys.stderr.write("Downloaded %d files from %s\n"%(len(successfulDls), sampleUrl))

#You can organize the above code into a function to repeat the process for each of the
#other urls and in that way you can make a crawler.

上記のコードは主にPython2.X用に書かれています。ただし、2.X以降のすべてのバージョンで動作するクローラーを作成しました

于 2013-07-31T16:27:10.717 に答える
0

なぜいいの!5年後、これが可能になるだけでなく、今では多くの方法があります。
ここではコード例を避けます。主に、問題をセグメントに分割し、探索のためのいくつかのオプションを提供したいからです。

セグメント1:GET!

python2またはpython3のいずれかで、に固執する必要がある場合は、 *がインターネットから何かをプルダウンするために使用するものです。 繰り返しになりますが、他のパッケージに依存したくない場合は、次のようにします。stdliburllib[n]

  • urllibまたはurllib2または多分urllib[n]私が忘れている別のもの。

インポートを標準ライブラリに制限する必要がない場合:

あなたは運がいいです!!!!! あなたが持っている:

  • requestsここにドキュメントがあります。requestsは、Pythonを使用してWebから取得するためのゴールデンスタンダードです。使用することをお勧めします。
  • uplinkここにドキュメントがあります。これは比較的新しく、よりプログラム的なクライアントインターフェイス用です。
  • aiohttpここasyncioのドキュメントで経由します。python> = 3.5にのみ含まれ、さらに混乱を招きます。とは言うものの、時間を割いても構わないと思っているのであれば、まさにこのユースケースでは途方もなく効率的です。asyncio

...クロール用の私のお気に入りのツールの1つは言うまでもありません。

  • fake_useragentここにレポ。ドキュメントは真剣に必要ではありません。

セグメント2:解析!

繰り返しになりますが、stdlibに固執し、で何もインストールしない必要pipがある場合は、非常に楽しく安全な(<== Extreme-sarcasm)xml組み込みモジュールを使用できます。具体的には、次のものを使用できます。

  • xml.etree.ElementTree()ここにドキュメントがあります。

ElementTreeオブジェクトは、pip-downloadablelxmlパッケージのベースであり、使いやすくなっていることに注意してください。ホイールを再作成して独自の複雑なロジックを作成する場合は、デフォルトのxmlモジュールを使用することを選択できます。

インポートを標準ライブラリに制限する必要がない場合:

  • lxmlここにドキュメントがあります。前に言ったように、これlxmlは人間が使用できるようにするラッパーでxml.etreeあり、自分で作成する必要のあるすべての解析ツールを実装します。ただし、ドキュメントにアクセスするとわかるように、それだけで使用するのは簡単ではありません。これは私たちをもたらします...
  • BeautifulSoup別名、ここbs4にドキュメントがあります。BeautifulSoupはすべてを簡単にします。これは私のおすすめです。

セグメント3:GET GET GET!

このセクションは、リンクが1つではないことを除けば、「セグメント1」とほぼ同じです。このセクションと「セグメント1」の間で変更されるのは、使用するものについての私の推奨事項だけです。複数のURLを並行してダウンロードできるため、複数のURLを処理するときにaiohttpダウンロードがはるかに高速になります。****


*-(どこnで決定されたのか-python-versionからptyhon-versionに、ややイライラするほど恣意的な方法で。トップレベルの関数としてurllib[n]持っているものを調べてください.urlopen()。この命名規則clusterf ** kの詳細については、ここを参照してください。 、そしてここで。)
** -(これは完全に真実ではありません。人間のタイムスケールでは、より機能的に真実です。)

于 2018-07-28T20:27:28.593 に答える
-1

ダウンロードにはwgetを組み合わせて使用​​します-http : //www.thegeekstuff.com/2009/09/the-ultimate-wget-download-guide-with-15-awesome-examples/#more-1885 とBeautifulSouphttp ダウンロードしたファイルを解析するための//www.crummy.com/software/BeautifulSoup/bs4/doc/

于 2012-09-25T22:40:09.383 に答える