脚本宝典收集整理的这篇文章主要介绍了【数据采集与融合技术】第二次大作业,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
序号 | 地区 | 日期 | 天气信息 | 温度 |
---|---|---|---|---|
1 | 北京 | 7日(今天) | 晴间多云,北部山区有阵雨或雷阵雨转晴转多云 | 31℃/17℃ |
2 | 北京 | 8日(明天) | 多云转晴,北部地区有分散阵雨或雷阵雨转晴 | 34℃/20℃ |
3 | 北京 | 9日(后台) | 晴转多云 | 36℃/22℃ |
4 | 北京 | 10日(周六) | 阴转阵雨 | 30℃/19℃ |
5 | 北京 | 11日(周日) | 阵雨 | 27℃/18℃ |
6 | ...... |
class WeatherDB:
def openDB(self):
self.con=sqlite3.connect("weathers.db")
self.cursor=self.con.cursor()
try: # 建表
self.cursor.execute("create table weathers (wCity varchar(16),wDate varchar(16),wWeather varchar(64),wTemp varchar(32),constraint pk_weather primary key (wCity,wDate))")
except Exception as err: # 表已存在则删除原有数据重新添加
self.cursor.execute("delete from weathers")
def closeDB(self):
self.con.commit()
self.con.close()
def insert(self, city, date, weather, temp):
try: # 数据插入
self.cursor.execute("insert into weathers (wCity,wDate,wWeather,wTemp) values (?,?,?,?)",
(city, date, weather, temp))
except Exception as err:
print(err)
def show(self): # 数据展示
self.cursor.execute("select * from weathers")
rows = self.cursor.fetchall()
print("%-16s%-16s%-32s%-16s" % ("地区", "日期", "天气信息", "温度")) # 表头
for row in rows:
print("%-16s%-16s%-32s%-16s" % (row[0], row[1], row[2], row[3]))
还是中规中矩的作业,多利用检查和浏览器F12很快就能找到所需数据啦,多的就是熟悉了通过数据库将爬取的数据保存在本地,还是很有收获的!
序号 | 股票代码 | 股票名称 | 最新报价 | 涨跌幅 | 涨跌额 | 成交量 | 成交额 | 振幅 | 最高 | 最低 | 今开 | 昨收 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 688093 | N世华 | 28.47 | 62.22% | 10.92 | 26.13万 | 7.6亿 | 22.34 | 32.0 | 28.08 | 30.2 | 17.55 |
2 | ... |
info1_Re = r'f12":".*?"'
info2_Re = r'f14":".*?"'
info3_Re = r'f2":.*?,'
info4_Re = r'f3":.*?,'
info5_Re = r'f4":.*?,'
info6_Re = r'f5":.*?,'
info7_Re = r'f6":.*?,'
info8_Re = r'f7":.*?,'
info9_Re = r'f15":.*?,'
info10_Re = r'f16":.*?,'
info11_Re = r'f17":.*?,'
info12_Re = r'f18":.*?,'
info1 = re.findall(info1_Re, resp)
info2 = re.findall(info2_Re, resp)
info3 = re.findall(info3_Re, resp)
info4 = re.findall(info4_Re, resp)
info5 = re.findall(info5_Re, resp)
info6 = re.findall(info6_Re, resp)
info7 = re.findall(info7_Re, resp)
info8 = re.findall(info8_Re, resp)
info9 = re.findall(info9_Re, resp)
info10 = re.findall(info10_Re, resp)
info11 = re.findall(info11_Re, resp)
info12 = re.findall(info12_Re, resp)
infos = [] # 存储各行信息
for index in range(len(info1)):
info = [] # 存储单行信息
# 对各项数据进行清洗
for i in range(1, 3):
info.append(eval('info' + str(i))[index].split('"')[-2])
for i in range(3, 13):
if i not in [4, 8]:
info.append(eval('info' + str(i))[index].replace(',', '').split(':')[-1])
else:
info.append(eval('info' + str(i))[index].replace(',', '').split(':')[-1] + '%')
infos.append(info)
for i in range(len(infos)): # 将成交量与成交额转换成以亿、万为单位的格式
a = eval(infos[i][5]) # 先转化为数值形式
if a > 100000000: # 符合条件则转换并添加单位
a = round(a / 100000000, 2)
a = str(a) + '亿'
elif a > 10000:
a = round(a / 10000, 2)
a = str(a) + '万'
else:
a = str(a)
infos[i][5] = str(a)
a = eval(infos[i][6])
if a > 100000000:
a = round(a / 100000000, 2)
a = str(a) + '亿'
elif a > 10000:
a = round(a / 10000, 2)
a = str(a) + '万'
else:
a = str(a)
infos[i][6] = a
本次作业流程与之前又有所不同,爬取的json包中数据并非赤裸裸展示,而是具有隐式映射关系,匹配关系时需要小心谨慎,同时需要注意股票信息实时更新,会出现网页值与先前爬好的数据不一致的情况,需要自己把握大约值并且尽快配对。
排名 | 学校 | 总分 |
---|---|---|
1 | 清华大学 | 969.2 |
作业③在作业②的基础上更近一筹,越来越有破译密码的味道,虽然这种感觉很可能是因为我学的太少才会产生,但成功后确实让人振奋。
以上是脚本宝典为你收集整理的【数据采集与融合技术】第二次大作业全部内容,希望文章能够帮你解决【数据采集与融合技术】第二次大作业所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。