Python爬蟲(chóng)初學(xué)(三)—— 模擬登錄知乎

模擬登錄知乎

這幾天在研究模擬登錄, 以知乎 - 與世界分享你的知識(shí)论熙、經(jīng)驗(yàn)和見(jiàn)解為例福青。實(shí)現(xiàn)過(guò)程遇到不少疑問(wèn),借鑒了知乎xchaoinfo的代碼脓诡,萬(wàn)分感激无午!

知乎登錄分為郵箱登錄和手機(jī)登錄兩種方式,通過(guò)瀏覽器的開(kāi)發(fā)者工具查看祝谚,我們通過(guò)不同方式登錄時(shí)宪迟,網(wǎng)址是不一樣的。郵箱登錄的地址email_url = 'https://www.zhihu.com/login/email'交惯,手機(jī)登錄網(wǎng)址是phone_url = 'http://www.zhihu.com/login/phone_num'次泽。

1. 建立一個(gè)可以傳Cookie的opener

Cookie用來(lái)跟蹤用戶是否已經(jīng)登錄的狀態(tài)信息。一旦網(wǎng)站認(rèn)證了我們的登錄席爽,就會(huì)將cookie存到瀏覽器中箕憾,里面包含了服務(wù)器生成的令牌、登錄有效時(shí)長(zhǎng)拳昌、狀態(tài)跟蹤信息袭异。當(dāng)?shù)顷懹行r(shí)長(zhǎng)達(dá)到,我們的登錄狀態(tài)就被清空炬藤,想要訪問(wèn)其他需要登錄后才能訪問(wèn)的頁(yè)面也就不能成功了御铃。意思就是我們能保持登錄狀態(tài)不掉線碴里,是因?yàn)榉?wù)器端核對(duì)了我們?cè)L問(wèn)時(shí)攜帶的cookie,核對(duì)成功后服務(wù)器端就認(rèn)為我們時(shí)“已經(jīng)登錄了”的狀態(tài)上真。urllib.requst.urlopen()可傳入的參數(shù)中咬腋,都不能攜帶cookie信息。http.cookiejarFileCookieJar可以幫到我們睡互,FileCookieJar可以將cookie存到本地文件中根竿。 其中FileCookieJar的子類LWPCookieJar,可以存Set-Cookie3類型的文件就珠,而MozillaCookieJar子類是存為.txt格式的文件寇壳。這里我使用LWPCookieJar

filename = 'cookie'
cookie = http.cookiejar.LWPCookieJar(filename)

這樣就建立了一個(gè)可以保存cookie的實(shí)例對(duì)象妻怎,它還有一個(gè)方法load()可以從本地加載已存的cookie數(shù)據(jù)壳炎,這樣我們就可以攜帶著cookie(相當(dāng)于帶了一塊令牌)訪問(wèn)服務(wù)器,服務(wù)器核對(duì)成功后逼侦,就可以訪問(wèn)那些登錄后才能訪問(wèn)的頁(yè)面匿辩。

try:
    cookie.load(ignore_discard=True)
except IOError:
    print('Cookie未加載!')

其中參數(shù)ignore_discard=True表示即使cookies將被丟棄也把它保存下來(lái)榛丢,它還有另外一個(gè)參數(shù)igonre_expires表示當(dāng)前數(shù)據(jù)覆蓋(overwritten)原文件铲球。

現(xiàn)在建立一個(gè)可以處理cookie的opener。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
                         '(KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36',
           "Host": "www.zhihu.com",
           "Referer": "https://www.zhihu.com/",
           }
# 創(chuàng)建一個(gè)可以處理cookies的opener
opener = request.build_opener(request.HTTPCookieProcessor(cookie))
# 給openner添加headers, addheaders屬性接受元組而非字典
opener.addheaders = [(key, value) for key, value in headers.items()]

接下來(lái)我們可以使用opener.open()來(lái)傳入url和data了晰赞。

2. 獲取登錄所需關(guān)鍵參數(shù)

