1. 程式人生 > 其它 >雙十一福利!爬取電商平臺商品詳情!買東西我們只買優質產品!

雙十一福利!爬取電商平臺商品詳情!買東西我們只買優質產品!

嗨 ,兄弟們晚上好啊!
下午爬完京東,我們晚上再試試淘寶,剁手之路永不停歇!

其實我不太想爬的,沒辦法被媳婦知道了,說要在淘寶買東西,自己懶得看,讓我用程式碼去分析分析。
害,有這時間打兩把無限火力他不香嗎!


反正都爬完了,整理出來發給大家參考一下吧。

環境介紹:

  • python 3.6
  • pycharm
  • selenium
  • csv
  • time
  • random

python直譯器安裝包、安裝教程
pycharm程式碼編輯器安裝包、安裝教程、啟用碼
Chrome瀏覽器Webdriver外掛安裝教程
xpath-helper外掛安裝教程

這些如果沒有的話,可以在文末獲取。

第三方模組

selenium python模組 操作瀏覽器驅動 pip install selenium

這裡簡單的說下chromedriver (谷歌驅動)

瀏覽器驅動用來自動翻頁的,下載跟你安裝的谷歌瀏覽器版本最相近的版本,放到你的Python安裝目錄,或者跟你的程式碼放在同一個資料夾中就好了。

這個是我的瀏覽器版本
這是跟我對應版本的驅動外掛
下載好解壓出來長這樣子,我這裡把它跟程式碼放一起了。其他幾個的話就不多說了

匯入模組
先匯入一下要用的模組,註釋夠詳細了吧。

from selenium import webdriver  #
匯入selenium模組的瀏覽器功能 import random # 隨機資料模組 設定隨機等待 import time # 時間模組, 這是等待的時間<隨機> 內建模組, 安裝直譯器的時候自帶的 from constants import TAO_USERNAME, TAO_PASSWORD # 匯入使用者資訊 import csv # 資料儲存 # 內建模組

解決登入

我們要根據關鍵字搜尋商品, 解決登入,避免淘寶檢測selenium, 儘量的模擬使用者操作去解決登入,淘寶登入它是有js 加密的, js會檢測selenium自動登入, 最好是學學JS解密。

def search_product(keyword):
    
    driver.find_element_by_xpath('//*[@id="q"]').send_keys(keyword)

    time.sleep(random.randint(1, 3))
    driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
    time.sleep(random.randint(1, 3))
    
    driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(TAO_USERNAME)
    time.sleep(random.randint(1, 3))
    driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(TAO_PASSWORD)
    time.sleep(random.randint(1, 3))

    driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()
    time.sleep(random.randint(1, 3))

解析資料
這裡我們要對多個商品資料解析,所有的div標籤,然後進行二次提取商品價格、付款人數、店鋪名稱、店鋪地址、詳情頁地址

ef parse_data():
   
    # 多個商品資料解析
    divs = driver.find_elements_by_xpath('//div[@class="grid g-clearfix"]/div/div')  # 所有的div標籤

    for div in divs:  # 二次提取
        try:
            info = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
            price = div.find_element_by_xpath('.//strong').text + ''  # 商品價格  # 手寫
            deal = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text  # 付款人數  # 手寫
            name = div.find_element_by_xpath('.//div[@class="shop"]/a/span[2]').text  # 店鋪名稱  # 手寫
            location = div.find_element_by_xpath('.//div[@class="location"]').text  # 店鋪地址  # 手寫
            detail_url = div.find_element_by_xpath('.//div[@class="pic"]/a').get_attribute('href')  # 詳情頁地址  # 手寫

            print(info, price, deal, name, location, detail_url, sep='|')

            with open('淘寶.csv', mode='a', encoding='utf-8', newline='')  as f:
                csv_write = csv.writer(f)
                csv_write.writerow([info, price, deal, name, location, detail_url])
        except:
            continue

實現根據關鍵字搜尋商品

word = input('請輸入你要搜尋商品的關鍵字:')

瀏覽器操作

建立一個瀏覽器

driver = webdriver.Chrome()

修改瀏覽器的屬性

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
                       {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})

執行瀏覽器操作

driver.get('https://www.taobao.com/') 

get 是driver一個方法, 內部傳一個地址,driver.get() 不是函式, 是driver物件的一個方法, 方法的呼叫和自定義函式呼叫是有區別的。

智慧化等待: 頁面渲染載入過程需要時間

driver.implicitly_wait(10)

最大化瀏覽器

driver.maximize_window() 

搜尋商品和解析商品

search_product(word)


for page in range(0, 100):  # 0123456...
    print(f'\n========================正在抓取第{page + 1}頁資料=========================')
    driver.get(f'https://s.taobao.com/search?q={word}&s={page * 44}')
    
    parse_data()
    time.sleep(random.randint(2, 4))

我們在執行瀏覽器的自動化操作的時候,使用者平常怎麼操作頁面, 那麼咱們程式碼邏輯和使用者操作的頁面的邏輯大致一樣。
驗證碼主要是驗證人機行為,一般是滑動, 點選, 普通驗證碼。

完整的免費原始碼領取處:

完整原始碼+對應視訊教程基地見:#點選藍色文字新增即可獲取免費的福利!

兄弟萌,我最大的動力就是來自你們的支援!!看完記得點贊收藏三連哈!

關於解答——

兄弟們在Python學習中遇到問題、有時間會給大家解答的!大家自行新增哈~


.