爬蟲篇 動態網頁的處理方式(下) 模擬瀏覽器行為

2021-08-19 23:50:16 字數 2332 閱讀 2461

前面的例子中,我們使用webkit庫,可以自定義瀏覽器渲染引擎,這樣就可以完全控制想要執行的行為。如果不需要那麼高的靈活性,那麼還有乙個不錯的替代品 selenium 可以選擇,它提供了使瀏覽器自動化的api 介面。

selenium 是乙個用於web應用程式測試的工具。selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援市面上幾乎所有的主流瀏覽器。

本來打算使用的是selenium + phantomjs的組合,但發現chrome以及firefox也相繼推出無頭 ( headless ) 瀏覽器模式,個人比較傾向chrome。本文採用的是selenium+chrome的組合。

運用到爬蟲中的思路是:

# coding=utf-8

import time

from selenium import webdriver

class

sinabookspider

(object):

# 建立可見的chrome瀏覽器, 方便除錯

driver = webdriver.chrome()

# 建立chrome的無頭瀏覽器

# opt = webdriver.chromeoptions()

# opt.set_headless()

# driver = webdriver.chrome(options=opt)

driver.implicitly_wait(10)

total = 1526

# 預先計算的總資料量

count = 0

# 已爬取的資料量

# 記錄解析以及翻頁位置

location = 0

click_times = 0

defrun

(self):

""" 開始爬蟲

:return:

"""# get方式開啟網頁

self.driver.get("")

self.parselist()

while self.count < self.total:

if self.click_times is

2: self.driver.find_element_by_css_selector('#subshowcontent1_page > span:nth-child(6) > a').click()

# 等待頁面載入完成

time.sleep(5)

self.click_times = 0

self.location = 0

else:

self.driver.find_element_by_css_selector('#subshowcontent1_loadmore').click()

# 等待頁面載入完成

time.sleep(3)

self.click_times += 1

# 分析載入的新內容,從location開始

self.parselist()

self.driver.quit()

defparselist

(self):

""" 解析列表

:return:

"""divs = self.driver.find_elements_by_class_name("item")

for i in range(self.location, len(divs)):

link = divs[i].find_element_by_tag_name('a').get_attribute("href")

print link

self.location += 1

self.count += 1

print self.count

if __name__ == '__main__':

spider = sinabookspider()

spider.run()

如果你想實際執行上述**,請在執行之前確定:安裝了與瀏覽器版本對應的驅動,並正確的新增到了環境變數中。

有關這三種方式的講解可以看這裡:python selenium —— 一定要會用selenium的等待,三種等待方式解讀 —— 灰藍的部落格

到此,我們介紹了動態頁面處理的兩種思路:

做一下簡單的比較:

採用哪種方法,取決於爬蟲活動中的具體情況:

個人認為模擬瀏覽器的方法應盡量避免,因為瀏覽器環境對記憶體和cpu的消耗非常多,可以作為短期決絕方案,此時長期的效能和可靠性並不算重要;而作為長期解決方案,我會盡最大努力對**進行逆向工程。

Java java爬蟲獲取動態網頁的資料

前段時間一直在研究爬蟲,抓取網路上的特定的資料,如果只是靜態網頁就是再簡單不過了,直接使用jsoup document doc jsoup.connect url timeout 2000 get 獲取到document然後就想幹嘛就幹嘛了,但是一旦碰到一些動態生成的 就不行了,由於資料是網頁載入完...

關於網頁快照的處理方式

秀一下我自己的做法吧!1 頁面中的處理很簡單 var url websnap?url url fresh math.random 我這個是提交給了servlet了。window.open url 2 servlet的處理方式 讀磁碟中某個檔案 param fname return string pu...

爬蟲抓取動態網頁的6種方法

對於動態載入的網頁,我們想要獲取其網頁資料,需要了解網頁是如何載入資料的,該過程就被成為逆向回溯。對於使用了ajax 請求技術的網頁,我們可以找到ajax請求的具體鏈結,直接得到ajax請求得到的資料。需要注意的是,構造ajax請求有兩種方式 對於這兩種方式,只要建立並返回了xmlhttpreque...