模擬登錄知乎睬辐,除了要POST自己的賬號(hào)密碼,還有兩個(gè)動(dòng)態(tài)生成的參數(shù)宾肺,一個(gè)是_xsrf,還有一個(gè)就是討厭的驗(yàn)證碼了溯饵。我們輸入賬號(hào)密碼后,通過(guò)開(kāi)發(fā)者工具找到一個(gè)名為email的json文件锨用,請(qǐng)求方法是POST丰刊,可以看到其域名是https://www.zhihu.com/login/email.我用火狐的開(kāi)發(fā)者工具,點(diǎn)開(kāi)這個(gè)文件看到里面的參數(shù)增拥。

與chrome對(duì)應(yīng)的好像是Headers下面的Form Data啄巧,在Network里面勾選preserve log就可以看到。

post的數(shù)據(jù)查看

這里就把本人郵箱和密碼的給打碼了哈掌栅,嘿嘿秩仆。

獲取_xsrf

這個(gè)參數(shù)是動(dòng)態(tài)變化了,所以不能獲取一次后就一勞永逸猾封。從html的body里面搜索下_xsrf,然后用正則表達(dá)式匹配出來(lái)就行澄耍。

def get_xsrf():
    """
    獲取參數(shù)_xsrf
    """
    req = opener.open('https://www.zhihu.com')
    html = req.read().decode('utf-8')
    get_xsrf_pattern = re.compile(r'<input type="hidden" name="_xsrf" value="(.*?)"')
    # 這里會(huì)返回多個(gè)值,不過(guò)都是一樣的內(nèi)容,取第一個(gè)就行
    _xsrf = re.findall(get_xsrf_pattern, html)[0]
    return _xsrf

獲取驗(yàn)證碼

知乎登錄一般需要填入驗(yàn)證碼齐莲,如果沒(méi)有post這個(gè)參數(shù)過(guò)去痢站,是不能成功登錄的。

知乎的驗(yàn)證碼開(kāi)始把我給坑了选酗,在html內(nèi)容的頁(yè)面里搜索能看到驗(yàn)證碼圖片的網(wǎng)址阵难,但是實(shí)際用xxx.read().decode('utf-8')獲取到的網(wǎng)頁(yè)內(nèi)容是沒(méi)有這個(gè)網(wǎng)址的,它被隱藏了!好狡詐芒填。研究無(wú)果只好搜索呜叫,從知乎上這個(gè)問(wèn)題xchaoinfo的回答找到答案,結(jié)果是這個(gè)圖片網(wǎng)址中的一串?dāng)?shù)字就是時(shí)間戳殿衰。

驗(yàn)證碼的鏈接

時(shí)間戳是指格林威治時(shí)間1970年01月01日00時(shí)00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù)朱庆。

通過(guò)time.time()可以查看當(dāng)前時(shí)間戳。比如我當(dāng)前是1471771678.5400066,看是不是和上面紅框中的很接近播玖!通過(guò)過(guò)換算關(guān)系t = time.time() * 1000可以得到圖片鏈接的關(guān)鍵部分椎工,其余部分都是不變的饭于。驗(yàn)證碼的完整地址為captcha_url = 'http://www.zhihu.com/captcha.gif?r=' + t + "&type=login"蜀踏。好了,鏈接知道了掰吕,下載下來(lái)查看并手動(dòng)輸入就行了果覆。再把這個(gè)post過(guò)去應(yīng)該就可以登錄成功了,好激動(dòng)殖熟。

def get_captcha():
    """
    獲取驗(yàn)證碼本地顯示
    返回你輸入的驗(yàn)證碼
    """
    t = str(int(time.time() * 1000))
    # 驗(yàn)證碼完整網(wǎng)址
    captcha_url = 'http://www.zhihu.com/captcha.gif?r=' + t + "&type=login"
    # 下載驗(yàn)證碼圖片局待,用下面注釋掉的方法一樣的效果
    request.urlretrieve(captcha_url, 'cptcha.gif')
    # image_data = request.urlopen(captcha_url).read()
    # with open('cptcha.gif', 'wb') as f:
    #     f.write(image_data)
    # 用Pillow庫(kù)顯示圖片,免去手動(dòng)去文件夾打開(kāi)的麻煩
    im = Image.open('cptcha.gif')
    im.show()
    captcha = input('本次登錄需要輸入驗(yàn)證碼: ')
    return captcha

3. 嘗試模擬登錄知乎

