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 03 Python
Python 装饰器深入理解
Mar 16 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
详解Python字符串切片
May 20 Python
Django实现auth模块下的登录注册与注销功能
Oct 10 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
浅谈Python中的字符串
Jun 10 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
Python二元算术运算常用方法解析
Sep 15 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
python 使用cycle构造无限循环迭代器
Dec 02 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
yii框架搜索分页modle写法
2016/12/19 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
vue实现扫码功能
2020/01/17 Javascript
python如何在终端里面显示一张图片
2016/08/17 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
工程造价自荐信
2013/10/09 职场文书
高二地理教学反思
2014/01/24 职场文书
小学校园活动策划
2014/01/30 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
团干部培训班心得体会
2016/01/06 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle