1. 程式人生 > 實用技巧 >爬取淘寶膝上型電腦資料(一)

爬取淘寶膝上型電腦資料(一)

爬取淘寶膝上型電腦資料

1.匯入模組

from selenium import webdriver
import time
import csv
import re

2.搜尋商品,獲取商品頁碼

def search_product(key_word):
    # 定位輸入框
    browser.find_element_by_id("q").send_keys(key_word)
    # 定義點選按鈕,並點選
    browser.find_element_by_class_name('btn-search').click()
    # 最大化視窗:為了方便我們掃碼
    browser.maximize_window()
    # 等待15秒,給足時間我們掃碼
    time.sleep(15)
    # 定位這個“頁碼”,獲取“共100頁這個文字”
    page_info = browser.find_element_by_xpath('//div[@class="total"]').text
    # 需要注意的是:findall()返回的是一個列表,雖然此時只有一個元素它也是一個列表。
    page = re.findall("(\d+)",page_info)[0]
    return page

3.獲取商品資訊

def get_data():
    # 通過頁面分析發現:所有的資訊都在items節點下
    items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')
    for item in items:
        # 引數資訊
        pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
        # 價格
        pro_price = item.find_element_by_xpath('.//strong').text
        # 付款人數
        buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text
        # 旗艦店
        shop = item.find_element_by_xpath('.//div[@class="shop"]/a').text
        # 發貨地
        address = item.find_element_by_xpath('.//div[@class="location"]').text
        #print(pro_desc, pro_price, buy_num, shop, address)
        with open('{}.csv'.format(key_word), mode='a', newline='', encoding='utf-8-sig') as f:
            csv_writer = csv.writer(f, delimiter=',')
            csv_writer.writerow([pro_desc, pro_price, buy_num, shop, address])

完整程式碼

from selenium import webdriver
import time
import csv
import re
# 搜尋商品,獲取商品頁碼
def search_product(key_word):
    # 定位輸入框
    browser.find_element_by_id("q").send_keys(key_word)
    # 定義點選按鈕,並點選
    browser.find_element_by_class_name('btn-search').click()
    # 最大化視窗:為了方便我們掃碼
    browser.maximize_window()
    # 等待15秒,給足時間我們掃碼
    time.sleep(15)
    # 定位這個“頁碼”,獲取“共100頁這個文字”
    page_info = browser.find_element_by_xpath('//div[@class="total"]').text
    # 需要注意的是:findall()返回的是一個列表,雖然此時只有一個元素它也是一個列表。
    page = re.findall("(\d+)",page_info)[0]
    return page

# 獲取資料
def get_data():
    # 通過頁面分析發現:所有的資訊都在items節點下
    items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')
    for item in items:
        # 引數資訊
        pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
        # 價格
        pro_price = item.find_element_by_xpath('.//strong').text
        # 付款人數
        buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text
        # 旗艦店
        shop = item.find_element_by_xpath('.//div[@class="shop"]/a').text
        # 發貨地
        address = item.find_element_by_xpath('.//div[@class="location"]').text
        #print(pro_desc, pro_price, buy_num, shop, address)
        with open('{}.csv'.format(key_word), mode='a', newline='', encoding='utf-8-sig') as f:
            csv_writer = csv.writer(f, delimiter=',')
            csv_writer.writerow([pro_desc, pro_price, buy_num, shop, address])

def main():
    #瀏覽器要獲取的連結
    browser.get('https://www.taobao.com/')
    # 要獲取的關鍵字
    page = search_product(key_word)
    print(page)
    get_data()
    page_num = 1
    while int(page) != page_num:
        print("*" * 100)
        print("正在爬取第{}頁".format(page_num + 1))
        browser.get('https://s.taobao.com/search?q={}&s={}'.format(key_word, page_num*44))
        browser.implicitly_wait(15)
        get_data()
        page_num += 1
    print("資料爬取完畢!")

if __name__ == '__main__':
    key_word = input("請輸入你要搜尋的商品:")
    browser = webdriver.Chrome()
    main()