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