乙個人人網python爬蟲

2021-08-21 13:47:08 字數 3588 閱讀 3726

不知道現在還有多少人在使用人人網,但是在我剛上大學的時候人人網還有開心網還是很火的,然而它們都相繼死去了。倒是高中時喜歡玩的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 的文字資訊,如果請求不成功則丟擲異...

喜歡乙個人和愛乙個人的區別

愛是在寂寞的夜裡,思念如潮水般湧來,手裡捧著書卻怎麼也看不進去,心裡惦記著他此時是否還在加班,吃沒吃晚飯,是不是如自己想著他一般想著自己。喜歡是和他討論問題爭的面紅耳赤,各不相讓,在他面前像個刺蝟一樣從不認輸,但在心裡卻早已暗暗佩服他的見地他的才華。愛是希望他和自己步調一致,和自己心靈相通,他無心說...

乙個人久了

乙個人久了,會懶得戀愛 乙個人久了,朋友會越重要 乙個人久了,會越來越喜歡聽歌 乙個人久了,會常常忘記帶 乙個人久了,對愛情會越來越挑剔 乙個人久了,會更加勤奮 乙個人久了,除了寂寞點外還是蠻開心的 乙個人久了,會慢慢變得成熟起來 乙個人久了,會比以前更重視更愛父母,更重視親情 乙個人久了,對所有的...