Python爬蟲實戰1-解決需要爬取網頁N秒後的內容的需求

小生博客: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對象訪問獲取到的頁面內容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章