爬蟲新任務

今天又收到一個奇怪的爬蟲任務,爬取政府的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~~


發佈了73 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章