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中bisect的用法
Sep 23 Python
python实现类的静态变量用法实例
May 08 Python
Python常用知识点汇总
May 08 Python
python将ansible配置转为json格式实例代码
May 15 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
学习python的前途 python挣钱
Feb 27 Python
python定位xpath 节点位置的方法
Aug 27 Python
Python实现打印实心和空心菱形
Nov 23 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
python爬取新闻门户网站的示例
Apr 25 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
看了就知道什么是JSON
2007/12/09 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
关于vue面试题汇总
2018/03/20 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
详解Python中的文本处理
2015/04/11 Python
python实现发送邮件功能代码
2017/12/14 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
美国高街时尚品牌:OASAP
2016/07/24 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
静心口服夜广告词
2014/03/20 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
灵山大佛导游词
2015/02/04 职场文书
董事长岗位职责
2015/02/13 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
离婚被告答辩状
2015/05/22 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
python如何读取和存储dict()与.json格式文件
2022/06/25 Python
SQLServer常见数学函数梳理总结
2022/08/05 MySQL