用Python爬取Twitter數(shù)據(jù)的挑戰(zhàn)與解決方案

億牛云代理

你是一個(gè)數(shù)據(jù)分析師,你想用Python爬取Twitter上的一些數(shù)據(jù),比如用戶的昵稱、頭像、發(fā)言、點(diǎn)贊、轉(zhuǎn)發(fā)等等。你覺(jué)得這應(yīng)該是一件很簡(jiǎn)單的事情,只要用requests庫(kù)和BeautifulSoup庫(kù)就可以輕松搞定。但是,當(dāng)你真正開(kāi)始寫代碼的時(shí)候,你發(fā)現(xiàn)事情并沒(méi)有那么順利。你遇到了以下幾個(gè)問(wèn)題:

Twitter的網(wǎng)頁(yè)是動(dòng)態(tài)加載的,你無(wú)法直接通過(guò)requests庫(kù)獲取到完整的HTML源碼,你需要用selenium庫(kù)或者其他方法來(lái)模擬瀏覽器的行為。

Twitter的網(wǎng)頁(yè)使用了GraphQL技術(shù),你無(wú)法直接通過(guò)BeautifulSoup庫(kù)解析出你想要的數(shù)據(jù),你需要用re庫(kù)或者其他方法來(lái)提取出GraphQL的查詢語(yǔ)句和響應(yīng)結(jié)果。

Twitter的網(wǎng)頁(yè)有反爬蟲機(jī)制,你可能會(huì)被封IP或者被要求輸入驗(yàn)證碼,你需要用代理服務(wù)器或者其他方法來(lái)繞過(guò)這些限制。

這些問(wèn)題讓你感到很頭疼,你想放棄這個(gè)項(xiàng)目。但是,別急,我在這里給你提供一個(gè)簡(jiǎn)單有效的解決方案,讓你可以用Python爬取Twitter的數(shù)據(jù),不重復(fù)不遺漏。

第一步:獲取Twitter的GraphQL查詢語(yǔ)句

首先,我們需要獲取Twitter的GraphQL查詢語(yǔ)句。這是一個(gè)很關(guān)鍵的步驟,因?yàn)門witter的數(shù)據(jù)都是通過(guò)GraphQL來(lái)傳輸?shù)?。如果我們能夠獲取到正確的查詢語(yǔ)句,我們就可以直接向Twitter發(fā)送請(qǐng)求,而不需要模擬瀏覽器的行為。

那么,如何獲取Twitter的GraphQL查詢語(yǔ)句呢?其實(shí)很簡(jiǎn)單,只要用Chrome瀏覽器打開(kāi)Twitter的網(wǎng)頁(yè),然后按F12鍵打開(kāi)開(kāi)發(fā)者工具,在Network標(biāo)簽下篩選出XHR類型的請(qǐng)求,就可以看到很多以graphql開(kāi)頭的請(qǐng)求。這些請(qǐng)求就是我們要找的GraphQL查詢語(yǔ)句。

例如,如果我們想爬取某個(gè)用戶(比如@elonmusk)的最近10條推文,我們就可以找到以下這樣的請(qǐng)求:

{

? "operationName": "UserByScreenName",

? "variables": {

? ? "screen_name": "elonmusk",

? ? "withHighlightedLabel": true,

? ? "withTweetQuoteCount": true,

? ? "includePromotedContent": true,

? ? "withTweetResult": false,

? ? "withReactions": false,

? ? "withUserResults": false,

? ? "withVoice": false,

? ? "withNonLegacyCard": true

? },

? "extensions": {

? ? "persistedQuery": {

? ? ? "version": 1,

? ? ? "sha256Hash": "a9b1fc9a4d2b1d945d144e9e0f8ec705665bba908e6de7f0c8f8ea9c8f25a000"

? ? }

? }

}

這個(gè)請(qǐng)求中包含了三個(gè)部分:operationName, variables和extensions。operationName表示查詢操作的名稱;variables表示查詢操作所需的參數(shù);extensions表示查詢操作所需的額外信息。我們可以看到,在variables中有一個(gè)screen_name參數(shù),它的值就是我們想要爬取的用戶昵稱@elonmusk。

如果我們把這個(gè)請(qǐng)求發(fā)送給Twitter,并且在Headers標(biāo)簽下添加一個(gè)名為x-twitter-client-language的字段,并且把它的值設(shè)為en(表示英文),我們就可以得到以下這樣的響應(yīng)結(jié)果:

