国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲實(shí)戰(zhàn)——Lazada商品數(shù)據(jù)(selenium自動(dòng)化爬蟲,xpath定位)

這篇具有很好參考價(jià)值的文章主要介紹了Python爬蟲實(shí)戰(zhàn)——Lazada商品數(shù)據(jù)(selenium自動(dòng)化爬蟲,xpath定位)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

? ? ? ? 在此說明,這個(gè)項(xiàng)目是我第一次真正去爬的一個(gè)網(wǎng)站,里面寫的代碼我自己都看不下去,但是已經(jīng)不想花時(shí)間去重構(gòu)了,所以看個(gè)樂呵就好,要噴也可以(下手輕一點(diǎn))。這篇文算是記錄我的學(xué)習(xí)中出現(xiàn)的一些問題,不建議拿來學(xué)習(xí)和真拿我的代碼去爬Lazada的數(shù)據(jù),當(dāng)然看看我的思路還是可以的。

目標(biāo)

? ? ? ? 我的目標(biāo)是拿到個(gè)分類下的商品數(shù)據(jù)

lazada爬蟲,python,windows,pycharm,網(wǎng)絡(luò)爬蟲

?lazada爬蟲,python,windows,pycharm,網(wǎng)絡(luò)爬蟲

?爬蟲思路

? ? ? ? 1.獲取各個(gè)分類的鏈接

? ? ? ? 2.獲取各個(gè)分類下的商品鏈接

? ? ? ? 3.通過商品鏈接獲取到需要的商品數(shù)據(jù)

需要用到的包和工具準(zhǔn)備

import time
import openpyxl
import requests
import re
from lxml import etree
from selenium.webdriver.common.by import By
import bag  # 這個(gè)包是別人寫好給我的,我會(huì)在下面把用到的方法放出來

?????????這個(gè)bag包里面的很多參數(shù)是不起作用的,可以不用管它。這里給Chrome瀏覽器設(shè)置了一個(gè)9222端口方便用程序控制自己打開的瀏覽器

 class Bag:   
    def web_debug():
        chrome_options = Options()
        chrome_options.add_experimental_option('debuggerAddress', '127.0.0.1:9222')
        chrome_options.page_load_strategy = 'eager'
        chrome_options.add_argument('–disable-gpu')  # 谷歌文檔提到需要加上這個(gè)屬性來規(guī)避bug
        chrome_options.add_argument('--incognito')
        chrome_options.add_argument('--disable-javascript')
        chrome_options.add_argument('--enable-automation')
        chrome_options.add_argument('--no-sandbox')  # 解決DevToolsActivePort文件不存在的報(bào)錯(cuò)
        chrome_options.add_argument('blink-settings=imagesEnabled=false')  # 不加載圖片, 提升速度
        web = Chrome(service=Service(), options=chrome_options)
        return web

右鍵Chrome瀏覽器的屬性把目前路徑改成如下:

C:\Program Files\Google\Chrome\Application\chrome.exe (括號(hào)里面的是解釋用的時(shí)候記得刪掉:前面是你谷歌瀏覽器的放在文件夾里的位置)[--headless] --remote-debugging-port=9222 --user-data-dir="D:\工作文件\data? (還要?jiǎng)?chuàng)建一個(gè)放數(shù)據(jù)的文件夾)

設(shè)置好后就可以win+R打開運(yùn)行窗口,輸入cmd打開Windows命令行窗口:

輸入如下命令:

cd C:\Program Files\Google\Chrome\Application\ (瀏覽器在電腦中的位置)
chrome.exe --remote-debugging-port=9222 --user-data-dir="D:\工作文件\data"

就可以打開一個(gè)瀏覽器,到時(shí)候我們讓程序通過端口控制自己打開的瀏覽器,這樣好突破網(wǎng)站的反爬手段

商品鏈接爬取

講了那么多終于開始準(zhǔn)備爬蟲了(再次吐槽自己寫的是什么鬼東西搞這么復(fù)雜),下面是進(jìn)行第一步拿到分類的鏈接。

通過下一頁還有F12的一個(gè)觀察,發(fā)現(xiàn)鏈接數(shù)據(jù)都是通過訪問如下鏈接請(qǐng)求回來的

