python3中for循环踩过的坑记录


Posted in Python onDecember 14, 2020

前言

最近在用python练习写点爬虫,想着把双色球的历史记录爬下来存入mysql中,爬取数据没有遇到什么问题,在处理数据存入数据库的时候遇到问题了,现把问题整理出来方便自己日后查询也能帮助有缘人士:

一、从双色球历史网站爬取数据存成html文件;

import urllib.request
 
url = 'https://datachart.500.com/ssq/history/newinc/history.php?start=1&end=20109'
request = urllib.request.Request(url)
request.add_header('user-agent',
     'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36')
response = urllib.request.urlopen(request)
buf = response.read()
data = buf.decode('utf-8')
# 爬取数据保存到文件
fileOb = open('history.html', 'w', encoding='utf-8') # 打开一个文件,没有就新建一个
fileOb.write(data)
fileOb.close()

python3中for循环踩过的坑记录

二,读取html文件获取数据,其中还有mysql的连接池

from lxml import etree
from collections import namedtuple
import mysql2
 
fileOb = open('history.html', 'r', encoding='utf-8') # 打开一个文件
doc = fileOb.read()
html = etree.HTML(doc) # 把字符串转化为可处理的格式
two_colour = namedtuple('two_colour', 'code,red_1,red_2,red_3,red_4,red_5,red_6,blue,create_date')
 
 
# two_colour = namedtuple('two_colour', 'a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16')
 
 
def test1():
 # red = html.xpath("//tbody/tr/td[@class='t_cfont2']/text()[1]")
 # blue = html.xpath("//tbody/tr/td[@class='t_cfont4']/text()[1]")
 all_ball = html.xpath("//tbody/tr[@class='t_tr1']/td/text()")
 # print(all_ball)
 for i in range(len(all_ball)):
  dict = two_colour(all_ball[0], all_ball[1], all_ball[2], all_ball[3], all_ball[4], all_ball[5], all_ball[6],
       all_ball[7], all_ball[15])
  print(dict)
  for j in range(16):
   del all_ball[0]
  mysql2.saveDouBan(dict)
 print(all_ball)
 
 
if __name__ == '__main__':
 test1()

mysql的连接池

import pymysql
# 新的写法,要注意
from dbutils.pooled_db import PooledDB
 
POOL = PooledDB(
 creator=pymysql, # 使用链接数据库的模块
 maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数
 mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
 maxcached=5, # 链接池中最多闲置的链接,0和None不限制
 maxshared=3,
 # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
 blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
 maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制
 setsession=[], # 开始会话前执行的命令列表。
 ping=0,
 # ping MySQL服务端,检查是否服务可用。
 host='127.0.0.0',
 port=3306,
 user='root',
 password='123456',
 database='python_test',
 charset='utf8'
)
 
 
def func():
 # 检测当前正在运行连接数的是否小于最大链接数,如果不小于则:等待或报raise TooManyConnections异常
 # 否则 则优先去初始化时创建的链接中获取链接 SteadyDBConnection。
 # 然后将SteadyDBConnection对象封装到PooledDedicatedDBConnection中并返回。
 # 如果最开始创建的链接没有链接,则去创建一个SteadyDBConnection对象,再封装到PooledDedicatedDBConnection中并返回。
 # 一旦关闭链接后,连接就返回到连接池让后续线程继续使用。
 conn = POOL.connection()
 
 # print(th, '链接被拿走了', conn1._con)
 # print(th, '池子里目前有', pool._idle_cache, '\r\n')
 
 cursor = conn.cursor()
 cursor.execute('select * from two_clour_two')
 result = cursor.fetchall()
 for i in result:
  print(i)
 conn.close()
 
 
# 数据库插入操作
def saveDouBan(dict):
 conn = POOL.connection()
 cursor = conn.cursor()
 sql = "insert into two_clour_two (`code`, `red_1`, `red_2`, `red_3`, `red_4`, `red_5`, `red_6`, `blue`,`create_date`) values(\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")" % (
  str(dict[0]), str(dict[1]), str(dict[2]), str(dict[3]), str(dict[4]), str(dict[5]), str(dict[6]),
  str(dict[7]), str(dict[8]))
 cursor.execute(sql)
 print('Successful')
 conn.commit() # 写入数据库一定要commit,否则数据没有数据
 cursor.close()
 
 
if __name__ == '__main__':
 func()

三,数据处理的误区,这个是刚开始的写法,i是下标,取完数据把对应的下标的元素删除了,可以这时候的问题就是,下标的数字比数组长了,所有最后下标取完了,可是数组却没有为空。

解决办法就是上面贴的

for i in range(len(all_ball)):

python3中for循环踩过的坑记录

总结

到此这篇关于python3中for循环踩坑记录的文章就介绍到这了,更多相关python3 for循环踩坑内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Cpy和Python的效率对比
Mar 20 Python
wxPython使用系统剪切板的方法
Jun 16 Python
jupyter安装小结
Mar 13 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
浅谈Python基础—判断和循环
Mar 22 Python
Python中新式类与经典类的区别详析
Jul 10 Python
基于python图像处理API的使用示例
Apr 03 Python
基于Python快速处理PDF表格数据
Jun 03 Python
Python读取二进制文件代码方法解析
Jun 22 Python
Python 数据分析之逐块读取文本的实现
Dec 14 #Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 #Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 #Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 #Python
python中time、datetime模块的使用
Dec 14 #Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 #Python
python读写数据读写csv文件(pandas用法)
Dec 14 #Python
You might like
玩转图像函数库―常见图形操作
2006/09/03 PHP
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
基于opencv实现简单画板功能
2020/08/02 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
高中班长自我鉴定
2013/12/20 职场文书
教师研修随笔感言
2014/01/23 职场文书
产品推广策划方案
2014/05/10 职场文书
文明家庭事迹材料
2014/12/20 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
秋季运动会加油词
2015/07/18 职场文书
宣传委员竞选稿
2015/11/19 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书