關(guān)鍵的兩個(gè)東西我們都獲取到了菱属,現(xiàn)在登錄一下試試吧钳榨!要將登錄方式考慮進(jìn)去,如果檢測(cè)到用于輸入手機(jī)號(hào)纽门,則我們應(yīng)該訪問(wèn)手機(jī)登錄網(wǎng)址薛耻;否則就是郵箱登錄。

def login(username, password):
    """
    輸入自己的賬號(hào)密碼赏陵,模擬登錄知乎
    """
    # 檢測(cè)到11位數(shù)字則是手機(jī)登錄
    if re.match(r'\d{11}$', username):
        url = 'http://www.zhihu.com/login/phone_num'
        data = {'_xsrf': get_xsrf(),
                'password': password,
                'remember_me': 'true',
                'phone_num': username
                }
    else:
        url = 'https://www.zhihu.com/login/email'
        data = {'_xsrf': get_xsrf(),
                'password': password,
                'remember_me': 'true',
                'email': username
                }

    # 若不用驗(yàn)證碼饼齿,直接登錄
    post_data = parse.urlencode(data).encode('utf-8')
    r = opener.open(url, post_data)
    result = r.read().decode('utf-8')
    # 打印返回的響應(yīng),r = 1代表響應(yīng)失敗蝙搔,msg里是失敗的原因
    # 要用驗(yàn)證碼缕溉,post后登錄
    if (json.loads(result))["r"] == 1:
        data['captcha'] = get_captcha()
        post_data = parse.urlencode(data).encode('utf-8')
        r = opener.open(url, post_data)
        result = r.read().decode('utf-8')
        print((json.loads(result))['msg'])
    # 保存cookie到本地
    cookie.save(ignore_discard=True, ignore_expires=True)

關(guān)于那句print((json.loads(result))['msg']) ,opener攜帶數(shù)據(jù)post過(guò)去吃型,請(qǐng)求網(wǎng)址得到的響應(yīng)會(huì)返回登錄信息证鸥,該數(shù)據(jù)是json類型,剛開(kāi)始我一直是登錄失敗的,返回這樣的玩意兒敌土!

{
"r": 1,
"errcode": 1991829,

"data": {"captcha":"\u9a8c\u8bc1\u7801\u9519\u8bef"},

"msg": "\u9a8c\u8bc1\u7801\u9519\u8bef"

}

r為1表示登錄失敗镜硕,0表示登錄成功。msg里反映的是登錄失敗的原因是”驗(yàn)證碼會(huì)話失效“返干。

這里一定注意兴枯,登錄是一個(gè)連貫的過(guò)程。這個(gè)過(guò)程我們總共有三次訪問(wèn)網(wǎng)址矩欠,一定保證包括獲取動(dòng)態(tài)參數(shù)财剖,獲取驗(yàn)證碼、最終模擬登陸都使用同一個(gè)opener癌淮。這也是登錄失敗的原因之一躺坟,因?yàn)閯傞_(kāi)始獲取_xsrf和驗(yàn)證碼時(shí)用的是urlopen()urllib標(biāo)準(zhǔn)庫(kù)并不很強(qiáng)大乳蓄,可以嘗試requests庫(kù)咪橙,會(huì)讓這個(gè)過(guò)程變得簡(jiǎn)單。

看下結(jié)果吧虚倒。如果顯示登錄成功美侦,可以訪問(wèn)以下個(gè)人資料的網(wǎng)址,這個(gè)如果登錄失敗了是不能查看的魂奥,會(huì)返回到登錄界面的網(wǎng)址菠剩。

個(gè)人資料網(wǎng)頁(yè)

好了,這次模擬登錄感覺(jué)與前兩次學(xué)習(xí)比起來(lái)難度加深了耻煤,好多問(wèn)題還得靠搜索才能解決具壮。加油吧。

這里貼上全部代碼哈蝇。

import re
from urllib import parse, request
import http.cookiejar
from PIL import Image
import time
import json

# 建立LWPCookieJar實(shí)例棺妓,可以存Set-Cookie3類型的文件。
# 而MozillaCookieJar類是存為'.txt'格式的文件
cookie = http.cookiejar.LWPCookieJar('cookie')
# 若本地有cookie則不用再post數(shù)據(jù)了
try:
    cookie.load(ignore_discard=True)
