不知道現在還有多少人在使用人人網,但是在我剛上大學的時候人人網還有開心網還是很火的,然而它們都相繼死去了。倒是高中時喜歡玩的qq空間依舊風生水起。
但是畢竟在人人網上留下了很多東西,將來一不小心人人網關掉了(這種可能我感覺越來越大,畢竟資本市場不會說謊),這些東西丟掉豈不是很可惜?
每天發生的各種瑣事,你此時棄之如敝屐,珍之如瑰寶,在不久的將來會化作一串串珍珠,讓人憑弔……然而珍珠也會蒙塵,所以還是盡可能地保護吧!
renrendownload
1.登入
用python實現模擬登入人人網
2.驗證碼
在登入那篇部落格中已提到驗證碼的問題,實際當中應該是登入時重複多次輸錯密碼導致的。
之後我又發現,在之後爬去好友的個人資訊時,人人網對瀏覽數進行了限制,當對好友的個人頁面瀏覽量累計超過100時,人人網會進行一次驗證碼識別。
3.python中的中文,unicode
字元編碼筆記:ascii,unicode和utf-8
python-高階-編碼處理小結
也談 python 的中文編碼處理
首先是**中的編碼問題,詳見第一篇。
剛開始的英文只需要256個字元編碼就可以解決問題,即ascii,可以說是計算機中最基礎的編碼了吧,記得大學第一門計算機專業課就對它進行了講解。
然而除了英文之外還有許多其他字元需要進行編碼工作,例如中文。但是沒有一種編碼方式將這些ascii編碼無法涵蓋的字元進行統一規則,知道出現了unicode。如名字一樣,每個字元對應的編碼都是獨一無二的。
但是unicode只是乙個很大的集合,只規定了符號的二進位制**,而沒有規定在計算機中應該如何儲存。
後來,隨著網際網路的發展,需要一種統一的編碼方式進行通訊,utf-8就是一種unicode的編碼方式,並且是應用最廣的。
以上就是三者的關係。
然後是python中的編碼問題。
我們經常遇到兩種型別的字元,一種是str,一種是unicode。
python認為unicode才應該是最基礎的編碼。所以str變unicode是str.decode('str的編碼方式'),而unicode變str是unicode.encode('想要變成的編碼方式')。
為了防止意外,理想的情況是,從外界輸入進來的字元,統一decode成unicode,在python**中統一使用unicode,在輸出至外界時,再根據所需encode成對應的字元。
另外,在python**開頭,統一宣告「# -- coding: utf-8 --」表示該**內部的str編碼方式均為utf-8,方便之後進行轉換(雖然python本身進行預設轉換時,並不會參考該設定)。
如果出錯,一般會有兩種報錯:
unicodedecodeerror: 'ascii' codec can't decode byte...
unicodeencodeerror: 'ascii' codec can't encode characters...
有時候是我們寫**時不小心掉入陷阱,有時候則是python使用預設編碼規則轉換時出錯(例如str和unicode型別進行拼接,或者進行輸入輸出)。
通過以下**可以得知當前python使用的編碼規則:
impoort sys
sys.getdefaultencoding()
sys.setdefaultencoding('utf-8')
這樣的話可以避免一些錯誤。
不同編碼轉換時,推薦先decode成unicode,再encode成最終編碼。
同樣的道理,如果在控制台上發現讀取檔案是亂碼,可檢視下是否是編碼方式錯誤,在資料庫中,也同樣是道理。
有個庫可以進行編碼識別:chardet。
4.json
爬取過程中,發現有資料是直接返回的json,有資料是html中的一段但是也是json格式。
一般通過如下進行獲取,s表示字串:
dictinfo = json.loads(content)
但是python的json模組要求key值和value值都用雙引號,而人人網返回的資料中,key和value中單引號和雙引號都有使用,需要更改。然而有的單引號需要變成雙引號,有的不需要(只出現了一次:某個value是一段html,其中有乙個鏈結包含http:,如果更改為雙引號,則此冒號會造成誤解),所以需要挨個字元進行判斷。
匯入成功後,就可以使用如下方式進行讀取:
dictlinfo[key值]
5.mysql
簡單教程:
mysql 教程
python操作mysql資料庫
使用sql輸出table所有項:
select * from table_name into outfile outfile_name.txt
匯出表作為原始資料:
在命令列輸入
mysqldump -u root -p --tab=directory database_name table_name
其中directory即為匯出到的目錄
匯出sql格式的資料:
在命令列輸入
mysqldump -u root -p database_name table_name > output file_name.txt
如果要匯出整個database,則去掉上面命令中的table_name。
如果要匯出所有database(==備份資料庫),則是:
mysqldump -u root -p --all-databases > output file_name.txt
關於在mysql中使用中文,建立資料庫的時候預設的編碼方式是latin1,而不是utf-8.
可以通過如下命令來檢視對應資料庫、表的編碼方式:
show create database database_name
show create table table_name
可以通過如下命令來檢視建立時使用的預設編碼方式:
show variables like '%char%'
如果需要更改,可以執行:
set names utf8
set character_set_client=utf8
set character_set_results=utf8
只不過這些設定都是臨時的,下次啟動後還會還原成原先的情況。
那麼要在mysql中使用中文,首先建立時要設定好編碼方式。
資料庫預設是latin1:
create database database_name default character set utf8
還需要設定collation即比對方法,合起來如下:
create database database_name default character set utf8 collate utf8_general_ci
同時python連線時也要設定為utf8,可以通過在mysqldb.connect(**arg)的入參中設定'charset':'utf8'。
另一種方法是連線建立後,執行connect.set_character_set('utf8')。
或者是執行set names utf8。
參考:讓mysql支援中文
mysql 中 character set 與 collation 的點滴理解
mysql編碼詳解
最後再來上一次**:renrendownload
乙個人才資料網的爬蟲軟體
def get url try response requests.get url return response.text except eoferror raise error 用到了request庫,利用request.get 方法向 請求,然後return 的文字資訊,如果請求不成功則丟擲異...
喜歡乙個人和愛乙個人的區別
愛是在寂寞的夜裡,思念如潮水般湧來,手裡捧著書卻怎麼也看不進去,心裡惦記著他此時是否還在加班,吃沒吃晚飯,是不是如自己想著他一般想著自己。喜歡是和他討論問題爭的面紅耳赤,各不相讓,在他面前像個刺蝟一樣從不認輸,但在心裡卻早已暗暗佩服他的見地他的才華。愛是希望他和自己步調一致,和自己心靈相通,他無心說...
乙個人久了
乙個人久了,會懶得戀愛 乙個人久了,朋友會越重要 乙個人久了,會越來越喜歡聽歌 乙個人久了,會常常忘記帶 乙個人久了,對愛情會越來越挑剔 乙個人久了,會更加勤奮 乙個人久了,除了寂寞點外還是蠻開心的 乙個人久了,會慢慢變得成熟起來 乙個人久了,會比以前更重視更愛父母,更重視親情 乙個人久了,對所有的...