<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python程序員爬出百套美女寫(xiě)真集,同樣是爬蟲(chóng),他為何如此突出?

          共 1097字,需瀏覽 3分鐘

           ·

          2021-06-03 22:24


          前言

          人生苦短,Python當(dāng)歌!

          python爬蟲(chóng)


          用python爬蟲(chóng)是一件非常使人愉快的事情,圖片、數(shù)據(jù)、小視頻一切皆可爬取,可是我們會(huì)經(jīng)常發(fā)現(xiàn)下載圖片的時(shí)候會(huì)非常慢,難以忍受。

          我們都知道一個(gè)人做事必然沒(méi)有十個(gè)人做事快,那一個(gè)進(jìn)程速度慢,用十個(gè)進(jìn)程就好了呀。所以今天要跟大家分享一個(gè)多進(jìn)程爬蟲(chóng)的制作。(GIL的存在導(dǎo)致Python的多線程點(diǎn)有坑)


          大家應(yīng)該知道在多進(jìn)程中,進(jìn)程之間是不能相互通信的,這就有一個(gè)問(wèn)題出現(xiàn)了!多個(gè)進(jìn)程怎么知道哪些需要爬取、哪些已經(jīng)被爬取了?

          這就涉及到隊(duì)列了,如果需要更為穩(wěn)定健壯的隊(duì)列,應(yīng)該使用Celery這一類(lèi)的專(zhuān)用消息傳遞工具,不過(guò)為了簡(jiǎn)便,這次我們使用MongoDB。

          構(gòu)建思路

          好了!先來(lái)理一下思路:每個(gè)進(jìn)程需要知道哪些URL爬取過(guò)了、哪些URL需要爬??!我們來(lái)給每個(gè)URL設(shè)置兩種狀態(tài):

          outstanding:等待爬取的URL

          complete:爬取完成的URL

          那么失敗的URL的怎么辦呢?我們?cè)谠黾右环N狀態(tài):

          processing:正在進(jìn)行的URL

          嗯!當(dāng)一個(gè)所有初始的URL狀態(tài)都為outstanding;當(dāng)開(kāi)始爬取的時(shí)候狀態(tài)改為:processing;爬取完成狀態(tài)改為:complete;失敗的URL重置狀態(tài)為:outstanding。為了能夠處理URL進(jìn)程被終止的情況、我們?cè)O(shè)置一個(gè)計(jì)時(shí)參數(shù),當(dāng)超過(guò)這個(gè)值時(shí);我們則將狀態(tài)重置為outstanding。

          接下來(lái)看代碼部分

          首先我們需要一個(gè)模塊:datetime(這個(gè)模塊比內(nèi)置time模塊要好使一點(diǎn))

          下面是隊(duì)列的代碼:


          代碼1

          代碼2


          代碼3

          好了,隊(duì)列我們做好了,下面是獲取所有頁(yè)面的代碼。


          下面就是多進(jìn)程+多線程的下載代碼了:




          好啦!一個(gè)多進(jìn)程多線的爬蟲(chóng)就完成了。(其實(shí)可以設(shè)置一下MongoDB,然后調(diào)整一下連接配置,在多臺(tái)機(jī)器上跑哦??!嗯,就是超級(jí)簡(jiǎn)化版的分布式爬蟲(chóng)了,雖然很是簡(jiǎn)陋。

          大家可以參考上面代碼,單獨(dú)處理圖片地址試試(就是多個(gè)進(jìn)程直接下載圖片)應(yīng)該八分鐘能下載100套圖~


          當(dāng)然還有一種加速的方法叫做“異步”!因?yàn)榕老x(chóng)大部分時(shí)間都是在等待response中!‘異步’則能讓程序在等待response的時(shí)間去做的其他事情,當(dāng)然也會(huì)復(fù)雜許多。

          *聲明:本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來(lái)源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜。

          覺(jué)得不錯(cuò),點(diǎn)個(gè)“在看”然后轉(zhuǎn)發(fā)出去


          瀏覽 86
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产无遮挡又黄又爽免费网站 | 国产ww| 亚洲无码视频在线观看观看 | 91成人久久久 | 欧美综合网站 |