except IOError:
    print('Cookie未加載炮赦!')

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
                         '(KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36',
           "Host": "www.zhihu.com",
           "Referer": "https://www.zhihu.com/",
           }
opener = request.build_opener(request.HTTPCookieProcessor(cookie))
# 給openner添加headers, addheaders方法接受元組而非字典
opener.addheaders = [(key, value) for key, value in headers.items()]


def get_xsrf():
    """
    獲取參數(shù)_xsrf
    """
    response = opener.open('https://www.zhihu.com')
    html = response.read().decode('utf-8')
    get_xsrf_pattern = re.compile(r'<input type="hidden" name="_xsrf" value="(.*?)"')
    _xsrf = re.findall(get_xsrf_pattern, html)[0]
    return _xsrf


def get_captcha():
    """
    獲取驗(yàn)證碼本地顯示
    返回你輸入的驗(yàn)證碼
    """
    t = str(int(time.time() * 1000))
    captcha_url = 'http://www.zhihu.com/captcha.gif?r=' + t + "&type=login"
    # 獲取驗(yàn)證碼也用同一個(gè)opener
    image_data = opener.open(captcha_url).read()
    with open('cptcha.gif', 'wb') as f:
        f.write(image_data)
    im = Image.open('cptcha.gif')
    im.show()
    captcha = input('本次登錄需要輸入驗(yàn)證碼: ')
    return captcha


def login(username, password):
    """
    輸入自己的賬號(hào)密碼怜跑,模擬登錄知乎
    """
    # 檢測(cè)到11位數(shù)字則是手機(jī)登錄
    if re.match(r'\d{11}$', username):
        url = 'http://www.zhihu.com/login/phone_num'
        data = {'_xsrf': get_xsrf(),
                'password': password,
                'remember_me': 'true',
                'phone_num': username
                }
    else:
        url = 'https://www.zhihu.com/login/email'
        data = {'_xsrf': get_xsrf(),
                'password': password,
                'remember_me': 'true',
                'email': username
                }

    # 若不用驗(yàn)證碼,直接登錄
    post_data = parse.urlencode(data).encode('utf-8')
    r = opener.open(url, post_data)
    result = r.read().decode('utf-8')
    # 打印返回的響應(yīng)眼五,r = 1代表響應(yīng)失敗妆艘,msg里是失敗的原因
    # 要用驗(yàn)證碼,post后登錄
    if (json.loads(result))["r"] == 1:
        data['captcha'] = get_captcha()
        post_data = parse.urlencode(data).encode('utf-8')
        r = opener.open(url, post_data)
        result = r.read().decode('utf-8')
        print((json.loads(result))['msg'])
    # 保存cookie到本地
    cookie.save(ignore_discard=True, ignore_expires=True)


def isLogin():
    # 通過(guò)查看用戶個(gè)人信息來(lái)判斷是否已經(jīng)登錄
    url = 'https://www.zhihu.com/settings/profile'
    # 獲得真實(shí)網(wǎng)址看幼,可能重定向了
    actual_url = opener.open(url).geturl()
    if actual_url == 'https://www.zhihu.com/settings/profile':
        return True
    else:
        return False


if __name__ == '__main__':
    if isLogin():
        print('您已經(jīng)登錄')
    else:
        account = input('輸入賬號(hào):')
        secret = input('輸入密碼:')
        login(account, secret)

更新: 使用requests庫(kù)重寫程序

Date:2016.8.23

今天翻看了下requests的文檔批旺,學(xué)了點(diǎn)urllib庫(kù)再看這個(gè)不算很難。我用requests最基本的函數(shù)重新實(shí)現(xiàn)以上功能诵姜,當(dāng)然大部分代碼是重復(fù)的汽煮。

requests.get()類似urllib.request.urlopen()。如其名是以get方式請(qǐng)求的,接收url暇赤,字典形式的headers心例,timeoutallow_redirects等參數(shù)鞋囊,當(dāng)然還有requests.post()止后,可以傳入data參數(shù),不像urllib一樣需要對(duì)字典形式的data進(jìn)行編碼溜腐,requests它會(huì)自動(dòng)處理并且data可以傳入json數(shù)據(jù)译株。

