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


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

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

在這里插入圖片描述
反正都爬完了,整理出來發給大家參考一下吧。

環境介紹:

  • 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學習中遇到問題、有時間會給大家解答的!大家自行添加哈~

在這里插入圖片描述
.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM