欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
小白學(xué) Python 爬蟲(chóng)(29):Selenium 獲取某大型電商網(wǎng)站商品信息

人生苦短,我用 Python

前文傳送門(mén):

小白學(xué) Python 爬蟲(chóng)(1):開(kāi)篇

小白學(xué) Python 爬蟲(chóng)(2):前置準備(一)基本類(lèi)庫的安裝

小白學(xué) Python 爬蟲(chóng)(3):前置準備(二)Linux基礎入門(mén)

小白學(xué) Python 爬蟲(chóng)(4):前置準備(三)Docker基礎入門(mén)

小白學(xué) Python 爬蟲(chóng)(5):前置準備(四)數據庫基礎

小白學(xué) Python 爬蟲(chóng)(6):前置準備(五)爬蟲(chóng)框架的安裝

小白學(xué) Python 爬蟲(chóng)(7):HTTP 基礎

小白學(xué) Python 爬蟲(chóng)(8):網(wǎng)頁(yè)基礎

小白學(xué) Python 爬蟲(chóng)(9):爬蟲(chóng)基礎

小白學(xué) Python 爬蟲(chóng)(10):Session 和 Cookies

小白學(xué) Python 爬蟲(chóng)(11):urllib 基礎使用(一)

小白學(xué) Python 爬蟲(chóng)(12):urllib 基礎使用(二)

小白學(xué) Python 爬蟲(chóng)(13):urllib 基礎使用(三)

小白學(xué) Python 爬蟲(chóng)(14):urllib 基礎使用(四)

小白學(xué) Python 爬蟲(chóng)(15):urllib 基礎使用(五)

小白學(xué) Python 爬蟲(chóng)(16):urllib 實(shí)戰之爬取妹子圖

小白學(xué) Python 爬蟲(chóng)(17):Requests 基礎使用

小白學(xué) Python 爬蟲(chóng)(18):Requests 進(jìn)階操作

小白學(xué) Python 爬蟲(chóng)(19):Xpath 基操

小白學(xué) Python 爬蟲(chóng)(20):Xpath 進(jìn)階

小白學(xué) Python 爬蟲(chóng)(21):解析庫 Beautiful Soup(上)

小白學(xué) Python 爬蟲(chóng)(22):解析庫 Beautiful Soup(下)

小白學(xué) Python 爬蟲(chóng)(23):解析庫 pyquery 入門(mén)

小白學(xué) Python 爬蟲(chóng)(24):2019 豆瓣電影排行

小白學(xué) Python 爬蟲(chóng)(25):爬取股票信息

小白學(xué) Python 爬蟲(chóng)(26):為啥買(mǎi)不起上海二手房你都買(mǎi)不起

小白學(xué) Python 爬蟲(chóng)(27):自動(dòng)化測試框架 Selenium 從入門(mén)到放棄(上)

小白學(xué) Python 爬蟲(chóng)(28):自動(dòng)化測試框架 Selenium 從入門(mén)到放棄(下)

目標

先介紹下我們本篇文章的目標,如圖:

本篇文章計劃獲取商品的一些基本信息,如名稱(chēng)、商店、價(jià)格、是否自營(yíng)、圖片路徑等等。

準備

首先要確認自己本地已經(jīng)安裝好了 Selenium 包括 Chrome ,并已經(jīng)配置好了 ChromeDriver 。如果還沒(méi)安裝好,可以參考前面的前置準備。

分析

接下來(lái)我們就要分析一下了。

首先,我們的搜索關(guān)鍵字是 iPhone ,直接先翻到最后一頁(yè)看下結果,發(fā)現有好多商品并不是 iPhone ,而是 iPhone 的手機殼,這個(gè)明顯不是我們想要的結果,小編這里選擇了一下品牌 Apple ,再翻到最后一頁(yè),這次就全都是手機了。

先把地址欄的地址 Copy 出來(lái)看一下,里面有很多無(wú)效參數:

https://search.jd.com/search?keyword=iPhone&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&ev=exbrand_Apple%5E&page=199&s=5933&click=0

如果問(wèn)小編怎么知道是無(wú)效參數還是有效參數,emmmmmmmmm