allow_redirects這是參數(shù)可選TrueFalse挺益,默認(rèn)True歉糜,若選False則表示禁止重定向,按我的理解即禁止自動(dòng)跳轉(zhuǎn)望众。

看下兩個(gè)庫(kù)的區(qū)別匪补,返回來(lái)的response可選textcontent,其中text以文本形式返回烂翰,content以二進(jìn)制數(shù)據(jù)形式返回夯缺,比如我們請(qǐng)求的網(wǎng)址是圖片,就返回content刽酱,便可以以wb方式寫入文件了喳逛∏瓢疲看下這兩個(gè)庫(kù)在實(shí)現(xiàn)返回網(wǎng)頁(yè)內(nèi)容的區(qū)別棵里。對(duì)了返回的對(duì)象如response還有一個(gè)屬性是status_code訪問(wèn)成功了當(dāng)然就返回的200啦。

# requests返回html內(nèi)容
response = requests.get('https://www.zhihu.com', headers=headers)
    html = response.text
# urllib返回html內(nèi)容
req = urllib.request.Request(url)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')

然后就是requests.Session()或者requests.session()姐呐,兩種寫法都可以殿怜。類型都是一個(gè)class 'requests.sessions.Session',看下源碼其實(shí)session返回的就是一個(gè)Session對(duì)象曙砂。requests.Session()會(huì)新建一個(gè)會(huì)話头谜,可以把同一用戶的不同請(qǐng)求聯(lián)系起來(lái),直到會(huì)話結(jié)束都會(huì)自動(dòng)處理cookies鸠澈,這比urllib方便多了柱告。如果只使用requests.get()或者requests.post()每次訪問(wèn)網(wǎng)頁(yè)都是獨(dú)立進(jìn)行的,并沒(méi)有把當(dāng)前用戶的多次訪問(wèn)關(guān)聯(lián)起來(lái)笑陈,故而模擬登錄需要用到requests.Session()际度。然后再用新建的session使用post()get()等函數(shù)涵妥。如下乖菱。

session = requests.Session()
session.get(url, headers)
session.post(url, headers, data)

這只是requests的冰山一角!它強(qiáng)大著呢。號(hào)稱是HTTP FOR HUMAN窒所。不過(guò)掌握以上基本的東西鹉勒,足夠重寫模擬登錄知乎的程序。進(jìn)一步學(xué)習(xí)請(qǐng)看requests文檔吵取,那里有詳細(xì)介紹禽额。

再放requests版本的。

import re
import requests
import http.cookiejar
from PIL import Image
import time
import json

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
                         '(KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36',
           "Host": "www.zhihu.com",
           "Referer": "https://www.zhihu.com/",
           }
# 建立一個(gè)會(huì)話皮官,可以把同一用戶的不同請(qǐng)求聯(lián)系起來(lái)绵疲;直到會(huì)話結(jié)束都會(huì)自動(dòng)處理cookies
session = requests.Session()
# 建立LWPCookieJar實(shí)例,可以存Set-Cookie3類型的文件臣疑。
# 而MozillaCookieJar類是存為'/.txt'格式的文件
session.cookies = http.cookiejar.LWPCookieJar("cookie")
# 若本地有cookie則不用再post數(shù)據(jù)了
try:
    session.cookies.load(ignore_discard=True)
except IOError:
    print('Cookie未加載盔憨!')


def get_xsrf():
    """
    獲取參數(shù)_xsrf
    """
    response = session.get('https://www.zhihu.com', headers=headers)
    html = response.text
    get_xsrf_pattern = re.compile(r'<input type="hidden" name="_xsrf" value="(.*?)"')
    _xsrf = re.findall(get_xsrf_pattern, html)[0]
    return _xsrf


def get_captcha():
    """
    獲取驗(yàn)證碼本地顯示
    返回你輸入的驗(yàn)證碼
    """
    t = str(int(time.time() * 1000))
    captcha_url = 'http://www.zhihu.com/captcha.gif?r=' + t + "&type=login"
    response = session.get(captcha_url, headers=headers)
    with open('cptcha.gif', 'wb') as f:
        f.write(response.content)
    # Pillow顯示驗(yàn)證碼
    im = Image.open('cptcha.gif')
    im.show()
    captcha = input('本次登錄需要輸入驗(yàn)證碼: ')
    return captcha


