使用python脚本从网站上抓取多个文件。
下载表格html是这样的:
txtIDFav.setGravity(Gravity.CENTER | Gravity.RIGHT);
我想到的是:
<span>
<a class="tooltip" href="download.php?action=download&id=xxx&authkey=yyy&pass=zzz" title="Download">DL</a>
</span>
但是,对于检索,我必须说明输出文件名。我想获取原始文件名,而不是将其设置为随机名称。有没有办法做到这一点? 此外,由于我想添加此脚本以便在crontab中频繁运行,有没有办法让我们检查一下scraping.log并跳过之前已经下载的那些?
答案 0 :(得分:0)
如果您不喜欢“download.php”,请检查Content-Disposition header,例如:
Content-Disposition: attachment; filename="fname.ext"
确保文件名complies with your intent:
重要的是接收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)