作者jimmyken793 (達)
看板jimmyken793
標題[ HW ] Python 第一話
時間Sun Nov 16 00:38:46 2008
這是遲來的教學囉
首先呢 這篇是以你已經學會基本的Python(判斷 迴圈等等)為前提
所以不會的 請看看助教的slides 或者左轉去 itsming 搜尋python
接下來就要說這次作業大概要怎麼做啦
請盡力把這個看懂
http://docs.python.org/dev/howto/regex.html
這是Python部分的regular expression的文件
基本上 能夠獨立看懂這種文件會對以後學新東西時有很大的幫助
廢話完畢
------
作業的話 程式的內容大概可以分成三步驟
1.抓回網頁
2.分析網頁
3.把圖打包回家
關於第一項 TA的example已經做完啦 所以也沒啥好說
第二項就需要用到regular expression囉 除非你想慢慢刻出一個用來parse出圖片網址的
程式
所以regular expression是甚麼呢
基本上就是一組用來表示字串的"pattern"的方式
例如 要找 "以123結尾的字串" 或者是 "aa開頭bb結尾" 的字串
我們可以用 "*123" 和 "aa*bb" 來表示這兩種情況
所以 當然也可以用來找我們這次所需要的圖片的網址
基本表示法的話 這裡有說明
http://en.wikipedia.org/wiki/Regular_expression
快速教學的話就看這裡吧
在python裡面 被保留的符號有
^ $ * + ? { [ ] \ | ( )
代表任意一個字元 在某些設定情況下似乎也可以代表\n 不過我沒用過
? 代表零或一個任意字元 (也就是這裡的字元可有可無的意思)
* 代表零至無限多個任意字元
+ 代表一至無限多個任意字元
^ 行首 或者輸入的字串頭
$ 行尾 或者輸入的字串尾
\ 脫逸字元
[] 符合[]裡面敘述的單一字元 例如[a-z]就是a-z (小寫) [a-zA-z0-9]就是所有
英數字元
() subexpression 我也不太會解釋 而且我只會用下面這種XD
(abc|bca|bbb) 代表只有三種字串可以符合這種條件 abc bca 和 bbb
{} 代表前面的一個block可以重複幾次
例如 a{2,4} 代表著以下字串符合這個式子
aa aaa aaaa
而(as){3,5} 代表有下面三種情況符合這個式子
asasas asasasas asasasasas
打的時候要注意 如果你想要用到保留字元的話 要用\脫逸
例如我想要找出所有開頭是 www.google.com 結尾是/的字串
那就必須要打 www\.google\.com*/
把.脫逸 否則可能連這種東西都會過
wwwwgoogleecoma/
然後還有
在python裡面打標準表示法的時候要注意escape的問題
例如你想要表示剛剛的那個式子
www\.google\.com*/
那麼 必須把\再脫逸一次 (因為\在python讀入時也會視為脫逸字元)
就會變成這樣
exp = "www\\.google\\.com*/"
所以python讀的時候會把\\脫逸成\ 存在記憶體裡面的東西就長這樣了
www\.google\.com*/
所以呢 我們要表示的是圖片的網址
請自己隨便去找個相簿 把隨便一個圖片的網址找出來
像這樣
http://jimmyken793.pixnet.net/album/set/1884780 這個相簿(很久以前的點軍塗鴉= =)
就用第一張圖吧
原始碼部分是
<a href="
http://jimmyken793.pixnet.net/album/photo/61089342">
<img
id="thumb61089342"
src="
http://p1.p.pixnet.net/albums/userpics/1/7/286717/thumb_1186276285.png"
class="thumb" width="90" />
</a>
所以網址是
http://p1.p.pixnet.net/albums/userpics/1/7/286717/thumb_1186276285.png
那基本上數字部分都可以替換
其他的 自己寫吧XDD
還有助教的code裡面有一個下載檔案的函式
請多多利用
檔名就從網址裡面用redular expression擷取就OK了
加油吧各位
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 118.166.112.71
→ weijer0905:先推一個XD推 11/16 00:44
→ dennis2030:先推一個 今天研究好久還是沒頭緒Q口Q推 11/16 00:48
→ dennis2030:想法都有 卡在語法跟函式...超幹 = =推 11/16 00:48
→ weijer0905:恩嗯 都不會寫XD推 11/16 00:50
→ wooffood:看到這篇才熊熊想起有這個作業= ="推 11/16 18:36
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.112.71
※ 編輯: jimmyken793 來自: 118.166.112.71 (11/16 19:24)
→ jimmyken793:第一次寫這種東西 有不足的歡迎提問 11/16 19:24
→ jimmyken793:或者是我腦殘也請指正XD 11/16 19:25
※ 編輯: jimmyken793 來自: 118.166.112.71 (11/16 19:26)
推 justin760204:大感謝 T.T 11/16 19:28
推 ming1053:其實()括起來的部份就是re.findall()之類的會取的部份 11/16 19:38
推 dennis2030:看完吉米肯的文章後 考試都考一百分了呢! 11/16 20:41
推 benck:所以樓上100了!?? 11/16 21:01