从站点下载多个链接的CSV文件

时间:2017-01-13 18:22:19

标签: python csv jenkins

我使用的示例网站是:

http://stats.jenkins.io/jenkins-stats/svg/svgs.html

此网站上链接了大量CSV。现在显然我可以浏览每个链接点击和下载,但我知道有更好的方法。

我能够使用BeautifulSoup整理下面的python脚本,但它只是打印汤:

    from bs4 import BeautifulSoup
    import urllib2
    jenkins = "http://stats.jenkins.io/jenkins-stats/svg/svgs.html"
    page = urllib2.urlopen(jenkins)
    soup = BeautifulSoup(page)
    print soup

以下是我打印汤时的样本,但我仍然不知道如何从此deail中实际下载多个CSV文件。

<td> <a alt="201412-jobs.svg" class="info" data-content="&lt;object data='201412-jobs.svg' width='200' type='image/svg+xml'/&gt;" data-original-title="201412-jobs.svg" href="201412-jobs.svg" rel="popover">SVG</a> <span>/</span> <a alt="201412-jobs.csv" class="info" href="201412-jobs.csv">CSV</a> </td>

感谢任何帮助。

谢谢 -d

2 个答案:

答案 0 :(得分:2)

只需使用BeatifulSoup解析此网页并获取CSV文件的所有网址,然后使用urllib.request.urlretrieve()下载每个网址。 这是一次性任务,所以我不认为你需要像Scrapy这样的任何东西。

答案 1 :(得分:1)

我完全得到你来自哪里,我想自己也这样做,幸运的是如果你是一个linux使用有一个超级简单的方法来做你想要的。另一方面,使用网络刮板,我熟悉bs4但scrapy是我的生活(遗憾)但据我记得bs / 4没有真正的可选方式下载而不使用urlib / request但所有相同!!

关于你目前的bs4蜘蛛,,,首先你应该确定只有.csv的链接,提取干净..我想象它会是什么样的

for link in soup.select('a[href^="http://"]'):
    href = link.get('href')
    if not any(href.endswith(x) for x in ['.csv'. '.fileformatetcetc'])
    continue

这就像找到所有但只限制响应...只有一次使用.csv或所需的扩展......

然后你会把响应加入到基本网址(如果它不完整)。如果不需要使用csv模块你会读出csv文件...(从响应中!!?)将它写出来一个新文件......   对于lols我将创建一个scrapy版本。

AS这个简单的方法...为什么不只是使用wget?

asciicast

发现这个...总结整个csv读/写过程...... https://stackoverflow.com/a/21501574/3794089