def login(username, password):
    """
    輸入自己的賬號(hào)密碼,模擬登錄知乎
    """
    # 檢測(cè)到11位數(shù)字則是手機(jī)登錄
    if re.match(r'\d{11}$', username):
        url = 'http://www.zhihu.com/login/phone_num'
        data = {'_xsrf': get_xsrf(),
                'password': password,
                'remember_me': 'true',
                'phone_num': username
                }
    else:
        url = 'https://www.zhihu.com/login/email'
        data = {'_xsrf': get_xsrf(),
                'password': password,
                'remember_me': 'true',
                'email': username
                }
    # 若不用驗(yàn)證碼讯沈,直接登錄
    result = session.post(url, data=data, headers=headers)
    # 打印返回的響應(yīng)郁岩,r = 1代表響應(yīng)失敗,msg里是失敗的原因
    # loads可以反序列化內(nèi)置數(shù)據(jù)類型缺狠,而load可以從文件讀取
    if (json.loads(result.text))["r"] == 1:
        # 要用驗(yàn)證碼问慎,post后登錄
        data['captcha'] = get_captcha()
        result = session.post(url, data=data, headers=headers)
        print((json.loads(result.text))['msg'])
        # 保存cookie到本地
    session.cookies.save(ignore_discard=True, ignore_expires=True)


def isLogin():
    # 通過(guò)查看用戶個(gè)人信息來(lái)判斷是否已經(jīng)登錄
    url = "https://www.zhihu.com/settings/profile"
    # 禁止重定向,否則登錄失敗重定向到首頁(yè)也是響應(yīng)200
    login_code = session.get(url, headers=headers, allow_redirects=False).status_code
    if login_code == 200:
        return True
    else:
        return False


if __name__ == '__main__':
    if isLogin():
        print('您已經(jīng)登錄')
    else:
        account = input('輸入賬號(hào):')
        secret = input('輸入密碼:')
        login(account, secret)

以上使用到的瀏覽器UA都是電腦端的挤茄,現(xiàn)在知乎出了倒立文字驗(yàn)證碼如叼。如果因此而導(dǎo)致登錄失敗,可以將瀏覽器UA改成Android端或者IOS端穷劈。


by sunhaiyu

2016.8.21

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笼恰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歇终,更是在濱河造成了極大的恐慌社证,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件评凝,死亡現(xiàn)場(chǎng)離奇詭異追葡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奕短,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宜肉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翎碑,你說(shuō)我怎么就攤上這事谬返。” “怎么了杈女?”我有些...
    開(kāi)封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵朱浴,是天一觀的道長(zhǎng)吊圾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)翰蠢,這世上最難降的妖魔是什么项乒? 我笑而不...
    開(kāi)封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮梁沧,結(jié)果婚禮上檀何,老公的妹妹穿的比我還像新娘。我一直安慰自己廷支,他們只是感情好频鉴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著恋拍,像睡著了一般垛孔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上施敢,一...
    開(kāi)封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天周荐,我揣著相機(jī)與錄音,去河邊找鬼僵娃。 笑死概作,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的默怨。 我是一名探鬼主播讯榕,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匙睹!你這毒婦竟也來(lái)了愚屁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤垃僚,失蹤者是張志新(化名)和其女友劉穎集绰,沒(méi)想到半個(gè)月后规辱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谆棺,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年罕袋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了改淑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浴讯,死狀恐怖朵夏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榆纽,我是刑警寧澤仰猖,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布捏肢,位于F島的核電站,受9級(jí)特大地震影響饥侵,放射性物質(zhì)發(fā)生泄漏鸵赫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一躏升、第九天 我趴在偏房一處隱蔽的房頂上張望辩棒。 院中可真熱鬧,春花似錦膨疏、人聲如沸一睁。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)者吁。三九已至,卻和暖如春饲帅,著一層夾襖步出監(jiān)牢的瞬間砚偶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工洒闸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留染坯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓丘逸,卻偏偏與公主長(zhǎng)得像单鹿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子深纲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容