爬蟲基礎:怎樣用python保存一張網頁上的圖片,順便提一下KMP演算法在字元串中的應用
今天我們班籃球比賽圓滿結束,並且拿到了全院第二的好成績,除了研究生聯隊,我們班都打贏了,還是挺開心的,哈哈哈哈。今天老鐵們去喝酒了,可惜我因為考駕照的原因不能陪他們一起,有點失望,不過下次機會還是有的。
下面聊正題。 首先我們來看一下,我之前有在朋友圈發過的一串代碼,它解決的是這樣一個問題:將主串T中第一次與模式串P相等的字元替換為給定的第三段字元S,串S和T的長度不一定相等。
這個問題,我的主要思路是使用,kmp演算法先找到,T與P向匹配的第一個字元的位置,然後利用這個位置,再利用指針,T中的所有內容後移。再將S中的字元利用指針將其插入,最後刪除T中所佔S位置的原來的字元,最後遍歷即可。具體代碼如下:
//字元串.cpp : 定義控制台應用程序的入口點。//#include "stdafx.h"#define MAX_STRLEN 1024typedef struct sstring{ int length; char str[MAX_STRLEN];}Sstring;void Init_string(sstring &S){ S.length = 0; char c; c = getchar(); while (c !=
) { S.str[S.length] = c; S.length++; c = getchar(); }}int next[1024];/*定義一個next()函數*/void Next(sstring T){ int i = 1, j = 0; next[1] = 0; while ( i < T.length) { if (j==0||T.str[i] == T.str[j]) { i++; j++; next[i] = j;} else j = next[j]; } }void StrRelace(sstring &T, sstring &P, sstring &S){ Next(P); int i = 0, j = 0; while (i < T.length&&j < P.length) { if (j == 0 || T.str[i] == P.str[j]) { i++; j++;} else j = next[j]; } if (j == P.length) { int m = i - j; }/*此時m為T與S相等的第一個字元的數組下標*/ int m = i - j; char *p = &T.str[m]; char *q = &T.str[T.length - 1]; while (q >= p) { *(q + S.length) = *q; q--; }/*向後移動S.length個長度,為S的插入做準備*/ for (int b = 0; b < S.length; b++) { *p = S.str[b]; p = p + 1; }/*此時S中的元素已經全部插入,但是需要注意的問題是,用指針後退的元素並沒有被刪除*/ j = P.length; /*此時,使用下面的這個循環來刪除在指針後移之後,原來對應位置的元素*/ while (p < (q+S.length+T.length-i+1)) { *p = *(p + j); p++; } /*進行遍歷*/ for (int c = 0; c < (T.length+S.length-j); c++) { printf("%c", T.str[c]); }} int main(){ sstring T, P, S; Init_string(T); Init_string(P); Init_string(S); StrRelace(T,P,S); return 0;}
下面講一講怎樣用python保存網頁上的一張圖片,特基礎,大家應該都能懂。
我喜歡玩王者榮耀,下面我們在網頁上搜索一下王者榮耀的圖片:
這步大家應該都沒有問題吧,如果我們要保存第一張圖片,那麼就先點擊進去:
下面我們點F12,或者是右鍵審查元素,找到這個圖片的真正的url,
下面的代碼很常規,調用了urllib模塊。
我用紅色箭頭所指的b,代表的是,二進位的保存形式。
這裡大家要注意不要使用w,應該是使用的wb模式,這樣的話,才能夠是二進位的方式。
只有二進位的數據才能夠被保存。
這樣,網頁上的一張圖片就被我們用python保存在自己新建的一個文件夾中啦!
(不是自己的電腦,是一個垃圾電腦,給我氣死了,喜歡自動刪除文字,我其實打了很多註解,保存一看,全部自己刪除了,又打了一遍,不過沒有那麼仔細,不懂的朋友可以留言討論)
推薦閱讀:
※記一次調試python內存泄露的問題
※Python 2 or Python 3
※Python語言有多流行
※【Python】理解"閉包"