日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬取国内创业公司、投资机构、独角兽公司信息

發(fā)布時(shí)間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬取国内创业公司、投资机构、独角兽公司信息 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎關(guān)注天善智能,我們是專注于商業(yè)智能BI,人工智能AI,大數(shù)據(jù)分析與挖掘領(lǐng)域的垂直社區(qū),學(xué)習(xí),問答、求職一站式搞定!

對(duì)商業(yè)智能BI、大數(shù)據(jù)分析挖掘、機(jī)器學(xué)習(xí),python,R等數(shù)據(jù)領(lǐng)域感興趣的同學(xué)加微信:tstoutiao,邀請(qǐng)你進(jìn)入數(shù)據(jù)愛好者交流群,數(shù)據(jù)愛好者們都在這兒。

作者:? 蘇克1900

公眾號(hào):第2大腦

摘要:?之前爬的網(wǎng)站都是不需要登錄就可以爬取的,但還有很多網(wǎng)站的內(nèi)容需要先登錄才能爬,比如桔子網(wǎng)、豆瓣、知乎等。這時(shí)采用之前的方法就不行了,需要先登錄再去爬。本文以桔子網(wǎng)為例,介紹模擬登錄方法,然后爬取該網(wǎng)站數(shù)據(jù)庫中的數(shù)據(jù)信息,并保存到 MongoDB 數(shù)據(jù)庫中。

1. 網(wǎng)站介紹

網(wǎng)址:https://www.itjuzi.com/

對(duì)于創(chuàng)投圈的人來說,國內(nèi)的桔子和國外的?Crunchbase應(yīng)該算是必備網(wǎng)站。今天,我們要說的就是前者,這個(gè)網(wǎng)站提供了很多有價(jià)值的信息。

信息的價(jià)值體現(xiàn)在哪里呢,舉個(gè)簡單的例子。你運(yùn)營了一個(gè)不錯(cuò)的公眾號(hào),有著 10 萬粉絲群,這時(shí)候你想找投資繼續(xù)做大,但你不知道該到哪里去找投資。這時(shí)候你偶然發(fā)現(xiàn)了這個(gè)網(wǎng)站,在網(wǎng)站上你看到了同領(lǐng)域的大 V 號(hào)信息,他們得到了好幾家公司上千萬的投資。你看著心生羨慕,也躍躍欲試。于是,你經(jīng)過綜合對(duì)比分析,對(duì)自己公眾號(hào)估值 200 萬,然后就去找投資大 V 號(hào)的那幾家公司洽談。由于目的性明確,準(zhǔn)備也充分,你很快就得到了融資。

這個(gè)例子中,桔子網(wǎng)提供了創(chuàng)業(yè)公司(運(yùn)營公眾號(hào)也是創(chuàng)業(yè))融資金額和投資機(jī)構(gòu)等相關(guān)寶貴的信息。當(dāng)然,這只是非常小的一點(diǎn)價(jià)值,該網(wǎng)站數(shù)據(jù)庫提供了自 2000 年以來的海量數(shù)據(jù),包括:超過11 萬家的創(chuàng)業(yè)公司、6 萬多條投融資信息、7 千多家投資機(jī)構(gòu)以及其他數(shù)據(jù),可以說是非常全了。這些數(shù)據(jù)的背后蘊(yùn)含著大量有價(jià)值的信息。

接下來,本文嘗試爬取該網(wǎng)站數(shù)據(jù)庫的信息,之后做一些數(shù)據(jù)分析,嘗試找到一些有意思的信息。

主要內(nèi)容:

模擬登錄

分析 Ajax 然后抓取

存儲(chǔ)到 MongoDB 數(shù)據(jù)庫

導(dǎo)出 csv

數(shù)據(jù)分析(后期)

2. 模擬登錄

2.1. Session 和 Cookies

觀察這個(gè)網(wǎng)站,是需要先登錄才能看到數(shù)據(jù)信息的,但是好在不用輸驗(yàn)證碼。我們需要利用賬號(hào)和密碼,然后實(shí)現(xiàn)模擬登錄。

模擬登錄的方法有好幾種,比如 Post 直接提交賬號(hào)、先登錄獲取 Cookies 再直接請(qǐng)求、Selenium 模擬登錄等。其中:

