您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
04 python買粉絲爬蟲(如何入門 Python 爬蟲)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-06-02 04:21:48【】8人已围观
简介個項目,那么實踐起來你會被目標驅動,而不會像學習模塊一樣慢慢學習。另外如果說知識體系里的每一個知識點是圖里的點,依賴關系是邊的話,那么這個圖一定不是一個有向無環圖。因為學習A的經驗可以幫助你學習B。因
另外如果說知識體系里的每一個知識點是圖里的點,依賴關系是邊的話,那么這個圖一定不是一個有向無環圖。因為學習A的經驗可以幫助你學習B。因此,你不需要學習怎么樣“入門”,因為這樣的“入門”點根本不存在!你需要學習的是怎么樣做一個比較大的東西,在這個過程中,你會很快地學會需要學會的東西的。當然,你可以爭論說需要先懂python,不然怎么學會python做爬蟲呢?但是事實上,你完全可以在做這個爬蟲的過程中學習python :D
看到前面很多答案都講的“術”——用什么軟件怎么爬,那我就講講“道”和“術”吧——爬蟲怎么工作以及怎么在python實現。
先長話短說summarize一下:
你需要學習
基本的爬蟲工作原理
基本的買粉絲抓取工具,scrapy
Bloom Filter: Bloom Filters by Example
如果需要大規模網頁抓取,你需要學習分布式爬蟲的概念。其實沒那么玄乎,你只要學會怎樣維護一個所有集群機器能夠有效分享的分布式隊列就好。最簡單的實現是python-rq: 買粉絲s://github.買粉絲/nvie/rq
rq和Scrapy的結合:darkrho/scrapy-redis · GitHub
后續處理,網頁析取(grangier/python-goose · GitHub),存儲(Mongodb)
以下是短話長說:
說說當初寫的一個集群爬下整個豆瓣的經驗吧。
1)首先你要明白爬蟲怎樣工作。
想象你是一只蜘蛛,現在你被放到了互聯“網”上。那么,你需要把所有的網頁都看一遍。怎么辦呢?沒問題呀,你就隨便從某個地方開始,比如說人民日報的首頁,這個叫initial pages,用$表示吧。
在人民日報的首頁,你看到那個頁面引向的各種鏈接。于是你很開心地從爬到了“國內新聞”那個頁面。太好了,這樣你就已經爬完了倆頁面(首頁和國內新聞)!暫且不用管爬下來的頁面怎么處理的,你就想象你把這個頁面完完整整抄成了個買粉絲放到了你身上。
突然你發現, 在國內新聞這個頁面上,有一個鏈接鏈回“首頁”。作為一只聰明的蜘蛛,你肯定知道你不用爬回去的吧,因為你已經看過了啊。所以,你需要用你的腦子,存下你已經看過的頁面地址。這樣,每次看到一個可能需要爬的新鏈接,你就先查查你腦子里是不是已經去過這個頁面地址。如果去過,那就別去了。
好的,理論上如果所有的頁面可以從initial page達到的話,那么可以證明你一定可以爬完所有的網頁。
那么在python里怎么實現呢?
很簡單
import Queue
initial_page = "買粉絲://買粉絲.renminribao.買粉絲"
url_queue = Queue.Queue()
seen = set()
seen.insert(initial_page)
url_queue.put(initial_page)
while(True): #一直進行直到海枯石爛
if url_queue.size()>0:
current_url = url_queue.get() #拿出隊例中第一個的url
store(current_url) #把這個url代表的網頁存儲好
for next_url in extract_urls(current_url): #提取把這個url里鏈向的url
if next_url not in seen:
seen.put(next_url)
url_queue.put(next_url)
else:
break
寫得已經很偽代碼了。
所有的爬蟲的backbone都在這里,下面分析一下為什么爬蟲事實上是個非常復雜的東西——搜索引擎公司通常有一整個團隊來維護和開發。
2)效率
如果你直接加工一下上面的代碼直接運行的話,你需要一整年才能爬下整個豆瓣的內容。更別說Google這樣的搜索引擎需要爬下全網的內容了。
問題出在哪呢?需要爬的網頁實在太多太多了,而上面的代碼太慢太慢了。設想全網有N個網站,那么分析一下判重的復雜度就是N*log(N),因為所有網頁要遍歷一次,而每次判重用set的話需要log(N)的復雜度。OK,OK,我知道python的set實現是hash——不過這樣還是太慢了,至少內存使用效率不高。
通常的判重做法是怎樣呢?Bloom Filter. 簡單講它仍然是一種hash的方法,但是它的特點是,它可以使用固定的內存(不隨url的數量而增長)以O(1)的效率判定url是否已經在set中。可惜天下沒有白吃的午餐,它的唯一問題在于,如果這個url不在set中,BF可以100%確定這個url沒有看過。但是如果這個url在set中,它會告訴你:這個url應該已經出現過,不過我有2%的不確定性。注意這里的不確定性在你分配的內存足夠大的時候,可以變得很小很少。一個簡單的教程:Bloom Filters by Example
注意到這個特點,url如果被看過,那么可能以小概率重復看一看(沒關系,多看看不會累死)。但是如果沒被看過,一定會被看一下(這個很重要,不然我們就要漏掉一些網頁了!)。 [IMPORTANT: 此段有問題,請暫時略過]
好,現在已經接近處理判重最快的方法了。另外一個瓶頸——你只有一臺機器。不管你的帶寬有多大,只要你的機器下載網頁的速度是瓶頸的話,那么你只有加快這個速度。用一臺機子不夠的話——用很多臺吧!當然,我們假設每臺機子都已經進了最大的效率——使用多線程(python的話,多進程吧)。
3)集群化抓取
爬取豆瓣的時候,我總共用了100多臺機器晝夜不停地運行了一個月。想象如果只用一臺機子你就得運行100個月了...
那么,假設你現在有100臺機器可以用,怎么用python實現一個分布式的爬取算法呢?
我們把這100臺中的99臺運算能力較小的機器叫作slave,另外一臺較大的機器叫作master,那么回顧上面代碼中的url_queue,如果我們能把這個queue放到這臺master機器上,所有的slave都可以通過網絡跟master聯通,每當一個slave完成下載一個網頁,就向master請求一個新的網頁來抓取。而每次slave新抓到一個網頁,就把這個網頁上所有的鏈接送到master的queue里去。同樣,bloom filter也放到master上,但是現在master只發送確定沒有被訪問過的url給slave。Bloom Filter放到master的內存里,而被訪問過的url放到運行在master上的Redis里,這樣保證所有操作都是O(1)。(至少平攤是O(1),Redis的訪問效率見:LINSERT – Redis)
考慮如何用python實現:
在各臺slave上裝好scrapy,那么各臺機子就變成了一臺有抓取能力的slave,在master上裝好Redis和rq用作分布式隊列。
代碼于是寫成
#slave.py
current_url = request_from_master()
to_send = []
for next_url in extract_urls(current_url):
to_send.append(next_url)
store(current_url);
send_to_master(to_send)
#master.py
distributed_queue = DistributedQueue()
bf = BloomFilter()
initial_pages = "買粉絲.renmingribao.買粉絲"
while(True):
if request == 'GET':
if distributed_queue.size()>0:
send(distributed_queue.get())
else:
break
elif request == 'POST':
bf.put(request.url)
好的,其實你能想到,有人已經給你寫好了你需要的:darkrho/scrapy-redis · GitHub
4)展望及后處理
雖然上面用很多“簡單”,但是真正要實現一個商業規模可用的爬蟲并不是一件容易的事。上面的代碼用來爬一個整體的網站幾乎沒有太大的問題。
但是如果附加上你需要這些后續處理,比如
有效地存儲(數據庫應該怎樣安排)
有效地判重(這里指網頁判重,咱可不想把人民日報和抄襲它的大民日報都爬一遍)
有效地信息抽取(比如怎么樣抽取出網頁上所有的地址抽取出來,“朝陽區奮進路中華道”),搜索引擎通常不需要存儲所有的信息,比如圖片我存來干嘛...
及時更新(預測這個網頁多久會更新一次)
如你所想,這里每一個點都可以供很多研究者十數年的研究。雖然如此,
“路漫漫其修遠兮,吾將上下而求索”。
所以,不要問怎么入門,直接上路就好了:)關注買粉絲買粉絲“Python基礎教程”,學python更輕松!
python爬蟲去哪接單
python爬蟲接單的方式有兩種
一、接定制需求的單子
爬蟲定制的需求其實很多,比如 “爬取某某電商網站的評論”,這類需求一般是按照爬取數據量的大小來收費,價格不會太高,正常500的樣子。
常見的接單渠道有以下幾種:
a) QQ群接單
QQ群接單因為沒有中介抽成價格相對高一些,但是也容易出現客戶跑路不給尾款的情況。以我多年的接單經驗,建議大家寫完程序之后留一個小BUG,防止客戶不給尾款。
b) 豬八戒、程序員客棧等第三方平臺
第三方擔保平臺,你需要入駐成為他們的技術員,優點是有平臺擔保,缺點是內卷嚴重,根本接不到單子。
c) 淘寶店鋪
淘寶搜索“python爬蟲代做”,聯系店鋪客服,申請成為他們的技術員。店鋪老板會把你拉到技術員群里面,通過群里搶單的方式來接單。優點是單子多,價格也還ok,缺點是一旦出了糾紛,淘寶店鋪只會維護客戶的利益,有時候甚至出現了單子做完了,不給技術員錢的情況。
很赞哦!(76797)
相关文章
- 01 虎牙直播買訂閱多少錢(虎牙直播所有禮物價格表是什么?)
- 01 薛之謙買30w粉絲(薛之謙有多少粉絲)
- 09 youtube make a playlist(速度與激情8片尾曲是什么)
- 01 虎牙直播下面的賽事怎么改成訂閱(虎牙直播訂閱界面怎么變回來)
- 01 蔡徐坤粉絲要買的東西(坤坤的粉絲名 坤坤的應援口號 蔡徐坤喜歡什么衣服 坤坤的具體生日 坤坤的應)
- 01 薛之謙的歌播放量排名最新(華語男歌手熱度榜周深排名罕見下滑,華晨宇呢?)
- 09 turn off the 買粉絲s on youtube(九年級英語上第一單元測試卷)
- 01 虎牙訂閱不能只顯示在線(如何在虎牙直播的個人主頁設置隱藏訂閱列表)
- 01 薛之謙買了多少粉絲(娛樂圈中最寵粉的幾位明星,薛之謙為粉絲買自己歌的版權,還有誰呢?)
- 01 虎牙訂閱粉絲下單(虎牙怎么買訂閱粉絲)
热门文章
站长推荐
09 youtube to mp3 320kbps youtube mp3轉換器(MP3轉換器詳細資料大全)
09 linux download youtube mp3(怎樣才能學好python語言?)
01 虎牙直播賬號存在風險不能訂閱(虎牙直播賬號是不是超過了三個月未修改密碼就會出現這樣的風險提醒?)
09 youtube mp3 application windows(P2P買粉絲怎么加速)
01 蔻馳貿易(上海)有限公司社會保險登記碼(蔻馳貿易(上海)有限公司電話是多少?)
09 youtube 買粉絲 music 買粉絲s 2021 playlist(幫忙翻譯一段IPHONE廣告)
01 藍色系ins少女心壁紙背景圖(怎么用最少的錢裝修出高級感?秘密全在配色里)
01 蔬菜進出口貿易公司賺錢嗎(2021年做啥生意)