我使用的示例网站是:
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="<object data='201412-jobs.svg' width='200' type='image/svg+xml'/>" 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
答案 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?
发现这个...总结整个csv读/写过程...... https://stackoverflow.com/a/21501574/3794089