python 爬虫 微博 github_GitHub - Joria0414/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
Weibo Spider
本程序可以連續(xù)爬取一個(gè)或多個(gè)新浪微博用戶(如胡歌、迪麗熱巴、郭碧婷)的數(shù)據(jù),并將結(jié)果信息寫入文件或數(shù)據(jù)庫(kù)。寫入信息幾乎包括用戶微博的所有數(shù)據(jù),包括用戶信息和微博信息兩大類。因?yàn)閮?nèi)容太多,這里不再贅述,詳細(xì)內(nèi)容見獲取到的字段。如果只需要用戶信息,可以通過設(shè)置實(shí)現(xiàn)只爬取微博用戶信息的功能。本程序需設(shè)置cookie來(lái)獲取微博訪問權(quán)限,后面會(huì)講解如何獲取cookie。如果不想設(shè)置cookie,可以使用免cookie版,二者功能類似。
具體的寫入文件類型如下:
寫入txt文件(默認(rèn))
寫入csv文件(默認(rèn))
寫入json文件(可選)
寫入MySQL數(shù)據(jù)庫(kù)(可選)
寫入MongoDB數(shù)據(jù)庫(kù)(可選)
寫入SQLite數(shù)據(jù)庫(kù)(可選)
下載用戶原創(chuàng)微博中的原始圖片(可選)
下載用戶轉(zhuǎn)發(fā)微博中的原始圖片(免cookie版特有)
下載用戶原創(chuàng)微博中的視頻(可選)
下載用戶轉(zhuǎn)發(fā)微博中的視頻(免cookie版特有)
下載用戶原創(chuàng)微博Live Photo中的視頻(免cookie版特有)
下載用戶轉(zhuǎn)發(fā)微博Live Photo中的視頻(免cookie版特有)
內(nèi)容列表
獲取到的字段
本部分為爬取到的字段信息說(shuō)明,為了與免cookie版區(qū)分,下面將兩者爬取到的信息都列出來(lái)。如果是免cookie版所特有的信息,會(huì)有免cookie標(biāo)注,沒有標(biāo)注的為二者共有的信息。
用戶信息
用戶id:微博用戶id,如"1669879400",其實(shí)這個(gè)字段本來(lái)就是已知字段
昵稱:用戶昵稱,如"Dear-迪麗熱巴"
性別:微博用戶性別
生日:用戶出生日期
所在地:用戶所在地
學(xué)習(xí)經(jīng)歷:用戶上學(xué)時(shí)學(xué)校的名字和時(shí)間
工作經(jīng)歷:用戶所屬公司名字和時(shí)間
陽(yáng)光信用(免cookie版):用戶的陽(yáng)光信用
微博注冊(cè)時(shí)間(免cookie版):用戶微博注冊(cè)日期
微博數(shù):用戶的全部微博數(shù)(轉(zhuǎn)發(fā)微博+原創(chuàng)微博)
關(guān)注數(shù):用戶關(guān)注的微博數(shù)量
粉絲數(shù):用戶的粉絲數(shù)
簡(jiǎn)介:用戶簡(jiǎn)介
主頁(yè)地址(免cookie版):微博移動(dòng)版主頁(yè)url
頭像url(免cookie版):用戶頭像url
高清頭像url(免cookie版):用戶高清頭像url
微博等級(jí)(免cookie版):用戶微博等級(jí)
會(huì)員等級(jí)(免cookie版):微博會(huì)員用戶等級(jí),普通用戶該等級(jí)為0
是否認(rèn)證(免cookie版):用戶是否認(rèn)證,為布爾類型
認(rèn)證類型(免cookie版):用戶認(rèn)證類型,如個(gè)人認(rèn)證、企業(yè)認(rèn)證、政府認(rèn)證等
認(rèn)證信息:為認(rèn)證用戶特有,用戶信息欄顯示的認(rèn)證信息
微博信息
微博id:微博唯一標(biāo)志
微博內(nèi)容:微博正文
頭條文章url:微博中頭條文章的url,若微博中不存在頭條文章,則值為''
原始圖片url:原創(chuàng)微博圖片和轉(zhuǎn)發(fā)微博轉(zhuǎn)發(fā)理由中圖片的url,若某條微博存在多張圖片,每個(gè)url以英文逗號(hào)分隔,若沒有圖片則值為"無(wú)"
視頻url: 微博中的視頻url,若微博中沒有視頻,則值為"無(wú)"
微博發(fā)布位置:位置微博中的發(fā)布位置
微博發(fā)布時(shí)間:微博發(fā)布時(shí)的時(shí)間,精確到分
點(diǎn)贊數(shù):微博被贊的數(shù)量
轉(zhuǎn)發(fā)數(shù):微博被轉(zhuǎn)發(fā)的數(shù)量
評(píng)論數(shù):微博被評(píng)論的數(shù)量
微博發(fā)布工具:微博的發(fā)布工具,如iPhone客戶端、HUAWEI Mate 20 Pro等
結(jié)果文件:保存在當(dāng)前目錄weibo文件夾下以用戶昵稱為名的文件夾里,名字為"user_id.csv"和"user_id.txt"的形式
微博圖片:原創(chuàng)微博中的圖片和轉(zhuǎn)發(fā)微博轉(zhuǎn)發(fā)理由中的圖片,保存在以用戶昵稱為名的文件夾下的img文件夾里
微博視頻:原創(chuàng)微博中的視頻,保存在以用戶昵稱為名的文件夾下的video文件夾里
微博bid(免cookie版):為免cookie版所特有,與本程序中的微博id是同一個(gè)值
話題(免cookie版):微博話題,即兩個(gè)#中的內(nèi)容,若存在多個(gè)話題,每個(gè)url以英文逗號(hào)分隔,若沒有則值為''
@用戶(免cookie版):微博@的用戶,若存在多個(gè)@用戶,每個(gè)url以英文逗號(hào)分隔,若沒有則值為''
原始微博(免cookie版):為轉(zhuǎn)發(fā)微博所特有,是轉(zhuǎn)發(fā)微博中那條被轉(zhuǎn)發(fā)的微博,存儲(chǔ)為字典形式,包含了上述微博信息中的所有內(nèi)容,如微博id、微博內(nèi)容等等
示例
如果想要知道程序的具體運(yùn)行結(jié)果,可以查看示例文檔,該文檔介紹了爬取迪麗熱巴微博的例子,并附有部分結(jié)果文件截圖。
運(yùn)行環(huán)境
開發(fā)語(yǔ)言:python2/python3
系統(tǒng): Windows/Linux/macOS
使用說(shuō)明
0.版本
本程序有兩個(gè)版本,你現(xiàn)在看到的是python3版,另一個(gè)是python2版,python2版位于python2分支。目前主力開發(fā)python3版,包括新功能開發(fā)和bug修復(fù);python2版僅支持bug修復(fù)。推薦python3用戶使用當(dāng)前版本,推薦python2用戶使用python2版,本使用說(shuō)明是python3版的使用說(shuō)明。
1.安裝程序
本程序提供兩種安裝方式,一種是源碼安裝,另一種是pip安裝,二者功能完全相同。如果你需要修改源碼,建議使用第一種方式,否則選哪種安裝方式都可以。
源碼安裝
$ git clone https://github.com/dataabc/weiboSpider.git
$ cd weiboSpider
$ pip install -r requirements.txt
pip安裝
$ python3 -m pip install weibo-spider
2.程序設(shè)置
要了解程序設(shè)置,請(qǐng)查看程序設(shè)置文檔。
3.運(yùn)行程序
源碼安裝的用戶可以在weiboSpider目錄運(yùn)行如下命令,pip安裝的用戶可以在任意有寫權(quán)限的目錄運(yùn)行如下命令
$ python3 -m weibo_spider
第一次執(zhí)行,會(huì)自動(dòng)在當(dāng)前目錄創(chuàng)建config.json配置文件,配置好后執(zhí)行同樣的命令就可以獲取微博了。
如果你已經(jīng)有config.json文件了,也可以通過config_path參數(shù)配置config.json路徑,運(yùn)行程序,命令行如下:
$ python3 -m weibo_spider --config_path="config.json"
如果你想指定文件(csv、txt、json、圖片、視頻)保存路徑,可以通過output_dir參數(shù)設(shè)定。假如你想把文件保存到/home/weibo/目錄,可以運(yùn)行如下命令:
$ python3 -m weibo_spider --output_dir="/home/weibo/"
如果你想通過命令行輸入user_id,可以使用參數(shù)u,可以輸入一個(gè)或多個(gè)user_id,每個(gè)user_id以英文逗號(hào)分開,如果這些user_id中有重復(fù)的user_id,程序會(huì)自動(dòng)去重。命令行如下:
$ python3 -m weibo_spider --u="1669879400,1223178222"
程序會(huì)獲取user_id分別為1669879400和1223178222的微博用戶的微博,后面會(huì)講如何獲取user_id。該方式的所有user_id使用config.json中的since_date和end_date設(shè)置,通過修改它們的值可以控制爬取的時(shí)間范圍。若config.json中的user_id_list是文件路徑,每個(gè)命令行中的user_id都會(huì)自動(dòng)保存到該文件內(nèi),且自動(dòng)更新since_date;若不是路徑,user_id會(huì)保存在當(dāng)前目錄的user_id_list.txt內(nèi),且自動(dòng)更新since_date,若當(dāng)前目錄下不存在user_id_list.txt,程序會(huì)自動(dòng)創(chuàng)建它。
個(gè)性化定制程序(可選)
本部分為可選部分,如果不需要個(gè)性化定制程序或添加新功能,可以忽略此部分。
本程序主體代碼位于weibo_spider.py文件,程序主體是一個(gè) Spider 類,上述所有功能都是通過在main函數(shù)調(diào)用 Spider 類實(shí)現(xiàn)的,默認(rèn)的調(diào)用代碼如下:
config = get_config()
wb = Spider(config)
wb.start() # 爬取微博信息
用戶可以按照自己的需求調(diào)用或修改 Spider 類。通過執(zhí)行本程序,我們可以得到很多信息。
點(diǎn)擊查看詳情
wb.user['nickname']:用戶昵稱;
wb.user['gender']:用戶性別;
wb.user['location']:用戶所在地;
wb.user['birthday']:用戶出生日期;
wb.user['description']:用戶簡(jiǎn)介;
wb.user['verified_reason']:用戶認(rèn)證;
wb.user['talent']:用戶標(biāo)簽;
wb.user['education']:用戶學(xué)習(xí)經(jīng)歷;
wb.user['work']:用戶工作經(jīng)歷;
wb.user['weibo_num']:微博數(shù);
wb.user['following']:關(guān)注數(shù);
wb.user['followers']:粉絲數(shù);
wb.weibo:除不包含上述信息外,wb.weibo包含爬取到的所有微博信息,如微博id、微博正文、原始圖片url、發(fā)布位置、發(fā)布時(shí)間、發(fā)布工具、點(diǎn)贊數(shù)、轉(zhuǎn)發(fā)數(shù)、評(píng)論數(shù)等。如果爬的是全部微博(原創(chuàng)+轉(zhuǎn)發(fā)),除上述信息之外,還包含被轉(zhuǎn)發(fā)微博原始圖片url、是否為原創(chuàng)微博等。wb.weibo是一個(gè)列表,包含了爬取的所有微博信息。wb.weibo[0]為爬取的第一條微博,wb.weibo[1]為爬取的第二條微博,以此類推。當(dāng)filter=1時(shí),wb.weibo[0]為爬取的第一條原創(chuàng)微博,以此類推。wb.weibo[0]['id']為第一條微博的id,wb.weibo[0]['content']為第一條微博的正文,wb.weibo[0]['publish_time']為第一條微博的發(fā)布時(shí)間,還有其它很多信息不在贅述,大家可以點(diǎn)擊下面的"詳情"查看具體用法。
詳情
若目標(biāo)微博用戶存在微博,則:
id:存儲(chǔ)微博id。如wb.weibo[0]['id']為最新一條微博的id;
content:存儲(chǔ)微博正文。如wb.weibo[0]['content']為最新一條微博的正文;
article_url:存儲(chǔ)微博中頭條文章的url。如wb.weibo[0]['article_url']為最新一條微博的頭條文章url,若微博中不存在頭條文章,則值為'';
original_pictures:存儲(chǔ)原創(chuàng)微博的原始圖片url和轉(zhuǎn)發(fā)微博轉(zhuǎn)發(fā)理由中的圖片url。如wb.weibo[0]['original_pictures']為最新一條微博的原始圖片url,若該條微博有多張圖片,則存儲(chǔ)多個(gè)url,以英文逗號(hào)分割;若該微博沒有圖片,則值為"無(wú)";
retweet_pictures:存儲(chǔ)被轉(zhuǎn)發(fā)微博中的原始圖片url。當(dāng)最新微博為原創(chuàng)微博或者為沒有圖片的轉(zhuǎn)發(fā)微博時(shí),則值為"無(wú)",否則為被轉(zhuǎn)發(fā)微博的圖片url。若有多張圖片,則存儲(chǔ)多個(gè)url,以英文逗號(hào)分割;
publish_place:存儲(chǔ)微博的發(fā)布位置。如wb.weibo[0]['publish_place']為最新一條微博的發(fā)布位置,如果該條微博沒有位置信息,則值為"無(wú)";
publish_time:存儲(chǔ)微博的發(fā)布時(shí)間。如wb.weibo[0]['publish_time']為最新一條微博的發(fā)布時(shí)間;
up_num:存儲(chǔ)微博獲得的點(diǎn)贊數(shù)。如wb.weibo[0]['up_num']為最新一條微博獲得的點(diǎn)贊數(shù);
retweet_num:存儲(chǔ)微博獲得的轉(zhuǎn)發(fā)數(shù)。如wb.weibo[0]['retweet_num']為最新一條微博獲得的轉(zhuǎn)發(fā)數(shù);
comment_num:存儲(chǔ)微博獲得的評(píng)論數(shù)。如wb.weibo[0]['comment_num']為最新一條微博獲得的評(píng)論數(shù);
publish_tool:存儲(chǔ)微博的發(fā)布工具。如wb.weibo[0]['publish_tool']為最新一條微博的發(fā)布工具。
定期自動(dòng)爬取微博(可選)
要想讓程序每個(gè)一段時(shí)間自動(dòng)爬取,且爬取的內(nèi)容為新增加的內(nèi)容(不包括已經(jīng)獲取的微博),請(qǐng)查看定期自動(dòng)爬取微博。
如何獲取cookie
要了解獲取cookie方法,請(qǐng)查看cookie文檔。
如何獲取user_id
要了解獲取user_id方法,請(qǐng)查看user_id文檔,該文檔介紹了如何獲取一個(gè)及多個(gè)微博用戶user_id的方法。
常見問題
如果運(yùn)行程序的過程中出現(xiàn)錯(cuò)誤,可以查看常見問題頁(yè)面,里面包含了最常見的問題及解決方法。如果出現(xiàn)的錯(cuò)誤不在常見問題里,您可以通過發(fā)issue尋求幫助,我們會(huì)很樂意為您解答。
相關(guān)項(xiàng)目
weibo-crawler - 功能和本項(xiàng)目完全一樣,可以不添加cookie,獲取的微博屬性更多;
weibo-search - 可以連續(xù)獲取一個(gè)或多個(gè)微博關(guān)鍵詞搜索結(jié)果,并將結(jié)果寫入文件(可選)、數(shù)據(jù)庫(kù)(可選)等。所謂微博關(guān)鍵詞搜索即:搜索正文中包含指定關(guān)鍵詞的微博,可以指定搜索的時(shí)間范圍。對(duì)于非常熱門的關(guān)鍵詞,一天的時(shí)間范圍,可以獲得1000萬(wàn)以上的搜索結(jié)果,N天的時(shí)間范圍就可以獲得1000萬(wàn) X N搜索結(jié)果。對(duì)于大多數(shù)關(guān)鍵詞,一天產(chǎn)生的相應(yīng)微博數(shù)量應(yīng)該在1000萬(wàn)條以下,因此可以說(shuō)該程序可以獲得大部分關(guān)鍵詞的全部或近似全部的搜索結(jié)果。而且該程序可以獲得搜索結(jié)果的所有信息,本程序獲得的微博信息該程序都能獲得。
貢獻(xiàn)
歡迎為本項(xiàng)目貢獻(xiàn)力量。貢獻(xiàn)可以是提交代碼,可以是通過issue提建議(如新功能、改進(jìn)方案等),也可以是通過issue告知我們項(xiàng)目存在哪些bug、缺點(diǎn)等,具體貢獻(xiàn)方式見為本項(xiàng)目做貢獻(xiàn)。
貢獻(xiàn)者
感謝所有為本項(xiàng)目貢獻(xiàn)力量的朋友,貢獻(xiàn)者詳情見貢獻(xiàn)者頁(yè)面。
注意事項(xiàng)
1.user_id不能為爬蟲微博的user_id。因?yàn)橐牢⒉┬畔?#xff0c;必須先登錄到某個(gè)微博賬號(hào),此賬號(hào)我們姑且稱為爬蟲微博。爬蟲微博訪問自己的頁(yè)面和訪問其他用戶的頁(yè)面,得到的網(wǎng)頁(yè)格式不同,所以無(wú)法爬取自己的微博信息;如果想要爬取爬蟲微博內(nèi)容,可以參考獲取自身微博信息;
2.cookie有期限限制,大約三個(gè)月。若提示cookie錯(cuò)誤或已過期,需要重新更新cookie。
總結(jié)
以上是生活随笔為你收集整理的python 爬虫 微博 github_GitHub - Joria0414/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fluke dtx-1800测试精度有必
- 下一篇: Python 超简单爬取新浪微博数据