分类目录归档:Python

Python多线程爬虫越爬越慢的解决方法

系统环境:
Ubuntu 16.04 Server
Python3.5
爬虫情况:
1、从Mysql数据库获取任务
2、任务导入列表后开始http请求,将数据以文件形式保存到硬盘
3、开80线程
遇到的问题:
1、家用路由器频繁死机(一天两三次)
2、爬虫开始时爬取速度很快,但是越来越慢
解决思路: 继续阅读

Linux(ubuntu)开机启动脚本遇到的坑

使用python制作了一个脚本,想法是每6小时重新执行一次,而脚本是重复循环的也就是6小时里它是不会自动结束运行,所以单纯使用crontab定制定时任务不能直接达到目的,需要使用脚本检查PID,太麻烦!于是想到是使用crontab定制每6小时重启一次主机,然后脚本放在/etc/rc.local里达到开机启动的目的,坑也在这里挖好了,其实还是自己技术不精导致的!!!
1、crontab脚本是在root下编辑的,如下:

0 */6 * * * reboot

这里是第一个坑,到时间主机就是不重启?!原来reboot需要root权限所以脚本要写成如下形式,改完立即好用:

0 */6 * * * sudo reboot

2、rc.local中脚本是这样写的:

/usr/bin/python3 /root/dl.py

这里是第二大坑,问题不在语法,而是dl.py文件没有可执行权限!使用命令chmod 111 dl.py解决
第三大坑是脚本执行了,却提示mysql错误没有conn对象,原来是脚本启动时mysql还没有准备好所以连接失败解决方法很多,异常判断等待几秒重连mysql数据库,我索性脚本运行开始先等10s后再连接数据库,问题解决。

PIL(Pillow)常用功能(一)

#首先导入Image、
from PIL import Image
#1、打开图像
image=Image.open('C:/1.png')
#2、显示图片
image.show()
#3、图像转化为灰度,参数用'L',转化为阈值为127的黑白图像,参数用'1'
image.convert('L')
#4、图像转化为自定义阈值的图像,需要先转化为灰度或者黑白,再执行point
threshold = 150
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image.convert('L').point(table,'1')
#5、裁剪图像,裁剪区域用左上顶点和右下顶点坐标圈定
#region=(left,uper,right,lower)
region=(1,1,79,17)
image.crop(region)
#6、图像保存
image.save('C:/2.png')

python通过OCR引擎识别字符型验证码

写爬虫的过程中不可避免地要面对打码,一般打码工具都有很强的针对性,一款通用的验证码识别工具非常必要,tesseract-ocr开源工具就是这一需求的最好解决方法,它来自于大名鼎鼎的google,可以支持中文,可以使用再带工具训练自己的字符集。
环境:
python2.7
PIL:使用pip install Pillow即可安装,版本无限制
pytesser3:使用pip install pytesser3即可安装,该模块通过tesseract-ocr开源引擎实现
tessertact-ocr引擎:该引擎可以到github根据自己的系统下载,该链接为4.0版本 继续阅读

Django学习笔记-安装创建工程应用基本配置

操作系统使用的是Win10,python版本2.7。
一、Django的安装可以到官网下载安装包,然后解压安装,”python setup.py”即可安装。也还可以使用pip安装”pip install Django==1.10.6″,1.10.6是目前的最新版本,安装完成后只需要进入python,如果可以成功导入django模块就表示安装成功;
二、完成安装后就可以创建第一个工程了,使用命令”django-admin.py startproject projectname”即可,创建完成后会在工程文件夹下生成以下文件和文件夹:
manage.py(文件)、projectname(文件夹)
projectname文件夹下会有以下文件:
settings.py、urls.py、wsgi.py、__init__.py;
三、创建应用使用命令”manage.py startapp appname”,会在工程文件夹下生成应用文件夹(appname),该文件夹下会生成基本配置文件和文件夹如下:
admin.py、apps.py、migrations(文件夹)、models.py、tests.py、views.py、__init__.py
四、配置工程
1、设置settings.py,在INSTALLED_APPS列表里添加appname元素,DATABASES根据实际情况设置,时区TIME_ZONE根据实际情况设置;
2、设置urls.py,url映射的使用有三种方式,常用的是from appname import views,然后在urlpatterns里添加url(‘blog/index’,views.index)类似于这样的元素;
3、设置views.py,也就是视图模块,根据相应链接要实现的功能,在views.py里添加对应代码。
五、测试工程:manage.py runserver就可以把应用运行起来了,根据运行提示进行调试直到没有报错。