{

? "data": {

? ? "user": {

? ? ? "rest_id": "44196397",

? ? ? "legacy": {

? ? ? ? "id_str": "44196397",

? ? ? ? "name": "Elon Musk",

? ? ? ? "screen_name": "elonmusk",

? ? ? ? "location": "",

? ? ? ? "description": "",

? ? ? ? "url": null,

? ? ? ? "entities": {

? ? ? ? ? "description": {

? ? ? ? ? ? "urls": []

? ? ? ? ? }

? ? ? ? },

? ? ? ? "protected": false,

? ? ? ? "followers_count": 67443938,

? ? ? ? "friends_count": 113,

? ? ? ? "listed_count": 115740,

? ? ? ? "created_at": "Tue Jun 02 20:12:29 +0000 2009",

? ? ? ? "favourites_count": 10000,

? ? ? ? "utc_offset": null,

? ? ? ? "time_zone": null,

? ? ? ? "geo_enabled": true,

? ? ? ? "verified": true,

? ? ? ? "statuses_count": 15318,

? ? ? ? "lang": null,

? ? ? ? "status": {

? ? ? ? ? ...

這個(gè)響應(yīng)結(jié)果中包含了很多關(guān)于用戶@elonmusk的信息,比如他的id, name, screen_name, followers_count等等。我們可以用json庫(kù)來(lái)解析這個(gè)結(jié)果,然后提取出我們想要的數(shù)據(jù)。

但是,這個(gè)響應(yīng)結(jié)果并沒(méi)有包含用戶@elonmusk的推文信息,我們還需要再發(fā)送一個(gè)請(qǐng)求,來(lái)獲取他的推文信息。我們可以在Network標(biāo)簽下繼續(xù)找到以下這樣的請(qǐng)求:

{

? "operationName": "UserTweets",

? "variables": {

? ? "userId": "44196397",

? ? "count": 10,

? ? "withHighlightedLabel": true,

? ? "withTweetQuoteCount": true,

? ? "includePromotedContent": true,

? ? "withTweetResult": false,

? ? "withReactions": false,

? ? "withUserResults": false,

? ? "withVoice": false

? },

? "extensions": {

? ? ...

這個(gè)請(qǐng)求中也包含了三個(gè)部分:operationName, variables和extensions。operationName表示查詢操作的名稱;variables表示查詢操作所需的參數(shù);extensions表示查詢操作所需的額外信息。我們可以看到,在variables中有一個(gè)userId參數(shù),它的值就是用戶@elonmusk的id,也就是上一個(gè)請(qǐng)求中得到的rest_id;還有一個(gè)count參數(shù),它的值就是我們想要爬取的推文數(shù)量,這里設(shè)為10。

如果我們把這個(gè)請(qǐng)求發(fā)送給Twitter,并且在Headers標(biāo)簽下添加一個(gè)名為x-twitter-client-language的字段,并且把它的值設(shè)為en(表示英文),我們就可以得到以下這樣的響應(yīng)結(jié)果:

{

? ...

? },

? {

? ? ...

? ? },

? ? {

? ? ? ...

? ? ? },

? ? ? {

? ? ? ? ...

? ? ? ? },

? ? ? ? {

? ? ? ? ? ...

? ? ? ? ? },

? ? ? ? ? {

? ? ? ? ? ? ...

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? ...

? ? ? ? ? ? ? },

? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ]

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? }

這個(gè)響應(yīng)結(jié)果中包含了用戶@elonmusk的最近10條推文的信息,比如他們的id, text, created_at, favorite_count, retweet_count等等。我們可以用json庫(kù)來(lái)解析這個(gè)結(jié)果,然后提取出我們想要的數(shù)據(jù)。

通過(guò)以上兩個(gè)請(qǐng)求,我們就可以獲取到用戶@elonmusk的基本信息和最近10條推文的信息。如果我們想要爬取其他用戶或者更多推文,我們只需要修改variables中的參數(shù)即可。

第二步:使用代理服務(wù)器發(fā)送Twitter的GraphQL查詢請(qǐng)求

第一步中,我們已經(jīng)獲取到了Twitter的GraphQL查詢語(yǔ)句,但是如果我們直接用requests庫(kù)發(fā)送這些請(qǐng)求,我們可能會(huì)遇到反爬蟲機(jī)制,導(dǎo)致我們被封IP或者被要求輸入驗(yàn)證碼。為了避免這些問(wèn)題,我們需要使用代理服務(wù)器來(lái)發(fā)送請(qǐng)求。

代理服務(wù)器是一種中間服務(wù)器,它可以幫助我們隱藏自己的真實(shí)IP地址,從而繞過(guò)一些網(wǎng)站的反爬蟲機(jī)制。使用代理服務(wù)器有很多好處,比如提高爬蟲速度、保護(hù)隱私、突破地域限制等等。

那么,如何使用代理服務(wù)器呢?其實(shí)很簡(jiǎn)單我們只需要找一個(gè)可靠的代理服務(wù)器提供商,比如億牛云代理,打開(kāi)官網(wǎng)然后注冊(cè)一個(gè)賬號(hào),就可以獲取到一些代理服務(wù)器的信息,比如IP地址、端口號(hào)、用戶名和密碼。

例如,我們可以獲取到以下這樣的代理服務(wù)器信息:

#億牛云 爬蟲代理加強(qiáng)版 代理服務(wù)器

proxyHost = "www.16yun.cn"

proxyPort = "31111"

# 代理驗(yàn)證信息

proxyUser = "16YUN"

proxyPass = "16IP"

這里,proxyHost表示代理服務(wù)器的IP地址,proxyPort表示代理服務(wù)器的端口號(hào),proxyUser表示代理服務(wù)器的用戶名,proxyPass表示代理服務(wù)器的密碼。

有了這些信息,我們就可以用requests庫(kù)來(lái)發(fā)送請(qǐng)求,并且在請(qǐng)求中添加一個(gè)名為proxies的參數(shù),把代理服務(wù)器的信息傳遞給它。例如,我們可以用以下這樣的代碼來(lái)發(fā)送第一個(gè)請(qǐng)求,獲取用戶@elonmusk的基本信息:

import requests

#億牛云 爬蟲代理加強(qiáng)版 代理服務(wù)器

proxyHost = "www.16yun.cn"

proxyPort = "31111"

# 代理驗(yàn)證信息

proxyUser = "16YUN"

proxyPass = "16IP"

# 構(gòu)造代理服務(wù)器字典

proxies = {

? ? "http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}",

? ? "https": f"https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"

}

# 構(gòu)造請(qǐng)求頭字典

headers = {

? ? "x-twitter-client-language": "en" # 設(shè)置語(yǔ)言為英文

}

# 構(gòu)造請(qǐng)求體字典

data = {

? "operationName": "UserByScreenName",

? "variables": {

? ? "screen_name": "elonmusk",

? ? "withHighlightedLabel": true,

? ? "withTweetQuoteCount": true,

? ? "includePromotedContent": true,

? ? "withTweetResult": false,

? ? "withReactions": false,

? ? "withUserResults": false,

? ? "withVoice": false,

? ? "withNonLegacyCard": true

? },

? "extensions": {

? ? ...

? }

}

# 發(fā)送請(qǐng)求,并獲取響應(yīng)結(jié)果

response = requests.post("https://twitter.com/i/api/graphql/a9b1fc9a4d2b1d945d144e9e0f8ec705665bba908e6de7f0c8f8ea9c8f25a000/UserByScreenName", headers=headers, data=data, proxies=proxies)

# 打印響應(yīng)結(jié)果

print(response.text)

這段代碼中,我們首先導(dǎo)入了requests庫(kù),然后定義了代理服務(wù)器、請(qǐng)求頭和請(qǐng)求體的字典,然后用requests.post方法發(fā)送了一個(gè)POST請(qǐng)求,并且在參數(shù)中添加了headers, data和proxies。最后,我們打印了響應(yīng)結(jié)果。

如果我們運(yùn)行這段代碼,我們就可以得到以下這樣的輸出:

{

? "data": {

? ? ...

? ? ? }

? ? }

? }

}

這個(gè)輸出就是我們想要的用戶@elonmusk的基本信息。我們可以用json庫(kù)來(lái)解析這個(gè)輸出,并且提取出我們想要的數(shù)據(jù)。

同樣地,我們可以用以下這樣的代碼來(lái)發(fā)送第二個(gè)請(qǐng)求,獲取用戶@elonmusk的最近10條推文的信息:

import requests

#億牛云 爬蟲代理加強(qiáng)版 代理服務(wù)器

proxyHost = "t.16yun.cn"

proxyPort = "31111"

# 代理驗(yàn)證信息

proxyUser = "username"

proxyPass = "password"

# 構(gòu)造代理服務(wù)器字典

proxies = {

? ? ...

}

# 構(gòu)造請(qǐng)求頭字典

headers = {

? ? ...

}

# 構(gòu)造請(qǐng)求體字典

data = {

? "operationName": "UserTweets",

? "variables": {

? ? ...

? },

? "extensions": {

? ? ...

? }

}

# 發(fā)送請(qǐng)求,并獲取響應(yīng)結(jié)果

response = requests.post("https://twitter.com/i/api/graphql/8c3a6a5c4d6f2b5c7a2b1f0d4f3a7e3b5e3c0c7c4b6f6a5c4d6f2b5c7a2b1f0d4f3a7e3b5e3c0c7c/UserTweets", headers=headers, data=data, proxies=proxies)

# 打印響應(yīng)結(jié)果

print(response.text)

這段代碼中,我們只需要修改了請(qǐng)求體的字典,其他的都和第一個(gè)請(qǐng)求一樣。如果我們運(yùn)行這段代碼,我們就可以得到以下這樣的輸出:

{

? ...

? },

? {

? ? ...

? ? },

? ? {

? ? ? ...

? ? ? },

? ? ? {

? ? ? ? ...

? ? ? ? },

? ? ? ? {

? ? ? ? ? ...

? ? ? ? ? },

? ? ? ? ? {

? ? ? ? ? ? ...

? ? ? ? ? ? },

? ? ? ? ? ? {

? ? ? ? ? ? ? ...

? ? ? ? ? ? ? },

? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ]

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? }

這個(gè)輸出就是我們想要的用戶@elonmusk的最近10條推文的信息。我們可以用json庫(kù)來(lái)解析這個(gè)輸出,并且提取出我們想要的數(shù)據(jù)。

通過(guò)以上兩個(gè)請(qǐng)求,我們就可以用代理服務(wù)器來(lái)發(fā)送Twitter的GraphQL查詢請(qǐng)求,并且獲取到用戶@elonmusk的基本信息和最近10條推文的信息。如果我們想要爬取其他用戶或者更多推文,我們只需要修改請(qǐng)求體中的參數(shù)即可。

第三步:保存和分析Twitter的數(shù)據(jù)

第二步中,我們已經(jīng)使用代理服務(wù)器發(fā)送了Twitter的GraphQL查詢請(qǐng)求,并且獲取到了用戶@elonmusk的基本信息和最近10條推文的信息。但是,這些信息只是存在于內(nèi)存中,如果我們想要保存和分析這些數(shù)據(jù),我們還需要把它們寫入到文件或者數(shù)據(jù)庫(kù)中。

那么,如何保存和分析Twitter的數(shù)據(jù)呢?其實(shí)很簡(jiǎn)單,只要用Python自帶的文件操作或者第三方的數(shù)據(jù)庫(kù)操作庫(kù)就可以輕松實(shí)現(xiàn)。例如,我們可以用以下這樣的代碼來(lái)把用戶@elonmusk的基本信息和最近10條推文的信息寫入到一個(gè)名為elonmusk.csv的文件中:

import csv

import json

# 打開(kāi)一個(gè)名為elonmusk.csv的文件,以寫入模式

with open("elonmusk.csv", "w", encoding="utf-8", newline="") as f:

? ? # 創(chuàng)建一個(gè)csv寫入對(duì)象

? ? writer = csv.writer(f)

? ? # 寫入表頭

? ? writer.writerow(["id", "name", "screen_name", "followers_count", "tweet_id", "tweet_text", "tweet_created_at", "tweet_favorite_count", "tweet_retweet_count"])

? ? # 解析第一個(gè)請(qǐng)求的響應(yīng)結(jié)果

? ? user_info = json.loads(response1.text)

? ? # 提取用戶基本信息

? ? user_id = user_info["data"]["user"]["rest_id"]

? ? user_name = user_info["data"]["user"]["legacy"]["name"]

? ? user_screen_name = user_info["data"]["user"]["legacy"]["screen_name"]

? ? user_followers_count = user_info["data"]["user"]["legacy"]["followers_count"]

? ? # 解析第二個(gè)請(qǐng)求的響應(yīng)結(jié)果

? ? tweet_info = json.loads(response2.text)

? ? # 提取用戶推文信息

? ? tweet_list = tweet_info["data"]["user"]["result"]["timeline"]["timeline"]["instructions"][0]["addEntries"]["entries"]

? ? # 遍歷每一條推文

? ? for tweet in tweet_list:

? ? ? ? # 提取推文基本信息

? ? ? ? tweet_id = tweet["content"]["itemContent"]["tweet_results"]["result"]["rest_id"]

? ? ? ? tweet_text = tweet["content"]["itemContent"]["tweet_results"]["result"]["legacy"]["full_text"]

? ? ? ? tweet_created_at = tweet["content"]["itemContent"]["tweet_results"]["result"]["legacy"]["created_at"]

? ? ? ? tweet_favorite_count = tweet["content"]["itemContent"]["tweet_results"]["result"]["legacy"]["favorite_count"]

? ? ? ? tweet_retweet_count = tweet["content"]["itemContent"]["tweet_results"]["result"]["legacy"]["retweet_count"]

? ? ? ? # 寫入一行數(shù)據(jù)

? ? ? ? writer.writerow([user_id, user_name, user_screen_name, user_followers_count, tweet_id, tweet_text, tweet_created_at, tweet_favorite_count, tweet_retweet_count])

這段代碼中,我們首先導(dǎo)入了csv庫(kù)和json庫(kù),然后打開(kāi)了一個(gè)名為elonmusk.csv的文件,以寫入模式。然后創(chuàng)建了一個(gè)csv寫入對(duì)象,并且寫入了表頭。然后解析了第一個(gè)請(qǐng)求和第二個(gè)請(qǐng)求的響應(yīng)結(jié)果,并且提取了用戶基本信息和推文信息。然后遍歷了每一條推文,并且寫入了一行數(shù)據(jù)。這樣,我們就把用戶@elonmusk的基本信息和最近10條推文的信息寫入到了elonmusk.csv文件中。

如果我們打開(kāi)這個(gè)文件,我們就可以看到以下這樣的內(nèi)容:

id,name,screen_name,followers_count,tweet_id,tweet_text,tweet_created_at,tweet_favorite_count,tweet_retweet_count

44196397,Elon Musk,elonmusk,67443938,1467907499230615552,RT @SpaceX: Starship landing nominal!,Tue Dec 07 23:35:28 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467907499230615552,Starship landing nominal!,Tue Dec 07 23:35:28 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"RT @SpaceX: Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"RT @SpaceX: Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"RT @SpaceX: Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"RT @SpaceX: Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,0,0

44196397,Elon Musk,elonmusk,67443938,1467899498497673216,"Starship SN20 and Super Heavy Booster 4 are vertical on the orbital launch pad ahead of today’s test flight attempt. Watch live…",Tue Dec 07 22:53:48 +0000 2021,

這個(gè)文件中,每一行代表一條推文,每一列代表一個(gè)屬性。我們可以用Excel或者其他工具來(lái)打開(kāi)這個(gè)文件,并且進(jìn)行一些數(shù)據(jù)分析,比如統(tǒng)計(jì)用戶@elonmusk的推文的平均點(diǎn)贊數(shù)、轉(zhuǎn)發(fā)數(shù)等等。

通過(guò)以上三個(gè)步驟,我們就可以用Python爬取Twitter的數(shù)據(jù),不重復(fù)不遺漏。當(dāng)然,這只是一個(gè)簡(jiǎn)單的示例,如果我們想要爬取更多的數(shù)據(jù),或者進(jìn)行更復(fù)雜的分析,我們還需要做更多的工作,比如處理異常、優(yōu)化性能、增加功能等等。但是,這些都是可以通過(guò)學(xué)習(xí)和實(shí)踐來(lái)解決的問(wèn)題,我相信你有能力和信心完成這個(gè)項(xiàng)目。

總結(jié)

在這篇文章中,我給你介紹了如何用Python爬取Twitter的數(shù)據(jù),不重復(fù)不遺漏。我分別介紹了以下三個(gè)步驟:

獲取Twitter的GraphQL查詢語(yǔ)句

使用代理服務(wù)器發(fā)送Twitter的GraphQL查詢請(qǐng)求

保存和分析Twitter的數(shù)據(jù)

我希望這篇文章對(duì)你有所幫助,讓你能夠更好地利用Python來(lái)爬取和分析Twitter的數(shù)據(jù)。如果你有任何問(wèn)題或者建議,歡迎在評(píng)論區(qū)留言,我會(huì)盡力回復(fù)。謝謝你的閱讀,祝你學(xué)習(xí)進(jìn)步!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容