标签归档:Python

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

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

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')

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

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

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学习笔记20160927

1、python书写代码跨行,可以在需要一行的最后一个字符加反斜线“\”,例如:
print “Hello, \
world!”
2、python原始字符串,原始字符串对于反斜线“\”不会特殊对待,只需在字符串前加“r”即可,例如:
print r”C:\hello\world”
输出“C:\hello\world”,但是在原始字符串结尾不能输入反斜线,而如果使用反斜线转义虽然可以输出反斜线,但同时会多输出一个反斜线,正确的解决办法是:
print r”C:\hello\world”‘\\’
输出“C:\hello\world\”
3、python序列分片的步长参数,分片时有第三个参数叫步长,如果为正值则从左至右提取元素,为负值从右至左提取元素,同时索引也应对应从右至左的顺序,步长不能为0。例如: 继续阅读

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,) 继续阅读

Python 数据抓取学习笔记

1、HTTP请求模块该怎么选择?
Python自带有urllib、urllib2两个均不符合我的要求,urllib不可带header信息等,urllib2总提示错误不稳定,最终选择第三方模块httplib2,超级好用。
2、网页内容提取用什么方案?
可以使用lxml模块,beautifulsoup模块,json模块或者正则匹配。
3、使用HTTP请求超时问题怎么解决?
Python的Http请求均使用socket通信实现,通过判断socket的timeout异常即可检测HTTP请求中的异常是否是超时异常,超时时间通过”socket.setdefaulttimeout(10)”设置,切记一定要导入socket模块。
捕获超时异常案例:
from urllib2 import urlopen
import socket
slowurl =”https://www.baidu.com/”
socket.setdefaulttimeout(1)
try:
data = urlopen(slowurl)
data.read()
except socket.error:
errno, errstr = sys.exc_info()[:2]
if errno == socket.timeout:
print “There was a timeout”
else:
print “There was some other socket error”

Python中的if __name__ == ‘__main__’:

Python程序中总能看到“if __name__ == ‘__main__’:”这样的语句,其实这是判断该.py文件是通过import执行还是直接执行的,如果一个.py脚本程序文件被直接执行那么__name__ =’__main__,否则__name__ 的值为该.py脚本文件名。
例如有一个nametest.py文件,如果你直接在终端中通过./nametest.py执行它,那么该程序执行时__name__变量的值为__main__,如果你在另外test2.py中import nametest.py引用该文件执行,则程序中__name__变量的值为nametest。