這個(gè)要么靠經(jīng)驗,一般大網(wǎng)站的參數的命名都是比較規范的,當然也不排除命名不規范的。還有一種辦法就是試,小編這邊試出來(lái)的結果是這樣滴:

https://search.jd.com/Search?keyword=iPhone&ev=exbrand_Apple

第一個(gè)參數 keyword 就是我們需要的商品名稱(chēng),第二個(gè)參數 ev 是品牌的參數。

接下來(lái)我們看如何獲取商品的詳細信息,我們使用 F12 打開(kāi)開(kāi)發(fā)者模式,使用看下具體的信息都放在哪里:

可以看到,我們想要獲取的信息在這個(gè)頁(yè)面的 DOM 節點(diǎn)中都能獲取到。

接下來(lái)因為我們是使用 Selenium 來(lái)模擬瀏覽器訪(fǎng)問(wèn)電商網(wǎng)站,所以后續的接口分析也就不需要做了,直接獲取瀏覽器顯示的內容的源代碼就可以輕松獲取到各種信息。

獲取商品列表頁(yè)面

首先,我們需要構造一個(gè)獲取商品列表頁(yè)面的 URL ,這個(gè)上面已經(jīng)得到了,接下來(lái)就是使用 Selenium 來(lái)獲取這個(gè)頁(yè)面了:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException

driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.set_window_size(1280,800)

def index_page(page):
    """
    抓取索引頁(yè)
    :param page: 頁(yè)碼
    """
    print('正在爬取第', str(page), '頁(yè)數據')
    try:
        url = 'https://search.jd.com/Search?keyword=iPhone&ev=exbrand_Apple'
        driver.get(url)
        if page > 1:
            input = driver.find_element_by_xpath('//*[@id="J_bottomPage"]/span[2]/input')
            button = driver.find_element_by_xpath('//*[@id="J_bottomPage"]/span[2]/a')
            input.clear()
            input.send_keys(page)
            button.click()
        get_products()
    except TimeoutException:
        index_page(page)

這里我們依然使用隱式等待來(lái)進(jìn)行 URL 訪(fǎng)問(wèn),這里小編通過(guò) xpath 的方式獲取到了整個(gè)頁(yè)面最下面的翻頁(yè)組件:

小編這里的翻頁(yè)實(shí)際上是使用這里的輸入框和后面的確認按鈕進(jìn)行的。

獲取商品詳細數據

這里其實(shí)有一個(gè)坑,JD 的首頁(yè)上的圖片是懶加載的,就是當頁(yè)面的滾動(dòng)條沒(méi)有滾到這個(gè)圖片可以顯示在屏幕上的位置的時(shí)候,這個(gè)圖片是不會(huì )加載出來(lái)的。這就造成了小編一開(kāi)始的只能獲取到前 4 個(gè)商品的圖片地址。

小編后來(lái)想了個(gè)辦法,使用 JavaScript 來(lái)模擬滾動(dòng)條滾動(dòng),先將所有的圖片加載出來(lái),然后再進(jìn)行數據的獲取,代碼如下:

def get_products():
    """
    提取商品數據
    """
    js = '''
    timer = setInterval(function(){
       var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
       var ispeed=Math.floor(document.body.scrollHeight / 100);
       if(scrollTop > document.body.scrollHeight * 90 / 100){
           clearInterval(timer);
       }
       console.log('scrollTop:'+scrollTop)
       console.log('scrollHeight:'+document.body.scrollHeight)
       window.scrollTo(0, scrollTop+ispeed)
    }, 20)
    '''
    driver.execute_script(js)
    time.sleep(2.5)
    html = driver.page_source
    doc = PyQuery(html)
    items = doc('#J_goodsList .gl-item .gl-i-wrap').items()
    i = 0
    for item in items:
        insert_data = {
            'image': item.find('.p-img a img').attr('src'),
            'price': item.find('.p-price i').text(),
            'name': item.find('.p-name em').text(),
            'commit': item.find('.p-commit a').text(),
            'shop': item.find('.p-shop a').text(),
            'icons': item.find('.p-icons .goods-icons').text()
        }
        i += 1
        print('當前第', str(i), '條數據,內容為:' , insert_data)

