使用Selenium获取当当网异步加载的部分分类数据
生活随笔
收集整理的這篇文章主要介紹了
使用Selenium获取当当网异步加载的部分分类数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文記錄了我學習selenium的一個小測試,目的是獲取當當網這部分異步加載的分類信息
在網頁源碼中無法直接定位到這部分元素,需要通過selenium模擬鼠標移動hover操作才能獲取這部分數據
環境條件:
- python 3.8(2.5以上應該都行,涉及到2.5版本之后異常的基類變成了BaseException,代碼中有用到)
- 谷歌驅動下載及環境變量配置(網上相關博文很多,這里不贅述了)
- selenium安裝(安裝:pip install selenium、查看:pip list)
網頁結構分析:
要爬取數據,分析網頁源碼結構是一個很重要的部分,
就我的理解來看,對網頁結構的理解決定了你的代碼是否能夠做到簡潔明了
不同的人對同一網頁源碼結構可能有不同的理解,爬取數據的代碼邏輯也可以不盡相同
建議讀者自己分析一遍網頁源碼結構,我的實現方式不一定是最好的,具體分析見代碼注釋
剛學爬蟲,如果有不當之處還望大佬們不吝賜教,(●ˇ?ˇ●)
運行結果:
python代碼及詳細注釋:
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome() # 獲取谷歌瀏覽器驅動 driver.get("http://www.dangdang.com/") # 打開網址# driver.maximize_window() # 窗口最大化try:# 顯性等待 WebDriverWait,需要與 until 或 until_not 配合# 最長等待時間 5 秒,每 0.5 秒檢查 id=“li_label_1” 的元素是否加載完成# 加載完成:返回定位的 id=“li_label_1” 的元素并執行下一步# 未加載完成:繼續等待,直到超過最長等待時間=》報錯(一般是網速問題)ele = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "li_label_1")))ActionChains(driver).move_to_element(ele).perform() # 操作鏈,這里執行鼠標移動到ele元素上的操作 except BaseException as msg: # BaseException 是異常的基類,可以接收所有類型的異常print(msg) # 打印報錯信息 message# 要獲取的數據是異步加載的,直接在頁面源碼中定位是找不到的,所以需要先執行鼠標移動到ele元素上的操作才能獲取數據 div_left_box = driver.find_element_by_xpath('//*[@id="__ddnav_sort1"]/div') # xpath定位element,找到圖書、童書對應的盒子 # 分析網頁結構可以知道,left_box中的每一行數據對應一個li元素,找到所有的li即可 liItems = div_left_box.find_elements_by_tag_name("li") # 通過tag_name定位elementsfor liItem in liItems:# 分析 left_box 的源碼,每個 li 標簽中有一個 h4 標簽和若干個 a 標簽title = liItem.find_element_by_css_selector("h4").text # 通過標簽名定位元素并獲取文本內容aItems = liItem.find_elements_by_css_selector("a") # 獲取 li 中的所有 a 元素data = [] # 聲明列表for aItem in aItems: # 遍歷 a 元素 并逐一加入到列表 data 中data.append(aItem.text)print(title + ":" + str(data)) # 打印這一行 li 的數據總結
以上是生活随笔為你收集整理的使用Selenium获取当当网异步加载的部分分类数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯云服务器迁移报错Other go2t
- 下一篇: 中国现代书画家——袁晓丹、潘文兵、郑锋等