lazada爬蟲,python,windows,pycharm,網(wǎng)絡(luò)爬蟲

?這是第一個(gè)分類第三頁的鏈接:https://www.lazada.sg/shop-power-banks/?ajax=true&isFirstRequest=true&page=3&spm=a2o42.searchlistcategory.cate_1_1.2.46115305qPLfPu

?然后?之后的鏈接都是可以不用要的,但是為了頁數(shù)我們只把page= 后面的鏈接刪了,page是控制頁數(shù)的參數(shù)

整理如下

https://www.lazada.sg/shop-power-banks/?ajax=true&isFirstRequest=true&page=3

?再觀察發(fā)現(xiàn)鏈接中的這部分

lazada爬蟲,python,windows,pycharm,網(wǎng)絡(luò)爬蟲

?剛好就是最小的那個(gè)分類的名字,那這個(gè)鏈接就好搞了

通過xpath定位可以找到分類的鏈接

lazada爬蟲,python,windows,pycharm,網(wǎng)絡(luò)爬蟲

?爬取分類鏈接的代碼如下:

頭文件和cookie,要設(shè)置好,不然網(wǎng)站不會(huì)返回?cái)?shù)據(jù)

headers = {
    'User-Agent': ''
}
cookies = {
    'cookie': ''
}
def shop_spider(url):
    '''
    遇到的問題:
        1.在獲取商品分類界面的url時(shí)request訪問回來的數(shù)據(jù)不全(網(wǎng)頁源代碼有數(shù)據(jù))。 解決方法:這個(gè)網(wǎng)站需要添加cookie
        2.形成的JSON鏈接有一些是錯(cuò)誤的,使用時(shí)需要拋出異常
        3.只爬取了分類下的第一頁的鏈接
    '''
    # 獲取商品分類界面url
    req = requests.session().get(url, headers=headers, cookies=cookies).text
    ht = etree.HTML(req)
    li = ht.xpath("http://li[@class='lzd-site-menu-grand-item']/a/@href")  # 分類界面
    # 組合獲取到的分類名字,形成分類鏈接
    url_list = []
    for i in li:
        url_list.append('https:' + i + '?ajax=true&isFirstRequest=true&page=1')
    # 將獲取到的鏈接存入到txt文檔中
    f = open('D:\\工作文件\\lazadaurl.txt', 'w', encoding='utf8')
    f.write('\n'.join(url_list))
    f.close()
shop_spider('https://www.lazada.sg/')  # 啟動(dòng)函數(shù)

很好,現(xiàn)在我們完成了第一步,現(xiàn)在到第二步:從獲取到的分類界面鏈接里面提取出商品的鏈接

實(shí)現(xiàn)代碼:

def lazada_json():
    f = open('D:/工作文件/lazadaurl.txt') # 這里放的是前面爬到的分類鏈接
    ls = []
    for i in f:
        try:
            # 發(fā)起request請(qǐng)求session是保存之前cookie等數(shù)據(jù),拿JSON格式的數(shù)據(jù)回來
            req = requests.session().get(i, headers=headers, cookies=cookies).json()
            # 正則匹配出需要的url
            js = re.findall(ir, str(req))
            # 集合(set)去重
            li = list(set(js))
            # 循環(huán)尋找可以訪問的鏈接(找回來的數(shù)據(jù)是只有//www開頭的鏈接才可以訪問),是就寫進(jìn)一個(gè)新的列表,不是就pass
            for j in li:
                if j[:5] == "http://www":
                    ls.append(j)
                else:
                    pass
        except Exception as arr:
            print(arr)  # 拋出異常名字和出現(xiàn)異常的鏈接
            continue  # 拋出異常繼續(xù)爬取
    # 保存爬取到的鏈接,以待后面爬商品的詳情數(shù)據(jù)
    url = []
    for i in ls:
        url.append('https:' + i)  # 組合成商品詳情頁鏈接
    f = open('D:\\工作文件\\url.txt', 'w')
    f.write(str('\n'.join(url)))
    f.close()

商品數(shù)據(jù)爬取

接下來到我們的第三步,爬商品詳情頁的數(shù)據(jù)了。這也是本人最不滿意的一部分,也是問題最多的一部分。

