Python:利用 selenium 庫抓取動態網頁示例

前言

在抓取常規的靜態網頁時,咱們直接請求對應的 url 就能夠獲取到完整的 HTML 頁面,可是對於動態頁面,網頁顯示的內容每每是經過 ajax 動態去生成的,因此若是是用 urllib.request 直接獲取頁面的 HTML 時,就獲取不到咱們所想用的內容,這時咱們就能夠利用 selenium 庫就能夠得到咱們所須要的內容了。html

需安裝的三方庫

  • BeautifulSoup4
  • selenium
  • lxml

示例代碼

示例說明:獲取德邦官網設立了網點的市區名稱前端

import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless") #設置該參數使在獲取網頁時不打開瀏覽器

driver = webdriver.Chrome(chrome_options=chrome_options, executable_path="./chromedriver")
driver.get("https://www.deppon.com/deptlist/")
html = driver.page_source
driver.close()
soup = BeautifulSoup(html, 'lxml')
items = soup.select('div[class~="listA_Z"] a')
for item in items:
    print(item.string)

碰到的小問題

  1. 用 "pip install selenium" 安裝 selenium 庫時失敗。能夠利用下面的命令來安裝"pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org selenium"。
  2. 在使用時 webdriver.Chrome()時出現的問題,在網上看到的文章用的是火狐瀏覽器,他們直接使用 webdriver.Firefox()就能夠了,而我是用谷歌瀏覽器,我覺得用谷歌瀏覽器和用火狐瀏覽器同樣的,可是在運行時出錯了,後來再網上找了一下,是要在 selenium 官網下載Chrom Driver,而後在使用 webdriver.chorme()函數時,須要傳 executable_path 參數,該參數的值就是在 selenium 官網下載的 Chrome Driver.exe 文件所在的路徑。示例中我是把chromedriver.exe放在根目錄,因此代碼裏我用的是相對路徑( executable_path="./chromedriver")。

推薦

Chrom/firefox 瀏覽器插件:Katalon Recorder,Katalon Recorder是一個前端自動化測試插件,它能夠用來記錄你在網頁上的全部操做,最神奇的是它還能夠把記錄導出爲各類代碼,這其中就包含了Python2的代碼。有時借用它,甚至能夠不用去分析HTML的結構就能夠輕鬆地讓咱們獲取取得所須要的數據了,這對於那種HTML結構凌亂的網頁仍是頗有幫助的。python

相關文章
相關標籤/搜索