JavaScript 動態渲染的頁面不止 Ajax 這一種
另外有的ajax渲染接口含有不少加密參數,難以直接找出其規律
經過模擬瀏覽器運行的方式來實現,Selenium、Splash、PyV八、Ghost 等
7.1 Selenium的使用
自動化測試工具,支持多種瀏覽器。爬蟲中主要用來解決js渲染問題
用 Selenium 來驅動瀏覽器加載網頁的話,能夠直接拿到JavaScript 渲染的結果了,加密不用再擔憂。
1- 聲明瀏覽器對象
browser = webdriver.Chrome()
2- 訪問頁面
browser.get('https://www.taobao.com')
3- 查找節點
input_first = browser.find_element(By.ID, 'q') #單個節點
lis = browser.find_elements_by_css_selector('.service-bd li')
4- 節點交互
...
5- 獲取節點信息
經過 page_source 屬性能夠獲取網頁的源代碼,獲取源代碼以後就能夠使用解析庫如正則、BeautifulSoup、PyQuery 等來提取信息了。
不過 Selenium 已經提供了選擇節點的方法,返回WebElement 類型,能夠經過相關方法或屬性來解析
6- 獲取屬性
7- 切換frame
8- 延時等待
確保節點已經加載出來
- 隱式等待
當查找節點而節點並無當即出現的時候,隱式等待將等待一段時間再查找 DOM,默認的時間是 0。 implicitly_wait()
- 顯式等待
指定好要查找的節點,而後指定一個最長等待時間。若是在規定時間內加載出來了這個節點,那就返回查找的節點,若是到了規定時間依然沒有加載出該節點,則會拋出超時異常。