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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】爬虫入门一

發布時間:2024/4/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】爬虫入门一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

  • 基本的爬蟲工作原理
  • 基本的http抓取工具,scrapy
  • Bloom Filter: 大規模數據處理利器(爬蟲判重)
  • 如果需要大規模網頁抓取,你需要學習分布式爬蟲的概念。其實沒那么玄乎,你只要學會怎樣維護一個所有集群機器能夠有效分享的分布式隊列就好。最簡單的實現是python-rq: https://github.com/nvie/rq
  • rq和Scrapy的結合:darkrho/scrapy-redis · GitHub
  • 后續處理,網頁析取(grangier/python-goose · GitHub),存儲(Mongodb)
  • ?

    怎樣對連接進行判重?

    Bloom Filter. 簡單講它仍然是一種hash的方法,但是它的特點是,它可以使用固定的內存(不隨url的數量而增長)以O(1)的效率判定url是否已經在set中。可惜天下沒有白吃的午餐,它的唯一問題在于,如果這個url不在set中,BF可以100%確定這個url沒有看過。但是如果這個url在set中,它會告訴你:這個url應該已經出現過,不過我有2%的不確定性。注意這里的不確定性在你分配的內存足夠大的時候,可以變得很小很少。一個簡單的教程:Bloom Filters by Example

    集群化抓取
    ????????爬取豆瓣的時候,我總共用了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.pycurrent_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 = "www.renmingribao.com"while(True):if request == 'GET':if distributed_queue.size()>0:send(distributed_queue.get())else:breakelif request == 'POST':bf.put(request.url)

    以上簡要示例的具體開源項目:darkrho/scrapy-redis · GitHub

    展望及后處理
    雖然上面用很多“簡單”,但是真正要實現一個商業規模可用的爬蟲并不是一件容易的事。上面的代碼用來爬一個整體的網站幾乎沒有太大的問題。但是如果附加上你需要這些后續處理,比如

  • 有效地存儲(數據庫應該怎樣安排)
  • 有效地判重(這里指網頁判重,不是上文的鏈接判重,咱可不想把人民日報和抄襲它的大民日報都爬一遍)
  • 有效地信息抽取(比如怎么樣抽取出網頁上所有的地址抽取出來,“朝陽區奮進路中華道”),搜索引擎通常不需要存儲所有的信息,比如圖片我存來干嘛...
  • 及時更新(預測這個網頁多久會更新一次)


  • 作者:謝科
    鏈接:https://www.zhihu.com/question/20899988/answer/24923424
    來源:知乎
    著作權歸作者所有,轉載請聯系作者獲得授權。

    轉載于:https://my.oschina.net/zengjs275/blog/779249

    總結

    以上是生活随笔為你收集整理的【转】爬虫入门一的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。