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 相关文章推荐
在windows下快速搭建web.py开发框架方法
Apr 22 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
Python基础之进程详解
May 21 Python
pandas中对文本类型数据的处理小结
Nov 01 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
PHP5常用函数列表(分享)
2013/06/07 PHP
解析php中curl_multi的应用
2013/07/17 PHP
php内嵌函数用法实例
2015/03/20 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
Python的词法分析与语法分析
2013/05/18 Python
深入理解Python中的元类(metaclass)
2015/02/14 Python
python re模块的高级用法详解
2018/06/06 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python如何读写字节数据
2020/08/05 Python
python 实用工具状态机transitions
2020/11/21 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
大学学习生活感言
2014/01/18 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
比赛口号大全
2014/06/10 职场文书
2016年父亲节寄语
2015/12/04 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python