中間那段 js 就是模擬滾動(dòng)條向下滾動(dòng)的代碼,這里小編做了一個(gè)定時(shí)任務(wù),這個(gè)定時(shí)任務(wù)將整個(gè)頁(yè)面的長(cháng)度分成了 100 份,每 20 ms 就向下滾動(dòng) 1% ,共計應該總共 2s 可以滾到最下面,這里下面做了 2.5s 的睡眠,保證這個(gè)頁(yè)面的圖片都能加載出來(lái),最后再獲取頁(yè)面上的數據。

主體代碼到這里就結束了,剩下的代碼無(wú)非就是將數據保存起來(lái),不管是保存在數據中還是保存在 Excel 中,或者是 CSV 中,又或者是純粹的文本文件 txt 或者是 json ,都不難,小編這次就不寫(xiě)了,希望大家能自己完善下這個(gè)代碼。

運行的時(shí)候,可以看到一個(gè)瀏覽器彈出來(lái),然后滾動(dòng)條自動(dòng)以比較順滑的速度滾到最下方(小編為了這個(gè)順滑的速度調了很久),確保所有圖片都加載出來(lái),再使用 pyquery 獲取相關(guān)的數據,最后組成了一個(gè) json 對象,給大家看下抓取下來(lái)的結果吧:

Chrome 無(wú)界面模式

我們在爬取數據的時(shí)候,彈出來(lái)一個(gè)瀏覽器總感覺(jué)有點(diǎn)老不爽了,可以使用如下命令將這個(gè)瀏覽器隱藏起來(lái),不過(guò)需要的是 Chrome 比較新的版本。

# 開(kāi)啟無(wú)窗口模式
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options=chrome_options)

首先,創(chuàng )建 ChromeOptions 對象,接著(zhù)添加 headless 參數,然后在初始化 Chrome 對象的時(shí)候通過(guò) chrome_options 傳遞這個(gè) ChromeOptions 對象,這樣我們就可以成功啟用 Chrome 的Headless模式了。

FireFox

如果我們不想使用 Chrome 瀏覽器,還可以使用 FireFox 瀏覽器,前提是需要安裝好 FireFox 和對應的驅動(dòng) GeckoDriver ,并且完成相關(guān)配置,不清楚如何安裝的同學(xué)可以翻一翻前面的前置準備。

我們需要切換 FireFox 瀏覽器的時(shí)候,異常的簡(jiǎn)單,只需要修改一句話(huà)就可以了:

driver = webdriver.Firefox()

這里我們修改了 webdriver 初始化的方式,這樣在接下來(lái)的操作中就會(huì )自動(dòng)使用 FireFox 瀏覽器了。

如果 Firefox 也想開(kāi)啟無(wú)界面模式的話(huà),同樣也是可以的,和上面 Chrome 開(kāi)啟無(wú)界面模式大同小異:

# FireFox 開(kāi)啟無(wú)窗口模式
firefox_options = webdriver.FirefoxOptions()
firefox_options.add_argument('--headless')

driver = webdriver.Firefox(firefox_options=firefox_options)

一樣是在 Webdriver 初始化的時(shí)候增加 headless 參數就可以了。

好了,本篇的內容就到這里了,希望各位同學(xué)可以自己動(dòng)手練習下哦~~~

注意: 本文相關(guān)內容僅做學(xué)習使用,使用時(shí)請遵守國家相關(guān)法律規定。

示例代碼

本系列的所有代碼小編都會(huì )放在代碼管理倉庫 Github 和 Gitee 上,方便大家取用。

示例代碼-Github

示例代碼-Gitee

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
在Python Selenium中為Chrome和Firefox瀏覽器開(kāi)啟headless模式 | 李輝的個(gè)人網(wǎng)站
selenium+python自動(dòng)化85-Chrome靜默模式(headless)
python selenium瀏覽器調用(chrome、ie、firefox)
selenium加載配置參數,讓chrome瀏覽器不出現‘Chrome正在受到自動(dòng)軟件的控制’的提示語(yǔ),以及后臺靜默模式啟動(dòng)自動(dòng)化測試,不占用桌面的方法
Selenium 常用代碼及 Tips
chrome driver
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久