爬虫新任务

来源:互联网 发布:mac 照片如何全屏 编辑:程序博客网 时间:2024/05/02 00:20

今天又收到一个奇怪的爬虫任务,爬取政府的xxx公共网站

额,奇怪的需求,奇怪的要求


碰到的三个问题是:

1、ajax 请求。。

其实发现根本不难啊,和原来的爬取过程一样啊。都已经把必要的请求全部取出了,按照必要的顺序和格式请求过去就可以了

2、验证码请求

这个确实是一个难点,因为如果验证码做的好,确实很难识别,而且还要自己写对应的训练库。但是这里的验证码比较简单

用ubuntu里sudo apt-cache search tesseract-ocr 查询一下

然后sudo apt-get install tesseract-ocr 安装一下,这个用的是google的识别库,识别英文和数字还是比较不错的。

然后下载pytesser插件

然后解压放到对应的项目里,然后直接用就可以了。

from pytesser import pytesser

完完全全没有网上介绍的那么麻烦!!!

完完全全没有网上介绍的那么麻烦!!

完完全全没有网上介绍的那么麻烦!!

重要的事说三遍!!


#识别验证码
        im = Image.open(ppth+'yuyi.jpg')
        text = pytesser.image_to_string(im)


这里可能会说类不存在,或者找不到对应的类。

__init__.py在工程里加入这样一个文件,然后在文件里写入 import pytesser

问题就解决了

3、还有个特别奇怪的问题,总是会碰到服务器403 拒绝访问

后来

req2.add_header('Accept-Encoding','gzip, deflate')是这个原因,只要求发回压缩的内容,我这里要吐槽一下,之前微博爬虫都没这样,给新浪一个赞。。


泄露出来一部分代码内容。

#登入系统查询需要的信息(分两步,第一步提交验证验证码请求)
        opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar))
        urllib2.install_opener(opener)
        rand=random.randint(10, 99)
        req2=urllib2.Request("xxxxxxxxxx")
        req2.add_header('Accept','*/*')
        req2.add_header('Accept-Encoding','gzip, deflate')
        req2.add_header('Accept-Language','zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3')
        #Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
        req2.add_header('User-Agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0')
        req2.add_header("Connection", "keep-alive")
        req2.add_header('Host','xxxxxxxxx')
        req2.add_header('Referer','xxxxxxxxxxx')
        postdata=urllib.urlencode({
                                   'xxxxxxx'  :  text,
                                   })
        req2.add_data(postdata)
        operate=opener.open(req2)
        data=operate.read()

这样就可以应对ajax请求啦。fiddler或者火狐,google浏览器都可以查看全部任意请求的。


应对压缩过的网页内容,

用这个就好了

buf = StringIO(operate.read())
        f = gzip.GzipFile(fileobj=buf)
        data = f.read()
        print data


over~~


0 0