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 相关文章推荐
Python生成随机数组的方法小结
Apr 15 Python
Python在图片中添加文字的两种方法
Apr 29 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
Python测试模块doctest使用解析
Aug 10 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
Django通过json格式收集主机信息
May 29 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
PHP 调试工具Debug Tools
2011/04/30 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
js密码强度校验
2015/11/10 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
vue实现扫码功能
2020/01/17 Javascript
javascript实现留言板功能
2020/02/08 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
八大排序算法的Python实现
2021/01/28 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
巧克力蛋糕店创业计划书
2014/01/14 职场文书
幼儿园门卫制度
2014/01/29 职场文书
《童年的发现》教学反思
2014/02/14 职场文书
元旦晚会主持词
2014/03/24 职场文书
科技活动总结范文
2015/05/11 职场文书
黄河绝恋观后感
2015/06/08 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL