專案介紹:
本文主要介紹利用selenium庫對動態渲染頁面的抓取,并介紹一些反爬的操作,以淘寶網為例,Selenium簡介:
- Selenium是一個自動化測驗工具,利用它可以實作驅動瀏覽器,模擬人真實的行為,如點擊,下拉等操作;
- 在訪問服務器方面,它的安全性是高于requests庫的,不需要構造虛擬請求,所有的操作都真實發生;
- 同時,selenium獲取網頁資訊的方法是基于網頁的elements而不是network,即獲得當前頁面封裝后的代碼(通常瀏覽器的network獲得服務器的檔案是json或html格式,需要決議方才組成elements);
- Selenium主要解決JavaScript動態渲染頁面的資料抓取;
- Selenium支持多種瀏覽器,本文以Chrome為例,需要瀏覽器驅動webdriver,下載地址為:ChromeDriver ,選擇對應瀏覽器的相對應版本進行安裝;
問題描述:
from urllib.parse import quote
from selenium import webdriver
browser=webdriver.Chrome()
browser.maximize_window()
browser.get('https://s.taobao.com/search?q='+quote('iphone'))

- 這里是正常情況下使用selenium庫中的webdriver去請求淘寶網出現的情況,遇見了輸入賬號密碼的情況,下面以此問題展開介紹解決方式,
解決方案:
修改options屬性:
- webdriver.Chrome()具有多個屬性,其中之一為options屬性,默認值為None;
- options屬性可以通過Options類來進行賦值,傳入到webdriver.Chrome()中,進而改變瀏覽器的操作方式,下面的代碼塊即為Options類,它具有很多屬性,我們就是通過改變這些屬性值來實作網頁的請求;
代碼如下(示例):
class Options(object):
KEY = "goog:chromeOptions"
def __init__(self):
self._binary_location = ''
self._arguments = []
self._extension_files = []
self._extensions = []
self._experimental_options = {}
self._debugger_address = None
self._caps = DesiredCapabilities.CHROME.copy()
具體操作如下:
- 通過self._arguments = []屬性,在本地創建一個Chrome配置目錄,這樣做的原因是因為:創建一個新的目錄就不會影響源目錄,其次如果我們用已經添加這個屬性的webdriver.Chrome()會記錄我們之前的資訊,如登陸的賬號密碼等,這樣就可以解決登陸問題;
代碼如下(示例):
option.add_argument('--user-data-dir=~/code/chrome-test')
–user-data-dir是組態檔變數名,~/code/chrome-test是放入組態檔的目錄;
如果你已經運行了,并且登陸了淘寶網的賬號,運行代碼,進行了前幾次訪問可能會正常,但是之后就會出現了下圖的問題

- 我們可以再次配置self._arguments = []屬性,修改我們的請求頭即‘–user-agent’,這里的請求頭可以從自己的Google瀏覽器里去查找,在地址搜索欄中輸入chrome://version/,獲取自己的Chrome的配置資訊,得到的–user-agent;
代碼如下(示例):
option.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
- 為了安全起見,我們再把chorme的頭部的自動化檢測資訊消除掉,因為往往大多的反爬蟲機制都是檢測此資訊;
option.add_argument("--disable-blink-features=AutomationControlled")
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option('useAutomationExtension', False)

- 改變以上屬性后,則可以呈現出淘寶商品頁面如下;

整體代碼如下(示例):
from selenium.webdriver.chrome.options import Options
option = Options()
option.add_extension("/Users/sunsky/Desktop/Crawler/ScrapyTools/mcbpblocgmgfnpjjppndjkmgjaogfceg/take-webpage-screenshots.crx")
option.add_experimental_option("excludeSwitches", ["enable-automation"])
option.add_experimental_option('useAutomationExtension', False)
option.add_argument("--disable-blink-features=AutomationControlled")
option.add_argument('--user-data-dir=~/code/chrome-test')
option.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
browser=webdriver.Chrome(options=option)
資料抓取:
未完待續!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/274738.html
標籤:python
