python网络爬虫文档读取-CSV文件

来源:互联网 发布:java面向对象增删改查 编辑:程序博客网 时间:2024/06/05 19:02

  进行网页采集的时候,你可能遇到CSV文件,也可能同时希望将数据保存为CSV格式。Python的csv库主要是面向本地文件,就是说你的csv文件得存储在你的电脑上,而在进行网络数据采集的时候,很多文件都是在线的。不过有一些方法可以解决这些问题:

  1.手动把csv文件下载到本机,然后用python定位文件位置;

  2. 写Python程序下载文件,读取之后再把源文件删除。

  3. 从网上直接把文件读成一个字符串,然后转换成一个StringIO对象,使它具有文件的属性。

  虽然前两个方法也可以使用,但是既然你可以轻易地把CSV文件保存在内存里,就不要再下载到本地占用磁盘空间了。直接把文件读取成字符串,然后封装成StringIO对象,让Python把它当做文件来处理,就不需要先保存为文件了。下面的程序就是获取一个CSV文件(http://pythonscraping.com/files/MontyPythonAlbums.csv),然后把每一行打印到命令行里:

from urllib.request import urlopenfrom io import StringIOimport csvdata=urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii','ignore')dataFile=StringIO(data)csvReader=csv.reader(dataFile)for row in csvReader:    print(row)
执行结果如下,抓取出了对应csv文档中的所有信息:


可以对结果进行更细致的拆分,使用代码如下:

from urllib.request import urlopenfrom io import StringIOimport csvdata=urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii','ignore')dataFile=StringIO(data)csvReader=csv.reader(dataFile)for row in csvReader:    print("The album \""+row[0]+"\" was released in "+str(row[1]))
执行结果如下:

注意看结果中的第一行,显示的是The album "Name" was released in Year.虽然在示例代码中,这样显示也没有什么问题。但是实际的工作中你肯定希望将这行信息去除掉。有些程序员可能会简单的跳过csvReader对象的第一行,或者写一个简单的条件去除第一行。不过,还有一个很好的方法处理表头的问题,那就是csv.DictReader:修改上面的代码得到如下程序。

from urllib.request import urlopenfrom io import StringIOimport csvdata=urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii','ignore')dataFile=StringIO(data)dictReader=csv.DictReader(dataFile)print(dictReader.fieldnames)for row in dictReader:    print(row)
执行结果如下:




原创粉丝点击