第6章 打字機
陳一然並沒有聽話的去睡午覺,他有種感覺睡下去再睜眼就得第二天了。
從冰箱裡拿出個冰可樂直接放到額頭上,頗有點熱血的在腦中說:「來,繼續,揚名立萬就靠你了。」
【好吧,打開 TextWrangler。新建文件,保存為 scraper.py。】
陳一然照做了。
【把手放在鍵盤上。】
他深呼吸了一下,把手放上去。
然後他的手指開始動了。
腦中一行行的文字,陳一然把自己變成了打字機器。
手指在鍵盤上飛快地跳動,一行行代碼出現在屏幕上。
from urllib2 import urlopen from BeautifulSoup import BeautifulSoup import re import json import threading import Queue import time import sys
def init(self, url, depth=1): self.url = url self.depth = depth self.results = [] self.visited = set()
陳一然的好狀態只持續了一會,就開始手酸,還好每次打錯茉莉都能及時提醒。
就這樣磨磨唧唧了 3 個小時,陳一然感覺頭都快炸了,茉莉終於發話了。
大約兩個小時後,茉莉說:【停。看一下屏幕。】
陳一然把手從鍵盤上拿開,甩了甩手腕。
屏幕上大概是三百行代碼。
「我完全看不懂。」
【運行一下。打開終端,輸入 'python scraper.py ,然後回車。】
陳一然打開終端,照著打了,回車。
屏幕上開始輸出文字,一行一行,很快。
URL: Title: Example Domain Links found: 1 Headings: h1 - Example Domain Text content: This domain is for use in illustrative examples...
過了大約十秒,輸出停了。
Done. Scraped 1 page(s) in 8.3 seconds.
茉莉:【能跑。繼續加功能。】
接下來的 3 個小時,陳一然又變成了一台打字機。
茉莉把代碼通過他的手指一行行輸出。
中間陳一然餓的不行,又點了個棒約翰,這家是陳一然最愛的披薩店。
宜家也把家具送了過來,其實為了可以不裝家具,陳一然買的都是簡單的。
半個小時裝家具,陳一然都覺得算是休息了,比雙手悶頭打字舒服。
就這樣磨磨唧唧到晚上九點的時候,scraper.py 已經從三百行變成了將近六百行。茉莉加了並發抓取、錯誤處理、自動跟隨連結、數據導出功能,還寫了一個命令行界面。
【再測試一次 python scraper.py 。這次寫一個真實網站。】
陳一然在終端里輸入了 cnn 官網的地址,回車。
屏幕上飛速滾動著輸出。URL、標題、正文摘要、發布時間、圖片連結…… 各種信息被自動提取出來,排列得整整齊齊。
Done. Scraped 47 page(s) in 2 minutes 14 seconds.
陳一然盯著那行字。
47 個頁面,2 分 14 秒。
【工具完成。】
陳一然的後腦勺比早上更熱了。
茉莉:【大腦在高負荷運轉時產熱增加,你的體溫調節系統正在工作,不是生病。】
「你這得確定嗎,還好後天才上課,明天上課我肯定頂不住。」
【放心,你上輩子看了足夠多的醫學紀錄片,我是專業的。】
陳一然去冰箱拿了瓶水,一口氣喝了半瓶。
茉莉:【我想把這個工具放到網上,GitHub 你應該記得吧。】
「這我還是聽過的,放代碼的網站,openclaw 不就是這上面傳出來的。」
【打開 Safari,搜索 GitHub。】
陳一然搜了一下,github.com。頁面很簡潔,大標題寫著 「Social Coding」。
【註冊一個帳號。】
陳一然想了想用戶名,隨便填了一個,郵箱用的是今天剛開通的 Gmail。hotmail 狗都不用,上輩子這破郵箱害得陳一然兩次沒交上作業,今天網絡安好第一件事就是把谷歌帳號弄好。
github 註冊完之後,茉莉讓他搜了一個叫 Git 的東西下載安裝。命令行工具,看著就很折騰。
【跟著我的指示操作就行。】
又花了大約二十分鐘,茉莉通過他的手完成了 Git 配置、創建倉庫、把代碼上傳。
他的 GitHub 主頁上出現了一個新倉庫,名叫 「web-scraper」。下面是 scraper.py 的原始碼,還有一個 README.md,是茉莉讓他寫的說明文件。
介紹了這個工具的功能、安裝方法和使用示例,寫得還挺像那麼回事。
【這個東西現在是公開的了,但問題是,沒人知道它的存在。】
「首先,這個公開了有什麼用呢?」
【可以幫助我來確認我的能力,我們需要把它分享出去,谷歌一下吧。】
陳一然想了想,在 Google 里輸入 「where to share open source projects」。
結果出來了。Reddit 的 r/programming、Stack Overflow、SourceForge、一個叫 Hacker News 的網站……
茉莉看了幾秒鐘。
【第四個。。打開看看。】
陳一然點開了。
一個很簡陋的網頁,白底灰字,一堆標題和連結排列在一起,每個標題左邊有一個向上的箭頭和數字,最上面寫著 「Hacker News」。
「這行不行啊,看著也太簡陋了,Reddit 怎麼樣,那個論壇很火啊。」
【這是專門的程式設計師社區,更專業,註冊一個帳號試試吧。】
註冊很簡單,只需要用戶名和密碼。
註冊完之後,茉莉讓他點了一個 「Submit」 的連結。
【標題寫:Show HN: web-scraper – a simple and fast web scraper in Python。下面那個 URL 框填 GitHub 倉庫的連結。】
陳一然照著打了,提交。
頁面刷新了一下,他的帖子出現在了 Hacker News 的新帖列表里,分數是 1,旁邊寫著 「0 points」。
【等著就行,該幹什麼幹什麼。】
陳一然關掉 Safari,靠在椅背上。
看了一眼時間,已經十點鐘了。從下午一點半到現在,陳一然感覺一直在高強度作業。
他的手指有點酸,像是跑了一天馬拉松但是腿沒事,腦子快炸了。
【今天到此為止,你需要的休息時間大約八到九個小時。】
「你倒是挺關心我的。」
【我需要你的大腦處於最佳狀態,休息是維護的一部分。】
「行吧,行吧,無所不能的茉莉大人。」
陳一然還是很激動的,不管怎麼樣,今天茉莉的表現,終於有點金手指的意思了。
陳一然強撐著去衛生間沖了個澡,水溫調到偏涼,感覺大腦終於舒服多了。
回到臥室,躺在床上剛想睡覺,卻忍不住把電腦拿過來看了眼幾個網站。
GitHub 上那個倉庫,star 數是 0。Hacker News 帖子,0 points。
什麼都沒有,就像往大海里扔了一顆石子。
雖然沒指望剛發布就被人關注到,但是陳一然還是有點小失望。
這就有點像在洋柿子發了本書,剛寫到兩萬字,你也不知道未來會如何。
算了,事已至此,先睡覺吧。
就這樣,深夜來了,諸多夜貓子起了床。茉莉的初嘗試,終于震撼了 Hacker News。
從冰箱裡拿出個冰可樂直接放到額頭上,頗有點熱血的在腦中說:「來,繼續,揚名立萬就靠你了。」
【好吧,打開 TextWrangler。新建文件,保存為 scraper.py。】
陳一然照做了。
【把手放在鍵盤上。】
他深呼吸了一下,把手放上去。
然後他的手指開始動了。
腦中一行行的文字,陳一然把自己變成了打字機器。
手指在鍵盤上飛快地跳動,一行行代碼出現在屏幕上。
from urllib2 import urlopen from BeautifulSoup import BeautifulSoup import re import json import threading import Queue import time import sys
def init(self, url, depth=1): self.url = url self.depth = depth self.results = [] self.visited = set()
陳一然的好狀態只持續了一會,就開始手酸,還好每次打錯茉莉都能及時提醒。
就這樣磨磨唧唧了 3 個小時,陳一然感覺頭都快炸了,茉莉終於發話了。
大約兩個小時後,茉莉說:【停。看一下屏幕。】
陳一然把手從鍵盤上拿開,甩了甩手腕。
屏幕上大概是三百行代碼。
「我完全看不懂。」
【運行一下。打開終端,輸入 'python scraper.py ,然後回車。】
陳一然打開終端,照著打了,回車。
屏幕上開始輸出文字,一行一行,很快。
URL: Title: Example Domain Links found: 1 Headings: h1 - Example Domain Text content: This domain is for use in illustrative examples...
過了大約十秒,輸出停了。
Done. Scraped 1 page(s) in 8.3 seconds.
茉莉:【能跑。繼續加功能。】
接下來的 3 個小時,陳一然又變成了一台打字機。
茉莉把代碼通過他的手指一行行輸出。
中間陳一然餓的不行,又點了個棒約翰,這家是陳一然最愛的披薩店。
宜家也把家具送了過來,其實為了可以不裝家具,陳一然買的都是簡單的。
半個小時裝家具,陳一然都覺得算是休息了,比雙手悶頭打字舒服。
就這樣磨磨唧唧到晚上九點的時候,scraper.py 已經從三百行變成了將近六百行。茉莉加了並發抓取、錯誤處理、自動跟隨連結、數據導出功能,還寫了一個命令行界面。
【再測試一次 python scraper.py 。這次寫一個真實網站。】
陳一然在終端里輸入了 cnn 官網的地址,回車。
屏幕上飛速滾動著輸出。URL、標題、正文摘要、發布時間、圖片連結…… 各種信息被自動提取出來,排列得整整齊齊。
Done. Scraped 47 page(s) in 2 minutes 14 seconds.
陳一然盯著那行字。
47 個頁面,2 分 14 秒。
【工具完成。】
陳一然的後腦勺比早上更熱了。
茉莉:【大腦在高負荷運轉時產熱增加,你的體溫調節系統正在工作,不是生病。】
「你這得確定嗎,還好後天才上課,明天上課我肯定頂不住。」
【放心,你上輩子看了足夠多的醫學紀錄片,我是專業的。】
陳一然去冰箱拿了瓶水,一口氣喝了半瓶。
茉莉:【我想把這個工具放到網上,GitHub 你應該記得吧。】
「這我還是聽過的,放代碼的網站,openclaw 不就是這上面傳出來的。」
【打開 Safari,搜索 GitHub。】
陳一然搜了一下,github.com。頁面很簡潔,大標題寫著 「Social Coding」。
【註冊一個帳號。】
陳一然想了想用戶名,隨便填了一個,郵箱用的是今天剛開通的 Gmail。hotmail 狗都不用,上輩子這破郵箱害得陳一然兩次沒交上作業,今天網絡安好第一件事就是把谷歌帳號弄好。
github 註冊完之後,茉莉讓他搜了一個叫 Git 的東西下載安裝。命令行工具,看著就很折騰。
【跟著我的指示操作就行。】
又花了大約二十分鐘,茉莉通過他的手完成了 Git 配置、創建倉庫、把代碼上傳。
他的 GitHub 主頁上出現了一個新倉庫,名叫 「web-scraper」。下面是 scraper.py 的原始碼,還有一個 README.md,是茉莉讓他寫的說明文件。
介紹了這個工具的功能、安裝方法和使用示例,寫得還挺像那麼回事。
【這個東西現在是公開的了,但問題是,沒人知道它的存在。】
「首先,這個公開了有什麼用呢?」
【可以幫助我來確認我的能力,我們需要把它分享出去,谷歌一下吧。】
陳一然想了想,在 Google 里輸入 「where to share open source projects」。
結果出來了。Reddit 的 r/programming、Stack Overflow、SourceForge、一個叫 Hacker News 的網站……
茉莉看了幾秒鐘。
【第四個。。打開看看。】
陳一然點開了。
一個很簡陋的網頁,白底灰字,一堆標題和連結排列在一起,每個標題左邊有一個向上的箭頭和數字,最上面寫著 「Hacker News」。
「這行不行啊,看著也太簡陋了,Reddit 怎麼樣,那個論壇很火啊。」
【這是專門的程式設計師社區,更專業,註冊一個帳號試試吧。】
註冊很簡單,只需要用戶名和密碼。
註冊完之後,茉莉讓他點了一個 「Submit」 的連結。
【標題寫:Show HN: web-scraper – a simple and fast web scraper in Python。下面那個 URL 框填 GitHub 倉庫的連結。】
陳一然照著打了,提交。
頁面刷新了一下,他的帖子出現在了 Hacker News 的新帖列表里,分數是 1,旁邊寫著 「0 points」。
【等著就行,該幹什麼幹什麼。】
陳一然關掉 Safari,靠在椅背上。
看了一眼時間,已經十點鐘了。從下午一點半到現在,陳一然感覺一直在高強度作業。
他的手指有點酸,像是跑了一天馬拉松但是腿沒事,腦子快炸了。
【今天到此為止,你需要的休息時間大約八到九個小時。】
「你倒是挺關心我的。」
【我需要你的大腦處於最佳狀態,休息是維護的一部分。】
「行吧,行吧,無所不能的茉莉大人。」
陳一然還是很激動的,不管怎麼樣,今天茉莉的表現,終於有點金手指的意思了。
陳一然強撐著去衛生間沖了個澡,水溫調到偏涼,感覺大腦終於舒服多了。
回到臥室,躺在床上剛想睡覺,卻忍不住把電腦拿過來看了眼幾個網站。
GitHub 上那個倉庫,star 數是 0。Hacker News 帖子,0 points。
什麼都沒有,就像往大海里扔了一顆石子。
雖然沒指望剛發布就被人關注到,但是陳一然還是有點小失望。
這就有點像在洋柿子發了本書,剛寫到兩萬字,你也不知道未來會如何。
算了,事已至此,先睡覺吧。
就這樣,深夜來了,諸多夜貓子起了床。茉莉的初嘗試,終于震撼了 Hacker News。