西刺網(wǎng)爬蟲-python實(shí)踐

本次引入了多進(jìn)程和異常捕捉的概念,python實(shí)現(xiàn)的并行程序有很多需要注意的地方,初學(xué)者如我也是研究了許久,才下得手。
這次的代碼只是簡單的應(yīng)用,并行爬蟲的優(yōu)勢大家可以自行度娘谷哥。
選取西刺網(wǎng)主要為后期建立代理池做個(gè)儲(chǔ)備。
BTW,多進(jìn)程下異常捕捉也是個(gè)需要我們關(guān)注的點(diǎn),要好好學(xué)習(xí)鉆研!

import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool,freeze_support
import traceback
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
xiciip=['http://www.xicidaili.com/nn/{page}',
        'http://www.xicidaili.com/nt/{page}',
        'http://www.xicidaili.com/wn/{page}',
        'http://www.xicidaili.com/wt/{page}']

def getIPList(starturl):
    iplist = []
    try:
        for page in range(1,2):
            resp = requests.get(starturl.format(page=page),headers=headers)
            resp.raise_for_status()
            genIPitem(resp.text,iplist)
    except Exception as e:
        print('erro raised',e)
        traceback.print_exc()
    finally:
        pass
    print(iplist) 

def genIPitem(html,iplist):
    bs = BeautifulSoup(html,'html.parser')
    for line in bs.find_all('tr')[1::]:
        item = {}
        details = line.find_all('td')[1:6]
        item['ip'] = details[0].string
        item['port'] = details[1].string
        item['location'] = details[2].a.string if details[2].a is not None else details[2].string.strip()
        item['protocol'] = details[-1].string
        item['stype'] = details[-2].string
        iplist.append(item)

#單進(jìn)程
#for url in xiciip:
#   getIPList(url)

#以下為多進(jìn)程代碼

if __name__ == '__main__':
    freeze_support() 
    pool = Pool()
    pool.map(getIPList,xiciip)
    pool.close()
    pool.join()
    print('bug completed')

西刺網(wǎng)爬取很簡單,沒啥難度。不過官方有限制,一分鐘內(nèi)訪問次數(shù)過多會(huì)被禁止IP,得等待1分鐘之后才可以解禁,具體的爬取規(guī)范大家可以到官網(wǎng)上看看。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 又來到了一個(gè)老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問題開始,來談?wù)劜?..
    tangsl閱讀 4,320評(píng)論 0 23
  • 2018年7
    鄔愛萍閱讀 582評(píng)論 0 1
  • 你憑什么跑贏對手? 最近看了一個(gè)老華為的人寫的華為海外拓展的書,很有啟迪!華為從一個(gè)小的私營企業(yè)做到通訊業(yè)的巨頭,...
    D071_武漢_夏至幸閱讀 317評(píng)論 0 1
  • border-image有以下幾個(gè)重要的屬性需要了解一下: round 會(huì)自動(dòng)調(diào)整尺寸,完整顯示邊框圖片。 rep...
    博為峰51Code教研組閱讀 438評(píng)論 0 0
  • 我是一個(gè)粗線條的女生,不太記得任何有意義的節(jié)日,也不熱衷過它們。但是,你都記得,你會(huì)計(jì)劃各種小細(xì)節(jié),雖然每一次都會(huì)...
    曹佑閱讀 433評(píng)論 0 1

友情鏈接更多精彩內(nèi)容