2.9:数据交换-csv、Excel、json、爬虫、Tushare获取数据

本文详细介绍了Python中处理CSV、Excel文件及Json数据的方法,包括读写操作、数据转换和Web数据获取。使用标准库csv、第三方库pandas、xlrd/xlwt以及requests库进行数据交换,涉及字典、列表、DataFrame等数据结构。此外,还展示了如何通过tushare获取财经数据和使用requests爬取网页数据。

〇、任务

 1、 使用Python基础文件读写函数完成CSV文件的处理;   

2、 使用标准CSV库完成CSV文件的处理;    

3、 使用Excel库完成Excel文件的处理;   

4、 Python数据结构和Json格式的相互转换;   

5、 使用第三方封装库直接获取格式化数据;   

6、 使用Requests库获取Json格式数据和Html格式数据

一、CSV和Excel数据交换

1、读取CSV文件

注意:csvdemo.csv文件中内容如下:
id,name,age
1,Diego,12
2,Eugene,30
3,Sunny,24

结果输出:[ ['1', 'Diego', '12'], ['2', 'Eugene', '30'], ['3', 'Sunny', '24']]。通过调用strip方法,为每行去掉尾部的回车换行。通过split方法,按逗号切割成一个列表,然后存放在一个嵌套列表中。访问的时候,可以使用ls[1:]获取不包括表头的数据。

2、生成CSV文件

 

3、使用CSV库读取CSV文件

结果输出:nameDiegoEugeneSunny。通过csv的包装器reader,把文件对象包装为一个reader对象,这个对象为可迭代对象,因此可以直接用for in语句来获取其中的各行数据,并按索引获取每行中的对应元素。最后通过end=””,把print语句默认的回车换行换掉,从而让各行输出链接在一行中。

4、使用CSV库写入CSV文件

 结果输出:输出一个data.csv文件,内容为四列数据。当然也可以用writer.writerows(data) ,一次写入多行。我们对比上面的例子可以看出,使用python的write时,要求输入str类型而不能直接输入int,而csv库则方便多了,也不需要处理逗号和每行的回车换行符。

5、从CSV文件读取数据并转换为字典类型

import csv

data=[]

结果输出:[{'id': '1', 'name': 'Diego', 'age': '12'}, {'id': '2', 'name': 'Eugene', 'age': '30'}, {'id': '3', 'name': 'Sunny', 'age': '24'}]。csv库中还有一个DictReader,这个包装器可以直接给用户提供fieldname,获取csv的表头;每行数据通过dict()方法强制转换之后,可以直接输出字典类型的数据(默认row是OrderedDict)。用户就不需要手工拼接成字典类型的对象了,提高了处理速度。

6、从CSV中提取特定行数据

import csv

data=[]

结果输出:12。通过if语句,来找到数据中符合姓名是“Diego”的记录,然后获取其年龄信息。

7、读取Excel文件

  

结果输出:a,b,c1.0,2.0,3.04.0,5.0,6.0

