C'è un file FLV sul Web che può essere scaricato direttamente in Chrome. Il file è un programma televisivo, pubblicato da CCTV (China Central Television). CCTV è un'emittente pubblica senza scopo di lucro, finanziata dal contribuente cinese, che ci consente di scaricare i loro contenuti senza violare i diritti d'autore.Emulazione di un browser per scaricare un file?
Utilizzando wget
, posso scaricare il file da un indirizzo diverso, ma non dall'indirizzo che funziona in Chrome.
Questo è quello che ho cercato di fare:
url='http://114.80.235.200/f4v/94/163005294.h264_1.f4v?10000&key=7b9b1155dc632cbab92027511adcb300401443020d&playtype=1&tk=163659644989925531390490125&brt=2&bc=0&nt=0&du=1496650&ispid=23&rc=200&inf=1&si=11000&npc=1606&pp=0&ul=2&mt=-1&sid=10000&au=0&pc=0&cip=222.73.44.31&hf=0&id=tudou&itemid=135558267&fi=163005294&sz=59138302'
wget -c $url --user-agent="" -O xfgs.f4v
Questo non funziona neanche:
wget -c $url -O xfgs.f4v
l'output è:
Connecting to 118.26.57.12:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2013-02-13 09:50:42 ERROR 403: Forbidden.
Che cosa sto facendo sbagliato?
Alla fine voglio scaricarlo con la libreria Python mechanize
. Ecco il codice che sto usando per questo:
import mechanize
br = mechanize.Browser()
br = mechanize.Browser()
br.set_handle_robots(False)
br.set_handle_equiv(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
url='http://114.80.235.200/f4v/94/163005294.h264_1.f4v?10000&key=7b9b1155dc632cbab92027511adcb300401443020d&playtype=1&tk=163659644989925531390490125&brt=2&bc=0&nt=0&du=1496650&ispid=23&rc=200&inf=1&si=11000&npc=1606&pp=0&ul=2&mt=-1&sid=10000&au=0&pc=0&cip=222.73.44.31&hf=0&id=tudou&itemid=135558267&fi=163005294&sz=59138302'
r = br.open(url).read()
tofile=open("/tmp/xfgs.f4v","w")
tofile.write(r)
tofile.close()
Questo è il risultato:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 203, in open
return self._mech_open(url, data, timeout=timeout)
File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 255, in _mech_open
raise response
mechanize._response.httperror_seek_wrapper: HTTP Error 403: Forbidden
Qualcuno può spiegare come ottenere il codice di mechanize
a lavorare per favore?
Cosa succede se usa: 'user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv: 1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1)'' e poi ' wget -c "$ {url}" --user-agent = "$ {user_agent}" -O x fgs.f4v'? Se ciò non funziona, allora Python potrebbe non essere in grado di aiutarti! – Johnsyweb
Il motivo per cui si ottiene una risposta 403 è molto probabile perché il sito Web mantiene uno stato quando lo si visita in un browser, molto probabilmente un cookie. Questo è ciò che YouTube fa. Esporta il tuo cookie dal browser e impostalo su wget (puoi semplicemente utilizzare l'intestazione "Cookie:") e dovrebbe funzionare. –
@Johnsyweb Python può perfettamente emulare un browser nella maggior parte dei casi (beh, eccetto i siti dispari che impostano un cookie tramite JavaScript e così via). –