Python

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

python爬虫

好像从python开始流行起,他就与爬虫扯上关系了。一提起python就想到爬虫程序,可能是因为python提供的库(模块)比较方便吧,不管是自带的urllib,还是各种第三方库。总结一下我所了解的关于python爬虫的知识,我觉得可以将这些库分为下面四大类:http协议库,文档解析库,模拟浏览器,爬虫框架。 1. urllib、urllib2、urllib3、requests urllib、urllib2是python 2自带的http库,它们负责请求url链接并返回结果。urllib2并不完全是对urllib的升级,有时候得urllib跟urllib2一起用,比如当你想在POST请求中带上参数的话,就得用urllib.urlencode()来格式化参数,就是这么蛋疼。不过在python 3后,urllib跟urllib2就合并了。 自带的urllib、urllib2有很多局限,比如说链接不可重用(http请求头的connection值总是close)。 urllib3、requests都是针对urllib、urllib2改进的第三方库。requests的底层是用urllib3来实现的,并且比urllib3提供了更强大的接口。 so,可以说,现在最方便的http库应该就是requests了。 2. beautiful soup beautiful soup是用来解析html、xml文档的第三方库,它支持多种解析引擎(包括原生的html引擎、lxml引擎、html5lib引擎)。 通常的工作流程是先使用urllib库请求某个url,然后将返回的html数据传递给beautiful soup进行解析。 通过urllib(requests)+beautiful soup结合可以很好地爬取静态网页的内容。但现在的web技术,Ajax跟node.js大行其道,很多网页内容是通过javascript动态生成的,简单地html爬虫对此根本就无能为力,除非你能破译出javascript动态加载的目标url,然后再访问该地址并解析数据。或者,可以考虑使用“模拟”浏览器来解析页面的dom模型,并进行操作。 3. ghost、selenium

python小技巧与坑

这几天打算用python写个小爬虫,就找出先前写python时候整理的一份小文档,顺便把它贴到博客上面来,以后如果还有其他心得,也一并记录在这里好了。

python的浏览器“驱动”库:selenium

上两周的时候,陈怡同学问我怎么通过程序自动化截屏浏览器页面,她说有篇论文用的是python与selenium。当时我的心理活动是这样的:“卧槽selenium是什么鬼,女博士果然是见多识广。” =。=# 然后查了一下,selenium大概可以理解成一个浏览器模拟器(或者实际上是浏览器驱动器,Selenium WebDriver),selenium提供多种编程语言的接口让我们可以通过程序来驱动本地浏览器,并执行我们想要的操作。 以陈怡同学的需求为例,就是通过python调用selenium接口来驱动我的Firefox,打开xx网站,截图保存。 我的环境: python 2.7.6,selenium 2.48.0 安装selenium库: 参考https://pypi.python.org/pypi/selenium #从selenium库引入webdriver类 from selenium import webdriver #新建一个browser对象(驱动firefox浏览器) browser = webdriver.Firefox()

Scroll to Top