Post 方法需要在后臺(tái)獲取登錄的 url,填寫表單參數(shù)然后再請(qǐng)求,比較麻煩;

直接復(fù)制 Cookies 的方法就是先登錄賬號(hào),復(fù)制出 Cookies 并添加到 Headers 中,再用requests.get?方法提交請(qǐng)求,這種方法最為方便;

Selenium 模擬登錄方法是直接輸入賬號(hào)、密碼,也比較方便,但速度會(huì)有點(diǎn)慢。

之后,會(huì)單獨(dú)介紹幾種方法的具體實(shí)現(xiàn)的步驟。這里,我們就先采用第二種方法。

首先,需要先了解兩個(gè)知識(shí)點(diǎn):Session 和 Cookies。

Session 在服務(wù)端,也就是網(wǎng)站的服務(wù)器,用來保存用戶的會(huì)話信息,Cookies 在客戶端,也可以理解為瀏覽器端,有了 Cookies,瀏覽器在下次訪問網(wǎng)頁時(shí)會(huì)自動(dòng)附帶上它發(fā)送給服務(wù)器,服務(wù)器通過識(shí)別 Cookies 并鑒定出是哪個(gè)用戶,然后再判斷用戶是否是登錄狀態(tài),然后返回對(duì)應(yīng)的 Response。所以我們可以理解為 Cookies 里面保存了登錄的憑證,有了它我們只需要在下次請(qǐng)求攜帶 Cookies 發(fā)送 Request 而不必重新輸入用戶名、密碼等信息重新登錄了。

因此在爬蟲中,有時(shí)候處理需要登錄才能訪問的頁面時(shí),我們一般會(huì)直接將登錄成功后獲取的 Cookies 放在 Request Headers 里面直接請(qǐng)求。

更多知識(shí),可以參考崔慶才大神的文章:

https://germey.gitbooks.io/python3webspider/content/2.4-Session%E5%92%8CCookies.html

在了解 Cookies 知識(shí)后,我們就可以進(jìn)入正題了。

2.2. Requests 請(qǐng)求登錄

首先,利用已有的賬號(hào)和密碼,登錄進(jìn)網(wǎng)站主頁,然后右鍵-檢查,打開第一個(gè)?www.itjuzi.com請(qǐng)求:

向下拉到 Requests Headers 選項(xiàng),可以看到有很多字段信息,這些信息之后我們都要添加到 Get 請(qǐng)求中去。

定位到下方的 Cookie 字段,可以看到有很多 Cookie 值和名稱,這是在登錄后自動(dòng)產(chǎn)生的。我們將整個(gè) Cookies 復(fù)制 Request Headers 里,然后請(qǐng)求網(wǎng)頁就可以順利登陸然后爬取。如果不加 Cookies,那么就卡在登錄界面,也就無法進(jìn)行后面的爬取,所以 Cookies 很重要,需要把它放到 Request Headers 里去。

下面,我們按照 json 格式開始構(gòu)造 Request Headers。這里推薦一個(gè)好用的網(wǎng)站,可以幫我們自動(dòng)構(gòu)造 Request Headers:https://curl.trillworks.com/

使用方法也很簡單,右鍵復(fù)制cURL鏈接到這個(gè)網(wǎng)頁中。

