0. 前言
說到Python爬蟲,就一定會涉及到“反爬”策略,就會遇到“爬取動態頁面元素”的問題,如果目標網站沒有其他的反爬措施,那麼“動態元素”就是我們這裏要解決的唯一難題。而解決的方式就是簡單粗暴地想辦法模擬人在瀏覽器上操作,進而觸發相應動態元素的加載,也就指向了強大的Selenium
。
衆所周知,Chrome
是Google家的瀏覽器,在2007年開始推出了自己的無頭模式。而我們曾經熟悉的PhantomJS
卻在之後不再被Selenium
所支持(目前只支持Chrome
和Firefox
的無頭模式,據說這是一種大廠效應23333)。在MacOS
下,坑會少一些,但放在我的服務器上坑就多了起來。
注:以下配置過程請在非root
用戶賬號下完成。
1. 安裝chrome
1.1 添加repo
源
$ sudo vi /etc/yum.repos.d/google.repo
在打開的空文件中填入以下內容
[google]
name=Google-x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
1.2 yum
安裝
$ sudo yum update
$ sudo yum install google-chrome-stable
2. 安裝chromedriver
2.1 查看chrome
的版本
$ google-chrome --version
2.2 下載chromedriver
請注意chrome
和chromedriver
的區別,前者是瀏覽器,後者是其驅動,而二者缺一不可。推薦在官網下載最新的chromedriver
,如果沒有“梯子”,這裏也有各個版本的chromedriver
,而你要選擇的版本要與你的chrome
版本對應(如ChromeDriver 2.46
支持 Chrome v71-73
)。
2.3 添加至環境變量$PATH
$ sudo vim ~/.bash_profile
打開後在適當的位置添加:
(假設你把chromedriver
放到了/home/xxx/drivers/bin/
目錄下)
export PATH=/home/xxx/drivers/bin:$PATH
在CentOS
中,更推薦在最後export PATH
,而前面加上一行賦值
PATH=$PATH:/home/xxx/drivers/bin
這兩種方式作用上是完全等價的。
3. 安裝selenium
selenium
可以在你項目的虛擬環境中簡單地用pip
安裝
$ pip3 install selenium
4. 腳本測試
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
DRIVER_PATH = '/home/xxx/drivers/bin/chromedriver'
if __name__ == "__main__":
# 設置瀏覽器
options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--headless') # 無頭參數
options.add_argument('--disable-gpu')
# 啓動瀏覽器
driver = Chrome(executable_path=DRIVER_PATH, options=options)
# 訪問目標URL
driver.get('https://www.baidu.com/')
print(driver.page_source)
driver.close()
driver.quit()
注意,這裏的--no-sandbox
和--headless
是必須的,而且必須按照--no-sandbox
在最前面的順序,否則會報一些非常摸不着頭腦的錯誤(這就是最坑的地方)。
希望看到這篇文章的你能解決想要解決的問題。
作者:deBroglie
鏈接:https://www.jianshu.com/p/e2a6bb6550cc
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。