使用原始文件名的Python mechanize下载文件

使用原始文件名的Python mechanize下载文件,python,beautifulsoup,mechanize,Python,Beautifulsoup,Mechanize,使用python脚本从网站上抓取多个文件 下载表单html如下所示: <span> <a class="tooltip" href="download.php?action=download&amp;id=xxx&amp;authkey=yyy&amp;pass=zzz" title="Download">DL</a> </span> 但是,对于检索,我必须声明输出文件名。我想获取原始文件名,而不是将其设置为随机名

使用python脚本从网站上抓取多个文件

下载表单html如下所示:

<span>
    <a class="tooltip" href="download.php?action=download&amp;id=xxx&amp;authkey=yyy&amp;pass=zzz" title="Download">DL</a>
</span>
但是,对于检索,我必须声明输出文件名。我想获取原始文件名,而不是将其设置为随机名称。有办法吗? 此外,由于我想添加此脚本以在crontab中频繁运行,是否有办法让我们检查scraping.log并跳过以前下载的脚本?

如果您不喜欢“download.php”,请检查一个,例如:

并确保文件名:

重要的是,接收MUA不得盲目使用 建议的文件名。应检查建议的文件名(和 (可能已更改)以查看它是否符合本地文件系统 约定,不会覆盖现有文件,也不会 出现安全问题(请参阅下面的安全注意事项)

Python 2:

import re
import mechanize  # pip install mechanize

br = mechanize.Browser()
r = br.open('http://yoursite.com')
#print r.info()['Content-Disposition']
unsafe_filename = r.info().getparam('filename')  # Could be "/etc/evil".
filename = re.findall("([a-zA-Z0-9 _,()'-]+[.][a-z0-9]+)$", unsafe_filename)[0]  # "-]" to match "-".
至于跳过以前处理过的链接

f1 = open('scraping.log', 'a')
processed_links = f1.readlines()
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)

for a in soup.select('a[href^="download.php?action=download"]'):
    link = a.attrs.get('href')
    if not link in processed_links:
        print >>f1, link
        processed_links += [link]
        br.retrieve(url+link, destination)

你在刮哪个网站?您可以从中获取文件名。抱歉,这是一个私人网站。对于文件名,是否可以从上面的下载链接获取文件名?请告诉我我的答案是否适用于您,如果适用,请不要忘记接受。谢谢
import re
import mechanize  # pip install mechanize

br = mechanize.Browser()
r = br.open('http://yoursite.com')
#print r.info()['Content-Disposition']
unsafe_filename = r.info().getparam('filename')  # Could be "/etc/evil".
filename = re.findall("([a-zA-Z0-9 _,()'-]+[.][a-z0-9]+)$", unsafe_filename)[0]  # "-]" to match "-".
f1 = open('scraping.log', 'a')
processed_links = f1.readlines()
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)

for a in soup.select('a[href^="download.php?action=download"]'):
    link = a.attrs.get('href')
    if not link in processed_links:
        print >>f1, link
        processed_links += [link]
        br.retrieve(url+link, destination)