sql =
'
INSERT
INTO
table_name (city,air_quality,AQI,PM2_5,dt)
VALUES
(%s,%s,%s,%s,%s)'
try:
cur.executemany(sql,tuple(data))#data 是列表,但是里面的元素是元组
print(
"now: ……Done……")
#对于写入数据库,这个fetchall没有用,但是对于查询,他返回的是查询的结果。
#print cur.fetchall()
mysql_conn.commit()
except MySQLdb.Error,e:
f = open(
'weather.log',
'a')
print
"mysql发生异常,异常原因在log文件中"
traceback.print_exc(file=f)
#如果发生异常,回滚数据
mysql_conn.rollback()
finally:
cur.close()
mysql_conn.close()
这样操作的时间更快,如果你插入100万条数据,用cur.execute()执行,时间将会更长。这样的效率比较高。
另外在数据库的写入过程中,会出现异常,要对异常进行捕获,并且,发生异常之后要进行回滚,这样保证数据能正确的写入数据库。
item_date = re.finditer(
r
'(%s)(</td>\s*
<td class=\"aqi-lv)(\d)(\">\s*
%s{1,4}
</td>\s*
<td>)(\d{1,3}
)(\s*
</td>\s+
<td>\d{1,3}
</td>\s*
)(<td>)(\d{1,3}
)(\s*
</td>)'
%(past_one_day,
u
'[\u4e00-\u9fa5]'),url_read)
这个我之前写过,可以将字符串制定,去内容中匹配。比如你看的一个网页内容,有北京,河南,郑州,南京,别的你都不想看。
这时候,用这个方法去过滤,效果还是不错的。其中u开头的东西,是用来匹配中文字符。
在写入到文件的时候,推荐使用codecs的open方法,这个方法可以指定写入或者打开文件,按照某种编码格式。
其中爬取的网站是:url =
"http://www.tianqihoubao.com/aqi/"+province_set[i]+
"-"+month+
".html"