小生博客:http://xsboke.blog.51cto.com
如果有疑問,請點擊此處,然後發表評論交流,作者會及時回覆。
-------謝謝您的參考,如有疑問,歡迎交流
前引:
當你需要爬取的頁面內容在訪問頁面5秒後纔會出現,
這時使用python的requests模塊就很難爬取到你想要的內容了.
requests和selenium的不同:
requests是通過模擬http請求來實現瀏覽網頁的
selenuim是通過瀏覽器的API實現控制瀏覽器,從而達到瀏覽器自動化
上面說了,selenium是通過控制瀏覽器實現訪問的,但是linux的命令行是不能打開瀏覽器的,
幸運的是Chrome和Firefox有一個特殊的功能headless(無頭)模式.(就是wujie面模式)
通過headless模式可以實現在linux命令行控制瀏覽器。
接下來要實現的就是在linux命令行界面通過Chrome的headless模式,實現獲取訪問網頁5秒後的內容
一. 環境準備
1. 安裝谷歌瀏覽器linux版及其依賴包.
[root@localhost ~]# wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
[root@localhost ~]# yum localinstall google-chrome-stable_current_x86_64.rpm --nogpgcheck
2. 下載selenium連接chrome的驅動程序(要下載和chrome對應的版本).
[root@localhost ~]# google-chrome --version
Google Chrome 72.0.3626.109
[root@localhost ~]# https://chromedriver.storage.googleapis.com/72.0.3626.69/chromedriver_linux64.zip
[root@localhost ~]# unzip chromedriver_linux64.zip
[root@localhost ~]# chmod +x chromedrive
3. 安裝python需要模塊
# beautifulsoup4是一個html,xml解析器
[root@localhost ~]# pip install beautifulsoup4 selenium
二. 開始實現獲取網頁5秒後的數據
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
from bs4 import BeautifulSoup
from selenium import webdriver
opt = webdriver.ChromeOptions() # 創建chrome對象
opt.add_argument('--no-sandbox') # 啓用非沙盒模式,linux必填,否則會報錯:(unknown error: DevToolsActivePort file doesn't exist)......
opt.add_argument('--disable-gpu') # 禁用gpu,linux部署需填,防止未知bug
opt.add_argument('headless') # 把chrome設置成wujie面模式,不論windows還是linux都可以,自動適配對應參數
driver = webdriver.Chrome(executable_path=r'/root/chromedriver',options=opt) # 指定chrome驅動程序位置和chrome選項
driver.get('https://baidu.com') # 訪問網頁
time.sleep(5) # 等待5秒
content = driver.page_source # 獲取5秒後的頁面
soup = BeautifulSoup(content,features='html.parser') # 將獲取到的內容轉換成BeautifulSoup對象
driver.close()
print(soup.body.get_text()) # 通過BeautifulSoup對象訪問獲取到的頁面內容