將 cURL 復(fù)制到左邊選框,默認(rèn)選擇語言為 Python,然后右側(cè)就會(huì)自動(dòng)構(gòu)造后 requests 請(qǐng)求,包括 headers,復(fù)制下來直接可以用。登錄好以后,我們就轉(zhuǎn)到投融資速遞網(wǎng)頁中(url:http://radar.itjuzi.com/investevent),然后就可以獲取該頁面網(wǎng)頁內(nèi)容了。代碼如下:

1importrequests

2headers?=?{

3'Connection':'keep-alive',

4'Cache-Control':'max-age=0',

5'Upgrade-Insecure-Requests':'1',

6'User-Agent':'Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/66.0.3359.181?Safari/537.36',

7'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

8'DNT':'1',

9'Referer':'http://radar.itjuzi.com/investevent',

10'Accept-Encoding':'gzip,?deflate,?br',

11'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',

12'If-None-Match':'W/^\\^5bc7df15-19cdc^\\^',

13'If-Modified-Since':'Thu,?18?Oct?2018?01:17:09?GMT',

14#?主頁cookie

15'Cookie':'你的cookie',

16}

17

18url?='http://radar.itjuzi.com/investevent'#?投融資信息

19s?=?requests.Session()

20response?=?s.get(url,headers?=?headers)

21print(response.status_code)

22print(response.text)

結(jié)果如下:

可以看到,添加 Cookie 后,我們請(qǐng)求投融資信息網(wǎng)頁就成功了。這里如果不加 Cookie 的結(jié)果就什么也得不到:

好,這樣就算成功登錄了。但是整個(gè) headers 請(qǐng)求頭的參數(shù)太多,是否一定需要帶這么多參數(shù)呢? 這里就去嘗試看哪些參數(shù)是請(qǐng)求一定要的,哪些則是不用的,不用的可以去掉以精簡代碼。經(jīng)過嘗試,僅需要下面三個(gè)參數(shù)就能請(qǐng)求成功。

1headers?=?{

2'User-Agent':'Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/66.0.3359.181?Safari/537.36'

3'X-Requested-With':'XMLHttpRequest',

4#?主頁cookie

5'Cookie':'復(fù)制你的cookie',

6}

Tips:當(dāng)爬取失效的時(shí)候需要重新注冊(cè)帳號(hào),然后生成新的 Cookie。

如果你沒那么多郵箱賬號(hào),那么推薦一個(gè)可生成隨機(jī)賬號(hào)的免費(fèi)郵箱,用來接收注冊(cè)激活鏈接:

https://10minutemail.net/

3. 網(wǎng)頁爬取分析

在成功登錄以后,我們就可以通過分析網(wǎng)頁結(jié)構(gòu)來采取相應(yīng)的爬取方法。這里,我們將爬取投融資速遞、創(chuàng)業(yè)公司、投資機(jī)構(gòu)和千里馬等幾個(gè)子板塊的數(shù)據(jù)。首先,以投融資速遞信息為例。

網(wǎng)址:http://radar.itjuzi.com/investevent

3.1. 分析網(wǎng)頁

可以看到,投融資事件信息網(wǎng)頁中的數(shù)據(jù)是表格形式。經(jīng)嘗試點(diǎn)擊翻頁,發(fā)現(xiàn)url不變,可以初步判定網(wǎng)頁數(shù)據(jù)采用 Ajax 形式呈現(xiàn)。切換到后臺(tái),點(diǎn)擊翻頁可以發(fā)現(xiàn)出現(xiàn)有規(guī)律的?info?locatiop 開頭的請(qǐng)求,頁數(shù)隨 page 參數(shù)而發(fā)生規(guī)律的變化。

點(diǎn)擊請(qǐng)求查分別查看 Response 和 Preview,發(fā)現(xiàn)表格數(shù)據(jù)是 json 格式,這就太好了。因?yàn)?json 格式的數(shù)據(jù)非常整齊也很容易抓取。上一篇文章,我們正好解決了 json 格式數(shù)據(jù)的處理方法,如果不太熟悉可以回顧一下:

https://www.makcyun.top/web_scraping_withpython6.html

接著,我們就可以通過構(gòu)造 url 參數(shù),然后用 Get 請(qǐng)求就可以獲取網(wǎng)頁中的表格數(shù)據(jù),最后再加個(gè)循環(huán),就可以爬取多頁數(shù)據(jù)了。

3.2. 構(gòu)造 url

下面,我們來構(gòu)造一下 url,切換到 Headers 選項(xiàng)卡,拉到最底部可以看到 url 需帶的請(qǐng)求參數(shù)。這里有三項(xiàng),很好理解。location:in,表示國內(nèi)數(shù)據(jù); orderby:def,表示默認(rèn)排序;page:1,表示第一頁。所以,只需要改變 page 參數(shù)就可以查看其他頁的結(jié)果,非常簡單。