拿數(shù)據(jù)的部分如下圖,當(dāng)然還有商品的鏈接:

lazada爬蟲,python,windows,pycharm,網(wǎng)絡(luò)爬蟲

?lazada爬蟲,python,windows,pycharm,網(wǎng)絡(luò)爬蟲

?

爬取代碼如下:

def lazada_data():
    f = open('D:/工作文件/沒爬的url1.txt', encoding='utf8')
    p = open(r'D:\工作文件\沒爬的url.txt', 'a')
    url = []
    for r in f:
        url.append(r)
    l = openpyxl.load_workbook('D:/工作文件/text.xlsx')  # 讀取已經(jīng)有的工作簿
    sheet1 = l['sheet1']  # 創(chuàng)建sheet工
    ch = bag.Bag.web_debug()  # 使用bag包里面的方法創(chuàng)建瀏覽器
    x = 1  # 這是寫入到Excel里面的第幾行,也表示著現(xiàn)在爬到了第幾條鏈接
    for i in url[0:]:  # 這里可以選擇從第幾條開始爬,記得要-1,因?yàn)榱斜硎菑?開始數(shù)
        data = []
        bq1 = []
        ch.get(i)
        # 出現(xiàn)驗(yàn)證碼攔截界面時(shí)停止程序,手動(dòng)處理驗(yàn)證碼之后再從新啟動(dòng)
        if ch.title == '驗(yàn)證碼攔截':
            print('在第' + str(x) + '終止')
            l.save('D:/工作文件/text.xlsx')  # 保存.xls到當(dāng)前工作目錄
            exit(0)
        # 處理當(dāng)商品已經(jīng)下架之后的狀況
        if ch.title == 'non-existent products':
            continue
        try:
            ch.implicitly_wait(100)
            time.sleep(1)
            data.append(ch.find_element(By.XPATH, '//*[@id="module_product_title_1"]/div/div/h1').text)  # 標(biāo)題
            data.append(ch.find_element(By.XPATH, '//*[@id="module_product_brand_1"]/div/a[1]').text)  # 品牌
            bq = ch.find_elements(By.XPATH, '//*[@id="J_breadcrumb"]/li/span/a')  # 分類標(biāo)簽
            for k in bq:
                bq1.append(k.get_attribute('text'))
            data.append(bq1)
            data.append(ch.find_element(By.XPATH, '//*[@id="module_product_review_star_1"]/div/a').text)  # 評(píng)級(jí)
            req = requests.session().get(i, headers=headerss, cookies=cookiess).text
            et = etree.HTML(req)
            jj = re.findall(jre, str(req))
            # 判斷有沒有拿到簡(jiǎn)介的數(shù)據(jù),沒有就跳過,加入到后續(xù)補(bǔ)爬的文件里面
            if jj:
                data.append(jj)  # 簡(jiǎn)介
            else:
                print('第' + str(x) + '條鏈接的簡(jiǎn)介沒拿到!')
                p.write(i)
                continue
            data.append(et.xpath("http://img[@class='pdp-mod-common-image item-gallery__thumbnail-image']/@src"))  # 商品圖片鏈接

            data.append(i)  # 商品詳情頁鏈接
            # 保存到xlsx文件里,因?yàn)檫@里列表里面套列表([1,2,[4,5,6],3]),所以加個(gè)判斷(當(dāng)然這部分還可以優(yōu)化,懶了,不想改了)
            for y in range(len(data)):
                if type(data[y]) != list:
                    sheet1.cell(x, y + 1).value = data[y]  # 寫入數(shù)據(jù)參數(shù)對(duì)應(yīng) 行, 列, 值
                else:
                    sheet1.cell(x, y + 1).value = '\n'.join(data[y])
            x += 1
        except Exception as arr:
            print('第' + str(x) + '條錯(cuò)誤,已經(jīng)加入未爬取文件')
            p.write(i)
            continue
        if x % 500 == 0:
            l.save(r'D:/工作文件/text.xlsx')  # 保存.xls到當(dāng)前工作目錄
    l.save('D:/工作文件/text.xlsx')  # 保存.xls到當(dāng)前工作目錄
    p.close()

?main函數(shù)啟動(dòng),一個(gè)個(gè)起就可以了