导入读取Excel库:import xlrd; 打开文件:data = xlrd.open_workbook('excel.xls’)

获取工作表有3种方法:分别是:如table = data.sheets()[0] ,通过索引顺序获取;如table = data.sheet_by_index(0) ,通过索引顺序获取;如table = data.sheet_by_name(u'Sheet1’) ,通过名称获取。获取行列数据使用 table.row_values(i)或table.col_values(i);获取行数和列数,使用table.nrows和table.ncols;获取单元格:使用able.cell(2,3).value。

8、写入Excel文件

 

结果输出:为一个info.xls的文件。

顺序是:加载模块:import xlwt,创建workbook:workbook = xlwt.Workbook(encoding = “utf-8”),创建表:worksheet = workbook.add_sheet('My Worksheet’);在单元格写入数据:worksheet.write(0, 0,’53.6’);保存数据:workbook.save('Excel_Workbook.xls’)。一般处理数据时不建议直接操作excel,可以通过pandas的excel读取写入函数进行处理。

二、Json数据交换

1、将Python数据结构转换为Json串

import json

 结果输出:'{"name": "David", "age": 5}'。注意,输出是一个字符串。在Python中,可以通过单引号和双引号交叉的方式表达字符串中的字符串。这里,最外层是单引号,内层是双引号。最后的输出结果是一个Json格式的字符串。方法dumps()的作用就是把一个对象(字典对象或列表对象、元组对象等)转换为Json格式的字符串。如s=json.dumps(list("hello"))的输出结果是:'["h", "e", "l", "l", "o"]'。可以直观的理解为dumps方法把对象加上引号,和eval()相反。s=json.dumps(56+36)的结果是字符串“92”。

2、将Json串转换为Python数据结构

 

结果输出:{'employees': [{'firstName': 'Bill', 'lastName': 'Gates'}, {'firstName': 'George', 'lastName': 'Bush'}, {'firstName': 'Thomas', 'lastName': 'Carter'}]}。这个输出是一个标准的Python字典结构,最外层是大括号,不是引号。字典的第一个key是“Employees”,它的值是一个列表list,里面有3个嵌套字典。每个字典里有两个keys:firstName和lastName,分别有对应的值。

3、读取Json格式文件

 

结果输出:George。json库的load方法直接将一个json格式的文件直接转换为python字典对象。然后可以按照字典的方式进行访问。如通过data["employees"]返回对应的value值,是一个列表,然后通过索引访问列表的第二个元素,还是一个字典。获取该字典元素的“firstName”键值对应的value值。

4、写入Json格式文件

 

结果输出:当前目录下生成一个json文件,内容为:{"name": "David", "age": 5}。dump方法通过两个参数完成数据的写入,第一个是要写入的字典格式(或其他格式的对象),第二个参数为要写入的文件对象(已经打开)。

三、Web数据交换

1、使用Tushare获取数据

 

 结果输出:当前目录下输出一个tsout.csv文件,里面包含了得到的所有数据,同时屏幕打印出前5行数据。tushare 是一个提供免费的财经数据三方库。通过良好的封装,它提供了方便快捷的接入方式。可以通过导入之后,通过dir函数查看这个库所支持的查询功能。通过type函数,可以查看data的类型是:<class 'pandas.core.frame.DataFrame'>,是一个pandas的DataFrame类型。这个类型对象提供了很多中保持数据的方法,如to_csv,to_excel等等,用户可以根据需要自由选择。

2、去百词斩查单词

 

结果输出:b’c. \xe7\x8b\x97’b’c. \xe7\x8c\xab’

Requests库是一个优秀的第三方网络爬虫库。Requests库的json()方法可以直接生成一个字典,而text方法返回的是一个字符串。通过json方法返回的字典,可以直接访问其对应键值获取对应的value值。

3、爬取普通静态页面数据

 

结果输出:<title>The Dormouse’s story</title> titleThe Dormouse’s storyheadBS4 库是一个解析和处理HTML 和XML 的第三方库。它的作用是能够快速方便简单的提取网页中指定的内容,给我一个网页字符串,然后使用它的接口将网页字符串生成一个对象,然后通过这个对象的方法来提取数据。本次使用模拟的网页来提取数据。

这些是啥?2025-07-27 17:56:44 [scrapy.utils.log] INFO: Scrapy 2.13.3 started (bot: scrapybot) 2025-07-27 17:56:44 [scrapy.utils.log] INFO: Versions: {&#39;lxml&#39;: &#39;5.4.0&#39;, &#39;libxml2&#39;: &#39;2.11.9&#39;, &#39;cssselect&#39;: &#39;1.3.0&#39;, &#39;parsel&#39;: &#39;1.10.0&#39;, &#39;w3lib&#39;: &#39;2.3.1&#39;, &#39;Twisted&#39;: &#39;25.5.0&#39;, &#39;Python&#39;: &#39;3.13.0 (tags/v3.13.0:60403a5, Oct 7 2024, 09:38:07) [MSC v.1941 &#39; &#39;64 bit (AMD64)]&#39;, &#39;pyOpenSSL&#39;: &#39;25.1.0 (OpenSSL 3.5.1 1 Jul 2025)&#39;, &#39;cryptography&#39;: &#39;45.0.5&#39;, &#39;Platform&#39;: &#39;Windows-10-10.0.19045-SP0&#39;} 2025-07-27 17:56:44 [scrapy.addons] INFO: Enabled addons: [] 2025-07-27 17:56:44 [asyncio] DEBUG: Using selector: SelectSelector 2025-07-27 17:56:44 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor 2025-07-27 17:56:44 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.windows_events._WindowsSelectorEventLoop 2025-07-27 17:56:44 [scrapy.extensions.telnet] INFO: Telnet Password: 70d0475b95b184a2 2025-07-27 17:56:44 [py.warnings] WARNING: C:\Users\12572\PyCharmMiscProject\.venv\Lib\site-packages\scrapy\extensions\feedexport.py:455: ScrapyDeprecationWarning: The `FEED_URI` and `FEED_FORMAT` settings have been deprecated in favor of the `FEEDS` setting. Please see the `FEEDS` setting docs for more details exporter = cls(crawler) 2025-07-27 17:56:44 [scrapy.middleware] INFO: Enabled extensions: [&#39;scrapy.extensions.corestats.CoreStats&#39;, &#39;scrapy.extensions.telnet.TelnetConsole&#39;, &#39;scrapy.extensions.feedexport.FeedExporter&#39;, &#39;scrapy.extensions.logstats.LogStats&#39;] 2025-07-27 17:56:44 [scrapy.crawler] INFO: Overridden settings: {&#39;CONCURRENT_REQUESTS&#39;: 4, &#39;DOWNLOAD_DELAY&#39;: 1.5, &#39;USER_AGENT&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 &#39; &#39;(KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36&#39;} 2025-07-27 17:56:44 [scrapy.middleware] INFO: Enabled downloader middlewares: [&#39;scrapy.downloadermiddlewares.offsite.OffsiteMiddleware&#39;, &#39;scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware&#39;, &#39;scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware&#39;, &#39;scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware&#39;, &#39;scrapy.downloadermiddlewares.useragent.UserAgentMiddleware&#39;, &#39;scrapy.downloadermiddlewares.retry.RetryMiddleware&#39;, &#39;scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware&#39;, &#39;scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware&#39;, &#39;scrapy.downloadermiddlewares.redirect.RedirectMiddleware&#39;, &#39;scrapy.downloadermiddlewares.cookies.CookiesMiddleware&#39;, &#39;scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware&#39;, &#39;scrapy.downloadermiddlewares.stats.DownloaderStats&#39;] 2025-07-27 17:56:45 [scrapy.middleware] INFO: Enabled spider middlewares: [&#39;scrapy.spidermiddlewares.start.StartSpiderMiddleware&#39;, &#39;scrapy.spidermiddlewares.httperror.HttpErrorMiddleware&#39;, &#39;scrapy.spidermiddlewares.referer.RefererMiddleware&#39;, &#39;scrapy.spidermiddlewares.urllength.UrlLengthMiddleware&#39;, &#39;scrapy.spidermiddlewares.depth.DepthMiddleware&#39;] 2025-07-27 17:56:45 [scrapy.middleware] INFO: Enabled item pipelines: [] 2025-07-27 17:56:45 [scrapy.core.engine] INFO: Spider opened 2025-07-27 17:56:45 [py.warnings] WARNING: C:\Users\12572\PyCharmMiscProject\.venv\Lib\site-packages\scrapy\core\spidermw.py:433: ScrapyDeprecationWarning: __main__.BilibiliSpider defines the deprecated start_requests() method. start_requests() has been deprecated in favor of a new method, start(), to support asynchronous code execution. start_requests() will stop being called in a future version of Scrapy. If you use Scrapy 2.13 or higher only, replace start_requests() with start(); note that start() is a coroutine (async def). If you need to maintain compatibility with lower Scrapy versions, when overriding start_requests() in a spider class, override start() as well; you can use super() to reuse the inherited start() implementation without copy-pasting. See the release notes of Scrapy 2.13 for details: https://docs.scrapy.org/en/2.13/news.html warn( 2025-07-27 17:56:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2025-07-27 17:56:45 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023 2025-07-27 17:56:45 [selenium.webdriver.common.selenium_manager] DEBUG: Selenium Manager binary found at: C:\Users\12572\PyCharmMiscProject\.venv\Lib\site-packages\selenium\webdriver\common\windows\selenium-manager.exe 2025-07-27 17:56:45 [selenium.webdriver.common.selenium_manager] DEBUG: Executing process: C:\Users\12572\PyCharmMiscProject\.venv\Lib\site-packages\selenium\webdriver\common\windows\selenium-manager.exe --browser chrome --language-binding python --output json
07-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值