這里,如果我們對(duì)表格進(jìn)行篩選,比如行業(yè)選擇教育、時(shí)間選擇 2018 年,那么相應(yīng)的請(qǐng)求參數(shù)也會(huì)增加。通過構(gòu)造參數(shù)就可以爬取指定的數(shù)據(jù),這樣就不用全部爬下來了,也對(duì)網(wǎng)站友好點(diǎn)。

3.3. 爬取數(shù)據(jù)

到這兒,我們就可以直接開始爬了。可以使用函數(shù),也可以用定義類(Class)的方法。考慮到,Python 是一種面向?qū)ο蟮木幊?#xff0c;類(Class)是面向?qū)ο笞钪匾母拍钪?#xff0c;運(yùn)用類的思想編程非常重要。所以,這里我們嘗試采用類的方法來實(shí)現(xiàn)爬蟲。

1importrequests

2importpymongo

3importrandom

4importtime

5importjson

6importpandasaspd

7fromfake_useragentimportUserAgent

8ua?=?UserAgent()

9

10classITjuzi(object):

11def__init__(self):

12self.headers?=?{

13'User-Agent':?ua.random,

14'X-Requested-With':'XMLHttpRequest',

15'Cookie':'你的cookie',

16}

17self.url?='http://radar.itjuzi.com/investevent/info?'#?investevent

18self.session?=?requests.Session()

19

20defget_table(self,?page):

21"""

221?獲取投融資事件數(shù)據(jù)

23"""

24params?=?{#?invsestevent

25'location':'in',

26'orderby':'def',

27'page':?page,

28'date':2018#?年份

29}

30response?=?self.session.get(

31self.url,?params=params,?headers=self.headers).json()

32print(response)

33#?self.save_to_mongo(response)

34

35if__name__?=='__main__':

36spider?=?itjuzi()

37spider.get_table(1)

如果你之前一直是用 Def 函數(shù)的寫法,而沒有接觸過 Class 類的寫法,可能會(huì)看地比較別扭,我之前就是這樣的,搞不懂為什么要有 self、為什么用__init__。這種思維的轉(zhuǎn)變可以通過看教程和別人寫的實(shí)際案例去揣摩。這里,我先略過,之后會(huì)單獨(dú)介紹。

簡單解釋一下上面代碼的意思。首先定義了一個(gè)類(class),類名是?ITjuzi,類名通常是大寫開頭的單詞。后面的?(object)?表示該類是從哪個(gè)類繼承下來的,這個(gè)可以暫時(shí)不用管,填上就可以。然后定義了一個(gè)特殊的__init__方法,__init__方法的第一個(gè)參數(shù)永遠(yuǎn)是?self,之后是其他想要設(shè)置的屬性參數(shù)。在這個(gè)方法里可以綁定些確定而且必須的屬性,比如 headers、url 等。

在 headers 里面,User-Agent 沒有使用固定的 UA,而是借助?fake_useragent包?生成隨機(jī)的 UA:ua.random。因?yàn)?#xff0c;這個(gè)網(wǎng)站做了一定的反爬措施,這樣可以起到一定的反爬效果,后續(xù)我們會(huì)再說到。接著,定義了一個(gè) get_table() 函數(shù),這個(gè)函數(shù)和普通函數(shù)沒有什么區(qū)別,除了第一個(gè)參數(shù)永遠(yuǎn)是實(shí)例變量?self。在 session.get()方法中傳入 url、請(qǐng)求參數(shù)和 headers,請(qǐng)求網(wǎng)頁并指定獲取的數(shù)據(jù)類型為 json 格式,然后就可以順利輸出 2018 年投融資信息的第 1 頁數(shù)據(jù):

3.4. 存儲(chǔ)到 MongoDB

數(shù)據(jù)爬取下來了,那么我們放到哪里呢?可以選擇存儲(chǔ)到 csv 中,但 json 數(shù)據(jù)中存在多層嵌套,csv 不能夠直觀展現(xiàn)。這里,我們可以嘗試之前沒有用過的 MongoDB 數(shù)據(jù)庫,當(dāng)作練習(xí)。另外,數(shù)據(jù)存儲(chǔ)到該數(shù)據(jù)庫中,后期也可以導(dǎo)出 csv,一舉兩得。

