1

これは私の最初の Python プロジェクトなので、非常に基本的で初歩的なものです。友人のためにウイルスを一掃しなければならないことがよくあり、使用している無料のプログラムは頻繁に更新されます。各プログラムを手動でダウンロードする代わりに、プロセスを自動化する簡単な方法を作成しようとしていました. 私もpythonを学ぼうとしているので、練習する良い機会になると思いました。

質問:

いくつかのリンクを含む .exe ファイルを見つける必要があります。正しい URL を見つけることができますが、ダウンロードしようとするとエラーが発生します。

すべてのリンクをリストに追加してから、リストを調べて各 URL で関数を実行する関数を作成する方法はありますか? 私はグーグルでかなりのことをしましたが、それを機能させることができないようです。多分私は正しい方向に考えていませんか?

import urllib, urllib2, re, os
from BeautifulSoup import BeautifulSoup

# Website List
sas = 'http://cdn.superantispyware.com/SUPERAntiSpyware.exe'
tds = 'http://support.kaspersky.com/downloads/utils/tdsskiller.exe'
mbam = 'http://www.bleepingcomputer.com/download/malwarebytes-anti-malware/dl/7/?1'
tr = 'http://www.simplysup.com/tremover/download.html'
urllist = [sas, tr, tds, tr]
urrllist2 = []

# Find exe files to download

match = re.compile('\.exe')
data = urllib2.urlopen(urllist)
page = BeautifulSoup(data)

# Check links
#def findexe():
for link in page.findAll('a'):
    try:
        href = link['href']
        if re.search(match, href):
            urllist2.append(href)

    except KeyError:
        pass

os.chdir(r"C:\_VirusFixes")
urllib.urlretrieve(urllist2, os.path.basename(urllist2))

ご覧のとおり、関数を正しく動作させることができないため、関数をコメントアウトしたままにしています。

リストを破棄して、個別にダウンロードする必要がありますか? 効率化を図っていました。

何か提案があれば、または正しい方向に向けていただければ幸いです。

4

3 に答える 3

1

mikez302's answerに加えて、コードを書くためのもう少し読みやすい方法を次に示します。

import os
import re
import urllib
import urllib2

from BeautifulSoup import BeautifulSoup

websites = [
    'http://cdn.superantispyware.com/SUPERAntiSpyware.exe'
    'http://support.kaspersky.com/downloads/utils/tdsskiller.exe'
    'http://www.bleepingcomputer.com/download/malwarebytes-anti-malware/dl/7/?1'
    'http://www.simplysup.com/tremover/download.html'
]

download_links = []

for url in websites:
    connection = urllib2.urlopen(url)
    soup = BeautifulSoup(connection)
    connection.close()

    for link in soup.findAll('a', {href: re.compile(r'\.exe$')}):
        download_links.append(link['href'])

for url in download_links:
    urllib.urlretrieve(url, r'C:\_VirusFixes', os.path.basename(url))
于 2012-11-15T00:57:28.800 に答える
0

urllib2.urlopen単一の URL にアクセスするための関数です。複数のものにアクセスしたい場合は、リストをループする必要があります。次のようにする必要があります。

for url in urllist:
    data = urllib2.urlopen(url)
    page = BeautifulSoup(data)

    # Check links
    for link in page.findAll('a'):
        try:
            href = link['href']
            if re.search(match, href):
                urllist2.append(href)

        except KeyError:
            pass

    os.chdir(r"C:\_VirusFixes")
    urllib.urlretrieve(urllist2, os.path.basename(urllist2))
于 2012-11-15T00:52:12.450 に答える