若有收穫,就點個贊吧
本篇繼之前的python爬蟲庫的使用,也是為技術性的文章篇,,主要 是講解Selenium的使用,至於 庫的安裝之前已經分享過這裡就不再介紹了。
在進行爬蟲前,我們這裡講下爬蟲代理,免費的代理我試著不行,暫時不研究了,寫一下付費的代理是怎麼使用的,我購買的是億牛雲爬蟲代理,購買之後直接在賬號裡面獲取代理引數配置就可以使用。怎麼使用代理,這個分為好幾個情況,我使用的是Selenium,就寫這個的代理使用過程。程式碼部分如下:
from selenium import webdriver import string import zipfile # 代理伺服器(產品官網 ) proxyHost = "t.16yun.cn" proxyPort = "3111" # 代理驗證資訊 proxyUser = "username" proxyPass = "password" def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password, scheme='http', plugin_path=None): if plugin_path is None: plugin_path = r'/tmp/{}_{}@t.16yun.zip'.format(proxy_username, proxy_password) manifest_json = """ { "version": "1.0.0", "manifest_version": 2, "name": "16YUN Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "<all_urls>", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] }, "minimum_chrome_version":"22.0.0" } """ background_js = string.Template( """ var config = { mode: "fixed_servers", rules: { singleProxy: { scheme: "${scheme}", host: "${host}", port: parseInt(${port}) }, bypassList: ["localhost"] } }; chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); function callbackFn(details) { return { authCredentials: { username: "${username}", password: "${password}" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: ["<all_urls>"]}, ['blocking'] ); """ ).substitute( host=proxy_host, port=proxy_port, username=proxy_username, password=proxy_password, scheme=scheme, ) print(background_js) with zipfile.ZipFile(plugin_path, 'w') as zp: zp.writestr("manifest.json", manifest_json) zp.writestr("background.js", background_js) return plugin_path proxy_auth_plugin_path = create_proxy_auth_extension( proxy_host=proxyHost, proxy_port=proxyPort, proxy_username=proxyUser, proxy_password=proxyPass) option = webdriver.ChromeOptions() option.add_argument("--start-maximized") # 如報錯 chrome-extensions # option.add_argument("--disable-extensions") option.add_extension(proxy_auth_plugin_path) # 關閉webdriver的一些標誌 # option.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome( chrome_options=option, executable_path="./chromdriver" ) # 修改webdriver get屬性 # script = ''' # Object.defineProperty(navigator, 'webdriver', { # get: () => undefined # }) # ''' # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script}) driver.get(")
在爬取一個新網站的時候,發現網站上的網頁資料全都是動態載入的,瀏覽器載入之後資料才會顯示,這個時候BeautifulSoup就沒用了,完全獲取不到HTML節點,一般這種情況,建議使用Selenium進行動態載入,我通過這個已經獲取了不少資料了。