關(guān)于 MongoDB 的安裝與基本使用,可以參考下面這兩篇教程,之后我也會(huì)單獨(dú)再寫一下:

安裝

https://germey.gitbooks.io/python3webspider/content/1.4.2-MongoDB%E7%9A%84%E5%AE%89%E8%A3%85.html

使用

https://germey.gitbooks.io/python3webspider/content/5.3.1-MongoDB%E5%AD%98%E5%82%A8.html

可視化工具可采用 Robo 3T (之前叫 RoboMongo)

https://www.mongodb.com/

下面我們就將上面返回的 json 數(shù)據(jù),存儲(chǔ)到 MongoDB 中去:

1importpymongo

2importnumpyasnp

3#?mongodb數(shù)據(jù)庫初始化

4client?=?pymongo.MongoClient('localhost',27017)

5#?指定數(shù)據(jù)庫

6db?=?client.ITjuzi

7#?指定集合,類似于mysql中的表

8mongo_collection1?=?db.itjuzi_investevent

9

10defsave_to_mongo(self,?response):

11try:

12data?=?response['data']['rows']#?dict可以連續(xù)選取字典層內(nèi)的內(nèi)容

13df?=?pd.DataFrame(data)

14table?=?json.loads(df.T.to_json()).values()

15ifmongo_collection1.insert_many(table):#?investment

16print('存儲(chǔ)到mongodb成功')

17sleep?=?np.random.randint(3,7)

18time.sleep(sleep)

19exceptException:

20print('存儲(chǔ)到mongodb失敗')

21defspider_itjuzi(self,?start_page,?end_page):

22forpageinrange(start_page,?end_page):

23print('下載第%s頁:'%?(page))

24self.get_table(page)

25print('下載完成')

26

27if__name__?=='__main__':

28spider?=?ITjuzi()

29spider.spider_itjuzi(1,2)

這里,安裝好 MongoingDB 數(shù)據(jù)庫、Robo 3T 和 pymongo 庫后,我們就可以開始使用了。

首先,對(duì)數(shù)據(jù)庫進(jìn)行初始化,然后指定(如果沒有則生成)數(shù)據(jù)將要存放的數(shù)據(jù)庫和集合名稱。接著,定義了save_to_mongo 函數(shù)。由于表格里面的數(shù)據(jù)存儲(chǔ)在鍵為 rows 的 value 值中,可使用?response['data']['rows']?來獲取到 json 里面的嵌套數(shù)據(jù),然后轉(zhuǎn)為 DataFrame。DataFrame 存儲(chǔ) MongoDB 參考了 stackoverflow 上面的一個(gè)答案:json.loads(df.T.to_json()).values()。

然后,使用?mongo_collection1.insert_many(table)?方法將數(shù)據(jù)插入到 mongo_collection1,也就是 itjuzi_investevent 集合中。爬取完一頁數(shù)據(jù)后,設(shè)置隨機(jī)延時(shí) 3-6 s,避免爬取太頻繁,這也能起到一定的反爬作用。

最后,我們定義一個(gè)分頁循環(huán)爬取函數(shù)?spider_itjuzi,利用 for 循環(huán)設(shè)置爬取起始頁數(shù)就可以了,爬取結(jié)果如下:

打開 Robo 3T,可以看到數(shù)據(jù)成功存儲(chǔ)到 MongoDB 中了:

好,以上,我們就基本上完成了 2018 年投融資信息數(shù)據(jù)表的爬取,如果你想爬其他年份或者更多頁的數(shù)據(jù),更改相應(yīng)的參數(shù)即可。

3.5. 導(dǎo)出到 csv

數(shù)據(jù)存好后,如果還不太熟悉 MongoDB 的對(duì)數(shù)據(jù)的操作,那么我們可以將數(shù)據(jù)導(dǎo)出為 csv,在 excel 中操作。MongoDB不能直接導(dǎo)出 csv,但操作起來也不麻煩,利用mongoexport命令,幾行代碼就可以輸出 csv。

mongoexport導(dǎo)出 csv 的方法:

https://docs.mongodb.com/manual/reference/program/mongoexport/#mongoexport-fields-example

首先,運(yùn)行 cmd,切換路徑到 MongoDB 安裝文件夾中的 bin 目錄下,我這里是:

1cd?C:\Program?Files\MongoDB\Server\4.0\bin

接著,在桌面新建一個(gè)txt文件,命名為fields,在里面輸入我們需要輸出的表格列名,如下所示:

然后,利用mongoexport命令,按照:表格所在的數(shù)據(jù)庫、集合、輸出格式、導(dǎo)出列名文件位置和輸出文件名的格式,編寫好命令并運(yùn)行就可以導(dǎo)出了:

1mongoexport?--db?ITjuzi?--collection?itjuzi_investevent?--type=csv?--fieldFile?C:\Users\sony\Desktop\fields.txt?--out?C:\Users\sony\Desktop\investevent.csv

cmd 命令:

導(dǎo)出 csv 結(jié)果如下:

Tips:直接用 excel 打開可能會(huì)是亂碼,需先用 Notepad++ 轉(zhuǎn)換為 UTF-8 編碼,然后 excel 再打開就正常了。

以上,我們就完成了整個(gè)數(shù)據(jù)表的爬取。

3.6. 完整代碼

下面,可以再嘗試爬取創(chuàng)業(yè)公司、投資機(jī)構(gòu)和千里馬的數(shù)據(jù)。他們的數(shù)據(jù)結(jié)構(gòu)形式是一樣的,只需要更換相應(yīng)的參數(shù)就可以了,感興趣的話可以嘗試下。將上面的代碼再稍微整理一下,完整代碼如下:

?1importrequests

?2importre

?3importpymongo

?4importrandom

?5importtime

?6importjson

?7importrandom

?8importnumpyasnp

?9importcsv

10importpandasaspd

11fromfake_useragentimportUserAgent

12importsocket#?斷線重試

13fromurllib.parseimporturlencode

14#?隨機(jī)ua

15ua?=?UserAgent()

16#?mongodb數(shù)據(jù)庫初始化

17client?=?pymongo.MongoClient('localhost',27017)

18#?獲得數(shù)據(jù)庫

19db?=?client.ITjuzi

20#?獲得集合

21mongo_collection1?=?db.itjuzi_investevent

22mongo_collection2?=?db.itjuzi_company

23mongo_collection3?=?db.itjuzi_investment

24mongo_collection4?=?db.itjuzi_horse

25

26classitjuzi(object):

27def__init__(self):

28

29self.headers?=?{

30'User-Agent':?ua.random,

31'X-Requested-With':'XMLHttpRequest',

32#?主頁cookie

33'Cookie':'你的cookie',

34}

35self.url?='http://radar.itjuzi.com/investevent/info?'#?investevent

36#?self.url?=?'http://radar.itjuzi.com/company/infonew?'???????#?company

37#?self.url?=?'http://radar.itjuzi.com/investment/info?'???????#?investment

38#?self.url?=?'https://www.itjuzi.com/horse'???????????????#?horse

39self.session?=?requests.Session()

40

41defget_table(self,?page):

42"""

431?獲取投融資事件網(wǎng)頁內(nèi)容

44"""

45params?=?{#?1?invsestevent

46'location':'in',

47'orderby':'def',

48'page':?page,

49'date':2018#年份??

50}

51

52#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?##?#?#?#?#?#?#?#?#?#?#?#

53#?params?=?{??????????????????#?2?company

54#?????'page':?page,

55#?????#?'scope[]':?1,??#?行業(yè)?1教育

56#?????'orderby':?'pv',

57#?????'born_year[]':?2018,??#?只能單年,不能多年篩選,會(huì)保留最后一個(gè)

58#?}

59#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?##?#?#?#?#?#?#?#?#?#?#?#

60#?params?=?{??????????????????#?3?investment

61#?'orderby':?'num',

62#?'page':?page

63#?}

64#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?#?##?#?#?#?#?#?#?#?#?#?#?#

65#?params?=?{??????????????????#?4?horse

66#?}

67#?可能會(huì)遇到請(qǐng)求失敗,則設(shè)置3次重新請(qǐng)求

68retrytimes?=3

69whileretrytimes:

70try:

71response?=?self.session.get(

72self.url,?params=params,?headers=self.headers,timeout?=?(5,20)).json()