if __name__ == '__main__':
    # shop_spider('https://www.lazada.sg/')
    # lazada_json()
    lazada_data()

商品詳情的數(shù)據(jù)爬取這部分在分類標(biāo)簽這部分用了攔截器函數(shù),具體的原理我還沒研究明白

總結(jié)

? ? ? ? 小小的總結(jié)一下吧,在獲取鏈接的那兩部分我個(gè)人感覺還OK,就是在數(shù)據(jù)獲取那邊用的方法非常的混亂,用了selenium自動(dòng)化爬蟲,接下又對(duì)同一個(gè)鏈接發(fā)request請(qǐng)求,說實(shí)話真的有點(diǎn)多余了,但是我有不知道怎么把拿商品的介紹這部分,所以才使用了這樣的一個(gè)非常臃腫的方法(不要學(xué))。

? ? ? ? 具體的結(jié)果圖我就不放出來了,本來就是記錄一下自己的學(xué)習(xí)過程的。文章來源地址http://www.zghlxwxcb.cn/news/detail-785056.html

到了這里,關(guān)于Python爬蟲實(shí)戰(zhàn)——Lazada商品數(shù)據(jù)(selenium自動(dòng)化爬蟲,xpath定位)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Selenium實(shí)戰(zhàn)之Python+Selenium爬取京東商品數(shù)據(jù)

    Selenium實(shí)戰(zhàn)之Python+Selenium爬取京東商品數(shù)據(jù)

    實(shí)戰(zhàn)目標(biāo):爬取京東商品信息,包括商品的標(biāo)題、鏈接、價(jià)格、評(píng)價(jià)數(shù)量。 代碼核心在于這幾個(gè)部分: 其一:使用元素定位來獲取頁面上指定需要抓取的; 其二:將頁面上定位得到的數(shù)據(jù)永久存儲(chǔ)到本地文件中。 具體來梳理一下從訪問URL開始到爬取數(shù)據(jù)整個(gè)流程下來

    2023年04月13日
    瀏覽(27)
  • Python 爬蟲實(shí)戰(zhàn)之爬淘寶商品并做數(shù)據(jù)分析

    Python 爬蟲實(shí)戰(zhàn)之爬淘寶商品并做數(shù)據(jù)分析

    前言 是這樣的,之前接了一個(gè)金主的單子,他想在淘寶開個(gè)小魚零食的網(wǎng)店,想對(duì)目前這個(gè)市場(chǎng)上的商品做一些分析,本來手動(dòng)去做統(tǒng)計(jì)和分析也是可以的,這些信息都是對(duì)外展示的,只是手動(dòng)比較麻煩,所以想托我去幫個(gè)忙。 具體的要求如下: 1.在淘寶搜索“小魚零食”

    2024年02月05日
    瀏覽(27)
  • Python 爬蟲實(shí)戰(zhàn)之爬拼多多商品并做數(shù)據(jù)分析

    Python爬蟲可以用來抓取拼多多商品數(shù)據(jù),并對(duì)這些數(shù)據(jù)進(jìn)行數(shù)據(jù)分析。以下是一個(gè)簡(jiǎn)單的示例,演示如何使用Python爬取拼多多商品數(shù)據(jù)并進(jìn)行數(shù)據(jù)分析。 首先,需要使用Python的requests庫和BeautifulSoup庫來抓取拼多多商品頁面。以下是一個(gè)簡(jiǎn)單的示例代碼: 在上面的代碼中,我

    2024年02月05日
    瀏覽(19)
  • Python爬蟲實(shí)戰(zhàn):自動(dòng)化數(shù)據(jù)采集與分析

    在大數(shù)據(jù)時(shí)代,數(shù)據(jù)采集與分析已經(jīng)成為了許多行業(yè)的核心競(jìng)爭(zhēng)力。Python作為一門廣泛應(yīng)用的編程語言,擁有豐富的爬蟲庫,使得我們能夠輕松實(shí)現(xiàn)自動(dòng)化數(shù)據(jù)采集與分析。本文將通過一個(gè)簡(jiǎn)單的示例,帶您了解如何使用Python進(jìn)行爬蟲實(shí)戰(zhàn)。 一、環(huán)境準(zhǔn)備 首先,確保您已經(jīng)

    2024年02月11日
    瀏覽(28)
  • LAZADA平臺(tái)的商品評(píng)論P(yáng)ython封裝API接口接入文檔和參數(shù)說明

    ?? ? LAZADA是一個(gè)位于東南亞的電商平臺(tái),成立于2012年。該平臺(tái)覆蓋的國(guó)家包括新加坡、馬來西亞、印尼、菲律賓、泰國(guó)和越南等地。它提供了一個(gè)多樣化的產(chǎn)品選擇,包括時(shí)尚、美容、數(shù)碼、母嬰等商品,并且擁有許多知名品牌的官方旗艦店。同時(shí),LAZADA平臺(tái)也為賣家提供

    2024年02月08日
    瀏覽(24)
  • 爬蟲 + 自動(dòng)化利器---selenium詳解以及實(shí)戰(zhàn)項(xiàng)目

    什么是selenium Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。 只要在測(cè)試用例中把預(yù)期的用戶行為與結(jié)果都描述出來,我們就得到了一個(gè)可以自動(dòng)化運(yùn)行的功能測(cè)試套件。 Selenium測(cè)試套件直接運(yùn)行在瀏覽器中,就像真正的用戶在操作瀏覽器一樣。 Selenium也是一款同樣使用Apache Li

    2024年02月09日
    瀏覽(31)
  • API商品數(shù)據(jù)接口調(diào)用爬蟲實(shí)戰(zhàn)

    隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的商家開始將自己的商品數(shù)據(jù)通過API接口對(duì)外開放,以供其他開發(fā)者使用。這些API接口可以提供豐富的商品數(shù)據(jù),包括商品名稱、價(jià)格、庫存、圖片等信息。對(duì)于爬蟲開發(fā)者來說,通過調(diào)用這些API接口,可以更加便捷地獲取商品數(shù)據(jù),避免了爬取

    2024年02月07日
    瀏覽(23)
  • Selenium + Django + Echarts 實(shí)現(xiàn)亞馬遜商品數(shù)據(jù)可視化爬蟲項(xiàng)目

    Selenium + Django + Echarts 實(shí)現(xiàn)亞馬遜商品數(shù)據(jù)可視化爬蟲項(xiàng)目

    最近完成了1個(gè)爬蟲項(xiàng)目,記錄一下自己的心得。 根據(jù)用戶輸入商品名稱、類別名稱,使用Selenium, BS4等技術(shù)每天定時(shí)抓取亞馬遜商品數(shù)據(jù),使用Pandas進(jìn)行數(shù)據(jù)清洗后保存在MySql數(shù)據(jù)庫中. 使用Django提供用戶端功能,顯示商品數(shù)據(jù),以可視化的方式分析數(shù)據(jù),以及數(shù)據(jù)抓取任務(wù)管

    2024年01月25日
    瀏覽(23)
  • python爬蟲(七)--------selenium自動(dòng)化

    查找方法(python3.7之前版本) find_element_by_id 根據(jù)id屬性來定位 find_element_by_name 根據(jù)name元素來定位 find_element_by_xpath 根據(jù)xpath語法來定位 find_element_by_tag_name 根據(jù)標(biāo)簽名來定位 find_element_by_class_name 根據(jù)class的名字來定位 find_element_by_css_selector 根據(jù)css選擇器來定位 以下兩種方法都

    2024年01月16日
    瀏覽(29)
  • Python爬蟲之自動(dòng)化測(cè)試Selenium#7

    Python爬蟲之自動(dòng)化測(cè)試Selenium#7

    在前一章中,我們了解了 Ajax 的分析和抓取方式,這其實(shí)也是 JavaScript 動(dòng)態(tài)渲染的頁面的一種情形,通過直接分析 Ajax,我們?nèi)匀豢梢越柚?requests 或 urllib 來實(shí)現(xiàn)數(shù)據(jù)爬取。 不過 JavaScript 動(dòng)態(tài)渲染的頁面不止 Ajax 這一種。比如中國(guó)青年網(wǎng)(詳見 國(guó)內(nèi)_新聞?lì)l道_中國(guó)青年網(wǎng)),

    2024年02月20日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包