萊州有一個秀才,叫彭好古,在一座別墅裡讀書,離家很遠。中秋節也沒回家,一個人冷冷清清。想到村裡的人沒有能說話的,只有一個姓丘的書生,是本縣的名士,但他平素又有些見不得人的惡行,彭好古非常鄙視他,不願和他交往。圓月升上天空,彭好古更加感到無聊,迫不得已,只得寫了封請柬讓僕人去請丘生。
過了不久,丘生來了,二人賞月飲酒。忽聽有叩門聲,童僕答應著出去開了大門,見是一個陌生的書生,要拜見主人。彭好古離席將客人請進來,互相一揖,然後圍著桌子坐下。彭好古便詢問起客人的家鄉住處。客人說:「我是廣陵人,與你同姓,字海秋。值此佳節良宵,我一個人悶在旅店裡太冷清,聽說您高雅健談,所以不請自來了!」看他雖是布衣,卻很整潔,談笑風雅。彭好古大喜,說:「是我的同宗人!今晚什麼日子,遇上這樣的佳客!」請客人喝酒,二人融洽得就和老朋友一樣。看彭海秋的意思,似乎十分鄙視丘生;丘生每次巴結地和他攀談,他都傲慢地不大答理。彭好古替丘生感到羞慚,便打斷他的話頭,說自己要先唱支民謠勸酒,接著唱起了李白的《扶風豪士之曲》。唱完,主客一同大笑起來。彭海秋說:「我不懂音律,不能回報你的陽春白雪之曲,找一個代替的可以嗎?」彭好古說:「悉聽尊便。」彭海秋問:「萊州城有名妓沒有?」彭好古回答說:「沒有。」彭海秋聽說,默默地坐了很久,忽然跟童僕說:「我剛才叫來了一個人,現在門外,你去領她進來!」童僕出門,果然發現一個女子正在門外徘徊,便把她領進屋來。見那女子有十五六歲年紀,穿著柳黃色帔風,散發出陣陣香氣,美麗得跟天仙一樣。彭好古非常驚駭,拉她坐下。彭海秋慰問她說:「麻煩你千里跋涉而來!」女子含著笑連連答應。彭好古心中驚疑,詢問她是從哪來的。彭海秋說:「貴地苦於沒有佳人,我剛才從西湖裡的船上叫了她來。」又對女子說:「你剛才在船上唱的《薄倖郎曲》就很好,請你再唱一遍。」女子便唱道:「薄倖郎,牽馬洗春沼。人聲遠,馬聲杳,江天高,山月小。掉頭去不歸,庭中生白曉。不怨別離多,但愁歡會少。眠何處?勿作隨風絮。便是不封侯,莫向臨邛去!」彭海秋從襪子中掏出一支玉笛,伴著女子的歌聲悠揚動聽地吹起來,歌唱完了,笛聲也停止了。彭好古驚歎不已。說:「西湖到這裡,何止一千里路,片刻之間能叫她到這裡,莫非是神仙嗎?」彭海秋說:「不敢稱仙。只是在我眼裡,萬里遠的路不過就像這庭院一般。今晚西湖的風月比平時更美,不可不去遊覽遊覽。能跟我一起去嗎?」彭好古有心要看看他的奇異本領,便答應道:「太有幸了!」彭海秋又問:「願意乘船還是騎馬?」彭好古想:還是坐船安逸,回答說:「願乘船。」彭海秋說:「在這裡叫船太遠,天河中應該有擺渡的!」便高高地揚起一隻手,向空中招呼道:「船來,船來!我們要去西湖,不吝惜船錢!」不一會兒,只見一隻彩船,從空中飄飄落下,船四周纏繞著團團煙雲,
幾個人一起登上去。見船上一人手持短槳,槳尾密密地排列著長長的鳥翎,形狀像羽毛扇,搖起槳,只覺清風習習。彩船漸漸上升,直入雲霄,然後又往南飛去,快得跟離弦的箭一樣。
過了一刻工夫,覺得彩船落到水中。只聽船外笙歌管弦,一片嘈雜。出船艙一望,見明亮的月光蕩漾在煙波繚繞的水面上,數不清的遊船正游來蕩去。船家停下船槳,任彩船自由行駛。彭好古仔細一看,果然是西湖。這時彭海秋去船艙後取出些美酒佳餚,大家歡快地對喝起來。不一會兒,有只樓船漸漸駛近,依傍著彩船並行。彭好古隔著樓船的窗子往裡一看,裡面有兩三個人正在笑鬧著下圍棋。彭海秋舉起一杯酒對女子說:「用這杯酒為你送行。」女子喝酒的時候,彭好古對她戀戀不捨,惟恐她立即走了,暗暗地踢了踢她的腳。女子秋波一轉,脈脈送情。彭好古更加動心,請求約定再見之期。女子說:「如你喜愛我,只要打聽娟娘的名字,沒有不知道的!」彭海秋把彭好古的綾巾送給女子,說:「我為你們代訂三年後相會之約。」隨即起身,把女子托在手掌裡,說道:「仙人啊仙人!」伸手扳住鄰船的窗戶,把女子從窗格裡塞了進去。窗格有只盤那樣大小,女子伏身像蛇一樣鑽了進去,一點也不覺狹窄。一會兒便聽鄰船有人道:「娟娘醒過來了!」樓船漸漸蕩了開去。
彭好古遠遠地見那只樓船已經停泊,船上的人紛紛下船走了,遊興頓時沒有了。便和彭海秋說想上岸遊覽遊覽,剛商量著,船已靠了岸。於是大家棄船登岸。彭好古獨自一人在前,漫步走了約一里多路,彭海秋從後面趕上來,手裡牽著匹馬,讓彭好古騎上;自己又轉回去,說:「等我再借兩匹馬來。」過了很久,也沒回來。這時,路上的行人越來越少了。仰頭一看,斜月西轉,天色將明。丘生也不知去了哪裡。彭好古牽著馬,徘徊路邊,不知如何辦好。又騎馬回到原來停船的地方,只見人和船都不見了。想到腰包裡沒帶錢,彭好古更加憂愁驚慌。天大明後,他見馬背上有個小口袋,伸手一掏,摸出三四兩白銀。用它買了點吃的,等著彭海秋和丘生回來,不知不覺已到了中午。他想,不如先去拜訪娟娘,也可以慢慢訪查丘生的消息,可等他打聽娟娘的名字,並沒有一個知道的。彭好古興致索然,第二天只得騎馬往回趕來。幸虧馬比較溫順,性不烈,半個月才回了家。
起初,彭好古三人乘船上天時,他的童僕忙跑回家說:「主人已成仙升天了!」全家人都悲哀地哭起來,以為他不會回來了。彭好古返回家,把馬拴好走進院子裡,家裡人見了,都驚喜地詢問他。彭好古詳細講了奇異的經歷。又想到自已一人返回老家來,恐怕丘家聽說後會來追問丘生的下落,便告誡家裡人不要聲張。後來,彭好古說起馬的由來,大家因為馬是仙人送的,都好奇地到馬廄裡觀看。到了馬廄,馬已沒有蹤影,只有丘生被用韁繩拴在馬槽上!眾人極為驚駭,叫出彭好古來看。見丘生垂著頭站在那裡,面如死灰,問他也不答話,只是兩隻眼一張一閉而已。彭好古很不忍心,把他解開扶到床上。丘生就像喪失了魂魄,彭好古給他灌些湯水,他稍稍能嚥下去。到半夜,丘生多少清醒過來,急急忙忙地跑到廁所裡,屙下來幾個馬糞蛋,又吃了點東西,才能開口說話。彭好古在床頭細問究竟。丘生說:「我們下船後,彭海秋引著我邊走邊談。等走到一處沒人的地方,他開玩笑般地拍了拍我的脖頸,我只覺迷迷糊糊的,一下子跌倒在地。趴在地上稍定了定神,再看看自己,已經變成馬,心裡也明白,但是不能說話。這真是奇恥大辱,實在不能讓妻子兒女知道,請求你不要洩露這事!」彭好古答應了,命僕人用馬馱著送他回了家。
彭好古自回家後,一直思念著娟娘。又過了三年,他的姐夫在揚州做官,他便去探望。揚州有個姓梁的公子,跟彭家素有來往,設宴邀請彭好古。酒席上有幾個歌女,都過來拜見梁公子。梁公子問娟娘怎麼沒來,回答說病了。公子發怒地說:「這奴婢自以為聲價高,用條繩子去把她捆來!」彭好古聽到娟娘的名字,驚疑地問是誰。公子回答說:「是個妓女,才貌廣陵數第一。因為有點名氣,所以敢傲慢無禮。」彭好古懷疑是偶然重名,但觸動了心事,又著急地想見見她。
一會兒,娟娘來了,梁公子盛氣凌人地斥責了她一頓。彭好古仔細打量了一下,果然是中秋節見過的那個娟娘。便對梁公子說:「她跟我有舊交,請你寬恕她。」娟娘看了看彭好古,顯出驚愕的樣子。梁公子來不及深問彭好古,便命娟娘斟酒。彭好古問她:「《薄倖郎曲》還記得嗎?」娟娘更加驚駭,凝神注視了他一會,才開始唱起那支舊曲。聽她的聲音,跟當年中秋節時唱的一模一樣。酒宴結束,梁公子命娟娘陪客人入寢。彭好古握著她的手說:「三年之約,今天才實現了嗎?」娟娘說:「那天我跟人游西湖,喝了幾杯酒,忽然像醉了一樣,朦朦朧朧地只覺被一個人帶到一個村子裡。一個小童領我進入一家,席上有三個客人,你是其中的一個。後來乘船來到西湖,又把我從窗口送了回去,你拉著我的手戀戀不捨。我以為那都是幻夢,但綾巾真在,我至今還珍藏眷。」彭好古也講了那件事的經過,兩個人相互驚歎感慨了一會兒。娟娘撲到彭好古的懷裡,哽咽著說:「仙人已給我們作了媒人,您不要以為我是個風塵女子,可以捨棄,就不再想念我這個苦海中的人!」彭好古說:「船中訂下的約會,我一天也沒忘。倘若你有意,我就是傾囊出資,再賣了這匹馬,只要能把你贖出來,我也在所不惜!」
第二天一早,彭好古把這意思告訴了梁公子,又從姐夫那裡借了一千兩銀子,削去了娟娘的樂籍,把她帶回了老家。娟娘有次偶然到那座別墅去,還記得當年喝酒的地方。