73self.save_to_mongo(response)

74break

75exceptsocket.timeout:

76print('下載第{}頁,第{}次網(wǎng)頁請(qǐng)求超時(shí)'.format(page,retrytimes))

77retrytimes?-=1

78

79defsave_to_mongo(self,?response):

80try:

81data?=?response['data']['rows']#?dict可以連續(xù)選取字典層內(nèi)的內(nèi)容

82#?data?=response??#?爬取千里馬時(shí)需替換為此data

83df?=?pd.DataFrame(data)

84table?=?json.loads(df.T.to_json()).values()

85ifmongo_collection1.insert_many(table):#?investevent

86#?if?mongo_collection2.insert_many(table):????#?company

87#?if?mongo_collection3.insert_many(table):????#?investment

88#?if?mongo_collection4.insert_many(table):????#?horse?

89print('存儲(chǔ)到mongodb成功')

90sleep?=?np.random.randint(3,7)

91time.sleep(sleep)

92exceptException:

93print('存儲(chǔ)到mongodb失敗')

94

95defspider_itjuzi(self,?start_page,?end_page):

96forpageinrange(start_page,?end_page):

97print('下載第%s頁:'%?(page))

98self.get_table(page)

99print('下載完成')

100

101if__name__?=='__main__':

102spider?=?itjuzi()

103spider.spider_itjuzi(1,2)

源代碼也可以在下面的鏈接中獲取:

https://github.com/makcyun/web_scraping_with_python

4. 總結(jié):

本文以桔子網(wǎng)為例,介紹了需登錄網(wǎng)站的爬取方法。即:先模擬登錄再爬取數(shù)據(jù)信息。但是還有一些網(wǎng)站登錄時(shí)需要輸入驗(yàn)證碼,這讓爬取難度又增加,后期會(huì)再進(jìn)行介紹。

該網(wǎng)站相比之前的爬蟲網(wǎng)站,反爬措施高了很多。本文通過設(shè)置隨機(jī)延時(shí)、隨機(jī) UserAgent,可一定程度上增加爬蟲的穩(wěn)定性。但是仍然會(huì)受到反爬措施的限制,后期可嘗試通過設(shè)置 IP 代理池進(jìn)一步提升爬蟲效率。

上面的爬蟲程序在爬取過程容易中斷,接著再進(jìn)行爬取即可。但是手動(dòng)修改非常不方便,也容易造成數(shù)據(jù)重復(fù)爬取或者漏爬。所以,為了更完整地爬取,需增加斷點(diǎn)續(xù)傳的功能。

補(bǔ)充一下,后期可能會(huì)在我的博客中不斷更新、補(bǔ)充本文的內(nèi)容。如想獲得更多,可點(diǎn)擊閱讀原文,或者瀏覽器打開我的博客鏈接。

https://www.makcyun.top

本文完。

作者好文推薦:分析了6000款A(yù)pp,竟有這么多佳軟神器沒用過

Python愛好者社區(qū)歷史文章大合集:

Python愛好者社區(qū)歷史文章列表(每周append更新一次)

福利:文末掃碼立刻關(guān)注公眾號(hào),“Python愛好者社區(qū)”,開始學(xué)習(xí)Python課程:

關(guān)注后在公眾號(hào)內(nèi)回復(fù)“課程”即可獲取:

小編的轉(zhuǎn)行入職數(shù)據(jù)科學(xué)(數(shù)據(jù)分析挖掘/機(jī)器學(xué)習(xí)方向)【最新免費(fèi)】

小編的Python入門免費(fèi)視頻課程!!!

小編的Python快速上手matplotlib可視化庫!!!

崔老師爬蟲實(shí)戰(zhàn)案例免費(fèi)學(xué)習(xí)視頻。

陳老師數(shù)據(jù)分析報(bào)告制作免費(fèi)學(xué)習(xí)視頻。

玩轉(zhuǎn)大數(shù)據(jù)分析!Spark2.X+Python 精華實(shí)戰(zhàn)課程免費(fèi)學(xué)習(xí)視頻。

總結(jié)

以上是生活随笔為你收集整理的爬取国内创业公司、投资机构、独角兽公司信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。