Python 爬蟲闖關(guān)(第一關(guān))

在學(xué)習(xí)爬蟲時(shí),遇到了一個(gè)有意思的網(wǎng)站,這個(gè)網(wǎng)站設(shè)置了幾個(gè)關(guān)卡,需要經(jīng)過爬蟲進(jìn)行闖關(guān),隨著關(guān)卡的網(wǎng)后,難度不斷增加,在闖關(guān)的過程中需要學(xué)習(xí)不同的知識(shí),你的爬蟲水平也自然隨之提高。

今天我們先來第一關(guān),訪問http://www.heibanke.com/lesson/crawler_ex00/

第一關(guān)
第一關(guān)

按照提示,我們把數(shù)字放到地址欄的后面,再次進(jìn)行訪問:

再次訪問
再次訪問

發(fā)現(xiàn),還要再用新的數(shù)字放在地址欄進(jìn)行訪問,我們可以猜測(cè)了,第一關(guān)是將頁面出現(xiàn)的數(shù)字填寫到當(dāng)前 url 的尾部進(jìn)行訪問,然后會(huì)得到一個(gè)新的數(shù)字,再用它替換 url 中的尾部數(shù)字,這樣不斷循環(huán)往復(fù),直到頁面出現(xiàn)成功標(biāo)識(shí):

中間環(huán)節(jié)頁面
中間環(huán)節(jié)頁面

那么思路也有了:

  1. 解析頁面中的數(shù)字;
  2. 將數(shù)字拼接成新的 URL;
  3. 訪問新的 URL,重復(fù)第 1 步;
  4. 直至頁面沒有數(shù)字可以解析到!

邏輯比較簡單,這里我們直接上代碼了:

BeautifulSoup 實(shí)現(xiàn)

# coding=utf-8

import requests, bs4, re

url = 'http://www.heibanke.com/lesson/crawler_ex00/'

while True:
    # download the page
    print("forward to page %s ..." % url)
    response = requests.get(url)
    print("the return code : " + str(response.status_code))

    soup = bs4.BeautifulSoup(response.text, "html.parser")

    # 獲取頁面數(shù)字
    comic = soup.select('h3')
    print(comic[0].getText())
    number = re.findall("\d+", comic[0].getText())
    if number == []:
        print('The end.')
        break;
    else:
        url = 'http://www.heibanke.com/lesson/crawler_ex00/' + number[0] # 拼接新地址
程序運(yùn)行結(jié)果
程序運(yùn)行結(jié)果

selenium 實(shí)現(xiàn)

# coding=utf-8

import requests, re
from selenium import webdriver

url = 'http://www.heibanke.com/lesson/crawler_ex00/'

browser = webdriver.Firefox()

while True:
    # download the page
    print("Forward to page %s ..." % url)
    browser.get(url)
    elem = browser.find_element_by_tag_name('h3')

    # get the url of the for the next page
    print(elem.text)
    number = re.findall("\d+", elem.text)
    if number == []:
        print('The end.')
        browser.quit()
        break;
    else:
        url = 'http://www.heibanke.com/lesson/crawler_ex00/' + number[0] # 拼接新地址

到這里我們才能看到最終成功的頁面長這樣:

最終頁面
最終頁面

好了,第一關(guān)相對(duì)來說比較容易,下次我們來搞一下第二關(guān),又興趣的可以自己先上手攻取下了~


如果覺得有用,歡迎關(guān)注我的微信,一起學(xué)習(xí),共同進(jìn)步,不定期推出贈(zèng)書活動(dòng)~

你的關(guān)注是對(duì)我最大的鼓勵(lì)!
你的關(guān)注是對(duì)我最大的鼓勵(lì)!

最近搜集到慕課網(wǎng)視頻,視頻內(nèi)容涵蓋 Python、Java、PHP、前端、小程序、算法、架構(gòu)、數(shù)據(jù)庫等等!關(guān)注本公眾號(hào),后臺(tái)回復(fù)「慕課網(wǎng)」即可獲取下載地址。

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

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

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