别忘了我们的数据存储在特有的层次中。BeautifulSoup库中的find()函数可以帮助我们进入不同的层次提取内容。我们需要的HTML类“名称”在整个网页中是独一无二的,因此我们可以简单的查找<div> # 获取“名称”类的<div>代码段落并提取相应值 name_box = soup.find(‘h1’, attrs={‘class’: ‘name’}) 在我们得到标签之后,我们可以用name_box的text属性获取相应值 name = name_box.text.strip() # strip() 函数用于去除前后空格 print name 采用相似的方法,直播,我们可以得到股指价格数据。 # 获取股指价格数据 price_box = soup.find(‘div’, attrs={‘class’:’price’}) price = price_box.text print price 当你运行程序时,应该可以看到程序输出当前的标普500指数的价格。 导出Excel CSV格式数据 我们已经学会如何获取数据,现在来学习如何存储数据了。Excel逗号隔开的数据格式(CSV)不失为一个好选择。这样我们就可以在Excel中打开数据文件进行查看和进一步处理。 在此之前,我们需要导入Python的csv模块和datetime模块。Datetime模块用于获取数据记录时间。请将下面几行代码插入您的导入代码部分。 import csv from datetime import datetime 在您代码的最下方,加上把数据写入CSV文件的代码。 # 以“添加”模式打开一个csv文件, 以保证文件原有信息不被覆盖 with open(‘index.csv’, ‘a’) as csv_file: writer = csv.writer(csv_file) writer.writerow([name, price, datetime.now()]) 现在如果运行程序,您应该可以导出一个index.csv文件。您可以在Excel中打开文件,看到里面有如图所示的一行数据。 所以如果您每天都运行这个程序,您就可以很简单的获取标准普尔指数价格,不需要像之前一样在网站上翻找。 更进一步(高级用法) 多个股指 抓取一个股指信息对您来说不够,对吗?我们可以试试同时提取多个股指信息。首先,我们需要修改quote_page,把它定义为网址的数组。 quote_page = [‘:IND', ‘:IND'] 然后我们把数据提取部分代码改成一个for循环。这个循环可以一一处理网址,并以元组(tuple)类型把所有数据存入变量data. # for 循环 data = [] for pg in quote_page: # 检索网站并返回HTML代码,存入变量‘page’ page = urllib2.urlopen(pg) # 用 beautifulSoup 解析HTML代码并存入变量 `soup` soup = BeautifulSoup(page, ‘html.parser’) # 获取“名称”类的<div>代码段落并提取相应值 name_box = soup.find(‘h1’, attrs={‘class’: ‘name’}) name = name_box.text.strip() # strip() is used to remove starting and trailing # 获取股指价格数据 price_box = soup.find(‘div’, attrs={‘class’:’price’}) price = price_box.text # 用元组类型存储数据 data.append((name, price)) 并且,修改保存部分以便一行行保存数据 # 以“添加”模式打开一个csv文件, 以保证文件原有信息不被覆盖 with open(‘index.csv’, ‘a’) as csv_file: writer = csv.writer(csv_file) # for 循环 for name, price in data: writer.writerow([name, price, datetime.now()]) 重新运行程序,您应该可以同时提取两个股指价格信息了! 高级抓取技术 BeautifulSoup 库使用简单,能很好的完成小量的网站抓取。但是如果您对大量的抓取信息感兴趣,您可以考虑其他方法: 1. 强大的Python数据抓取框架Scrapy。 (责任编辑:本港台直播) |