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在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
python中的decorator的作用详解
Jul 26 Python
Ubuntu下Python2与Python3的共存问题
Oct 31 Python
FFrpc python客户端lib使用解析
Aug 24 Python
对python中arange()和linspace()的区别说明
May 03 Python
Python如何实现的二分查找算法
May 27 Python
python可以用哪些数据库
Jun 22 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
python数据可视化JupyterLab实用扩展程序Mito
Nov 20 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
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
python先序遍历二叉树问题
2017/11/10 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
Python grpc超时机制代码示例
2020/09/14 Python
浅析python 字典嵌套
2020/09/29 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
父母寄语大全
2014/04/12 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
2015年司法局工作总结
2015/05/22 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
详解Redis主从复制实践
2021/05/19 Redis
详解redis在微服务领域的贡献
2021/10/16 Redis
MSSQL基本语法操作
2022/04/11 SQL Server
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js