“曲线”实现windows系统开机不登录运行python脚本

写了一个自动后台检测系统状态的python脚本,想实现开机自动运行该脚本,而且不需要登录,试了很多网上的方法都没有做到,最后通过修改注册实现自动登录,自启动脚本,最后锁定计算机,这样一个曲线的方法。
一、注册表需要修改的项有3个,分别是DefaultUserName、DefaultPassword、AutoAdminLogon,这三个注册表项在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”下,如果没有则新建字符串值类型的值就可以,值分别填写用户名、密码、1; 继续阅读

Linux系统计划任务crontab的用法

近期有个需求,使用python写的小程序需要开机自动运行,并在后台运行,每间隔5分钟自动监测本地IP的变化,可是程序运行几天就会自动挂掉,没有错误提示,就那么无缘无故挂掉。后来通过linux计划任务crontab解决问题。
crontab有五个可选参数:crontab [ -u user ] [ -i ] { -e | -l | -r }
1、 crontab -u 设定某个用户的cron服务
2、 crontab -e 编辑当前用户的crontab文件
3、 crontab -l 列出当前用户的任务
4、 crontab -r 删除当前用户的任务
5、 crontab -i 忽略删除用户任务时的确认 继续阅读

Python全能Excel模块openpyxl

看到一篇文章介绍Python的Excel模块,仔细对比发现其实还是openpyxl好用,常见的有:
xlwings
http://docs.xlwings.org/en/stable/
openpyxl
https://openpyxl.readthedocs.io/en/latest/
pandas
http://pandas.pydata.org/
win32com
http://pythonexcels.com/python-excel-mini-cookbook/
xlsxwriter
https://xlsxwriter.readthedocs.io/
DataNitro
https://datanitro.com/
xlutils
https://pypi.python.org/pypi/xlutils/

openpyxl可以读取、创建xls、xlsx,并且安装也很方便,只需要“pip install openpyxl”即可安装,目前最新版本是2.4.1。
如果需要在openpyxl创建的文件的文件里插入图片,还需要安装pillow模块,命令是“pip install pillow”,一切都是这么简单,官方的文档如下:
一、写入一个Excel文件的基本命令 继续阅读

Python学习笔记20161023

学习到Python的特殊方法一节,看到以下例子,开始理解不了,后来懵懵懂懂理解是__getitem__、__setitem__均为Python类特殊方法,ArithmeticSequence的实例s,s[4]等同于s.__getitem__(4),而s[4]=2等同于s.__setitem__(4,2),由s[4]=2前后”print len(s.changed)”输出的值为证。
def checkIndex(key):
if not isinstance(key,(int,long)):raise TypeError
if key<0:raise IndexError
class ArithmeticSequence:
def __init__(self,start=0,step=1): 继续阅读

Python很实用的十六进制、十进制、字符串、字节流的转换方法(转)

整数之间的进制转换:
10进制转16进制: hex(16)  ==>  0x10
16进制转10进制: int(‘0x10′, 16)  ==>  16
类似的还有oct(), bin()
——————-
字符串转整数:
10进制字符串: int(’10’)  ==>  10
16进制字符串: int(’10’, 16)  ==>  16
16进制字符串: int(‘0x10’, 16)  ==>  16
——————-
字节串转整数:
#需要struct模块,import struct
转义为short型整数: struct.unpack(‘  (1, 0)
转义为long型整数: struct.unpack(‘  (1,) 继续阅读