1. 程式人生 > >Python 爬蟲闖關(第一關)

Python 爬蟲闖關(第一關)

在學習爬蟲時,遇到了一個有意思的網站,這個網站設定了幾個關卡,需要經過爬蟲進行闖關,隨著關卡的網後,難度不斷增加,在闖關的過程中需要學習不同的知識,你的爬蟲水平也自然隨之提高。

第一關

按照提示,我們把數字放到位址列的後面,再次進行訪問:

再次訪問

發現,還要再用新的數字放在位址列進行訪問,我們可以猜測了,第一關是將頁面出現的數字填寫到當前 url 的尾部進行訪問,然後會得到一個新的數字,再用它替換 url 中的尾部數字,這樣不斷迴圈往復,直到頁面出現成功標識:

中間環節頁面

那麼思路也有了:

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

邏輯比較簡單,這裡我們直接上程式碼了:

BeautifulSoup 實現

# 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")

    # 獲取頁面數字
    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] # 拼接新地址

程式執行結果

selenium 實現

# 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] # 拼接新地址

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

最終頁面

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

如果覺得有用,歡迎關注我的微信,一起學習,共同進步,不定期推出贈書活動~

你的關注是對我最大的鼓勵!

最近蒐集到慕課網視訊,視訊內容涵蓋 Python、Java、PHP、前端、小程式、演算法、架構、資料庫等等!關注本公眾號,後臺回覆「慕課網」即可獲取下載地址。