Загрузите все ссылки (связанные документы) на веб-странице, используя Python - PullRequest
12 голосов
/ 12 мая 2011

Мне нужно загрузить много документов с веб-страницы. Это WMV-файлы, PDF, BMP и т. Д. Конечно, все они имеют ссылки на них. Поэтому каждый раз, когда мне нужно RMC-файл, выбираю «Сохранить ссылку как», затем сохраняем затем как «Все файлы». Возможно ли сделать это в Python? Я ищу SO DB, и люди ответили на вопрос, как получить ссылки с веб-страницы. Я хочу скачать актуальные файлы. Заранее спасибо. (Это не вопрос HW:)).

Ответы [ 2 ]

23 голосов
/ 12 мая 2011

Вот пример того, как вы можете загрузить некоторые выбранные файлы из http://pypi.python.org/pypi/xlwt

, вам необходимо сначала установить mechanize: http://wwwsearch.sourceforge.net/mechanize/download.html

import mechanize
from time import sleep
#Make a Browser (think of this as chrome or firefox etc)
br = mechanize.Browser()

#visit http://stockrt.github.com/p/emulating-a-browser-in-python-with-mechanize/
#for more ways to set up your br browser object e.g. so it look like mozilla
#and if you need to fill out forms with passwords.

# Open your site
br.open('http://pypi.python.org/pypi/xlwt')

f=open("source.html","w")
f.write(br.response().read()) #can be helpful for debugging maybe

filetypes=[".zip",".exe",".tar.gz"] #you will need to do some kind of pattern matching on your files
myfiles=[]
for l in br.links(): #you can also iterate through br.forms() to print forms on the page!
    for t in filetypes:
        if t in str(l): #check if this link has the file extension we want (you may choose to use reg expressions or something)
            myfiles.append(l)


def downloadlink(l):
    f=open(l.text,"w") #perhaps you should open in a better way & ensure that file doesn't already exist.
    br.click_link(l)
    f.write(br.response().read())
    print l.text," has been downloaded"
    #br.back()

for l in myfiles:
    sleep(1) #throttle so you dont hammer the site
    downloadlink(l)

Примечание: в некоторых случаяхВы можете заменить br.click_link(l) на br.follow_link(l).Разница в том, что click_link возвращает объект Request, тогда как follow_link будет непосредственно открывать ссылку.См. Механизировать разницу между br.click_link () и br.follow_link ()

5 голосов
/ 12 мая 2011
  • Следуйте кодам Python по этой ссылке: wget-vs-urlretrieve-of-python .
  • Вы также можете сделать это очень легко с Wget . Попробуйте --limit, --recursive и --accept командные строки в Wget. Например: wget --accept wmv,doc --limit 2 --recursive http://www.example.com/files/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...