Python

pyinstaller打包py程序

1. 基本语法 pyinstaller命令行的语法是: pyinstaller [options] script [script …] | specfile 通常情况只需要将命令行移动到需要打包的脚本根目录下,然后运行: # 打包myscript.py脚本,生成一个包含可执行文件的目录 pyinstaller myscript.py # 打包myscript.py脚本,生成单个可执行文件,并且关闭终端输出 pyinstaller –onefile –windowed […]

pyqt5

这两个礼拜做一个报文发送的后台守护程序,用到了pyqt5做用户界面。 1.简单窗口 import sys from PyQt5.QtWidgets import QApplication, QMainWindow def main(): # 生成QApplication主程序 app = QApplication(sys.argv) # 生成窗口类实例 main_window =

windows下部署django项目

一、iis+wfastcgi 1. 安装wfastcgi pip install wfastcgi   2. 启用wfastcgi 使用管理员权限打开cmd,输入如下命令: wfastcgi-enable 该命令会输出如下信息: C:\Windows\system32>wfastcgi-enable 已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“system.webServer/fastCgi”节应用了配置更改 "c:\users\funway\appdata\local\programs\python\python36\python.exe|c:\users\funway\appdata\local\programs\python\python36\lib\site-packages\wfastcgi.py" can now be used as

pymssql 2.1.4 ImportError: DLL load failed

最近有个工作需要用python读写sqlserver数据库,就用到了pymssql库。结果在离线的生产环境部署脚本的时候,发现报错: ImportError: DLL load failed: The specified module could not be found 查了下发现pymssql 2.1.4与2.1.2版本不再使用静态链接的方式包含freetds库,而是采用动态链接方式,需要另外下载并安装freetds。尤其是使用windows的whl离线安装包的时候。2.1.3与2.1.1版本则静态包含freetds。所以装回这两个版本即可。 参考: http://www.pymssql.org/en/stable/freetds.html#windows https://github.com/pymssql/pymssql/issues/399#issuecomment-185885836   另外,在使用的时候,发现一个问题。2.1.1版本的Cursor.execute(operation, params)函数的第二个参数不支持字典,只支持元组作为sql语句的参数。即:

破解geetest的拖动验证码

最近有个项目需要爬取“国家企业信用信息公示系统”的数据,在该网站点击搜索按钮时,会弹出极验(geetest)的拖动式验证码。 遂一番google之,发现果然有哥们已经破解了这套验证码系统,甚至放出源码来了。学以致用。 原理很简单,首先定位缺口的位置,然后驱动浏览器将按钮移动到该位置。至于如何定位缺口位置,其实这个验证图是分上下两张的,底图是完整图,上一层则是有缺口的图,另外这两张图都是打散的,需要先还原出原图,然后再逐像素对比两张图片就可以得到缺口位置。移动按钮看似简单,但如果只是简单的将按钮设置到目标位置,极验后台会返回“怪物吃了拼图”,因为该验证码系统会将按钮的移动轨迹提交到极验后台,并验证该轨迹是否像一个人类的行为,所以我们需要尽可能模拟出人类的拖动行为。 代码示例: # -*- coding: utf-8 -*- import logging import time import random import re import requests import

用 Python 装饰器写一个single instance

一、关于python的装饰器 python装饰器的形式有点像java的注解、用处有点像java的切面。可以简单的理解为一个函数如果被装饰器注解了,那么在运行该函数之前,会先调用装饰器函数。 具体的参考如下两篇文章: https://www.zhihu.com/question/26930016 http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 二、一个脚本单一实例运行 有时候我们会有这种需求,只允许某个程序在系统中只有一个运行实例,即不允许程序“多开”。 There are several common techniques including using semaphores. The one I see used

pytesseract识别验证码

验证码破解是做爬虫经常要面对的问题。对于一般字符串或者算式的验证码,可以使用网页截图,然后OCR识别的方式来识别出验证码字符串来。 网页截图可以使用selenium的save_screenshot()方法; 用PIL图像处理库来截取验证码图片; 用Tesseract来做OCR识别 要安装的python第三方库有:selenium、pillow(PIL)、pytesseract 要安装的软件有:selenium用的webdriver、pytesseract用的Tesseract 1. 网页截图并截取验证码 import selenium from PIL import Image … fileScreenshot = "截屏文件保存路径" fileCaptcha =

爬虫遭遇http error 521

最近做了个爬虫需要用到代理ip,然后想去快代理上爬点代理ip下来用。 结果使用urllib2访问http://www.kuaidaili.com/proxylist/1时候发现总是返回521错误。 使用HTTPError的read方法可以打印出HTTP的返回内容。 try: resp = urllib2.urlopen(url) contents = resp.read() except urllib2.HTTPError, error: print e contents = error.read() print contents

关于http代理与端口扫描

写爬虫总会有用到http代理的时候,通常的做法都是直接去代理网站(比如快代理,米扑代理)找代理ip来用,但是这些http代理的原理是什么?代理网站是怎么扫描到这么多代理ip的?这两个问题一直困扰着我,可能以前也查过相关资料,但没记住=。=# 今天还是把这个记下来吧,好记性不如烂笔头不是嘛。 一、http代理原理 参考:https://imququ.com/post/web-proxy.html python实现简单的http代理:https://github.com/abhinavsingh/proxy.py 著名的开源http代理程序有:squid、harproxy、varnish。关于squid的用法可以参考我的下一篇文章《使用squid搭建代理服务器》 从知乎上摘抄了一份对比图,对比了这些开源代理的特性,可以了解一下。 二、端口扫描 代理网站如何扫描到那些可用的代理ip,最直接的方法就是使用暴力穷举: 扫描所有ipv4公网地址(ipv4地址数量有255*255*255*255大概42亿个,其中公网ip大概占20多亿个); 对每个公网ip进行端口扫描(最常用的是TCP SYN扫描),确认该ip下有哪些端口号对外开放(一台主机的端口数量是65535个); 然后再对这几个端口分别进行http代理测试,确认是否可用。 端口扫描的原理其实就是对该[ip: port]尝试进行TCP三次握手,参考:http://zenoh.iteye.com/blog/1264915 下面是一段python实现的最简单的端口扫描脚本: #!/usr/bin/env python from socket