1. 程式人生 > 實用技巧 >python爬蟲----爬取淘寶資料

python爬蟲----爬取淘寶資料

引言

前幾周在做c#大作業,做的是一個水果系統,需要一些水果的資料,於是就去爬取淘寶資料,可是爬下來總是空資料,不知道是怎麼回事,於是我百度了一下說selenium可以實現,然後我就把selenium學習了下,編寫了一個爬取淘寶商品的程式碼.

內容

程式碼是用的是selenium 裡的 webdriver,通過webdriver可以自動幫我們開啟谷歌瀏覽器,然後跳入到淘寶介面,然後登入,進行爬取。和以往的爬蟲不一樣的是我們不用再去封裝頭。而且我們還可在程式裡封裝想要爬取的內容,比如“水果”

具體程式碼意思都在註釋,不懂可以看註釋

程式碼

#-*- codeing = utf-8 -*-
#@Time : 2020/11/3 20:34
#@Author : 楊曉
#@File : Fruit.py
#@Software: PyCharm
from selenium import webdriver
import time
from pymysql import *
import re
#輸入資料
def search_product(key):
    #獲得輸入框並輸入要搜尋的關鍵字key
    driver.find_element_by_id('q').send_keys(key)
    #點選搜尋按鈕
    driver.find_element_by_class_name("btn-search").click()
    #視窗最大化
    driver.maximize_window()
    #休眠15s來登入淘寶賬號
    time.sleep(15)
    #獲得總頁數
    allPage = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text
    #re.findall('(\d+)',allPage)返回一個列表元素
    allPage = re.findall('(\d+)',allPage)[0]
    return int(allPage)

# 獲取資料
def get_product():
    divs = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')
    for div in divs:
        #獲取元素資訊
        img = div.find_element_by_xpath('.//div[@class="pic"]/a/img').get_attribute('src')
        title = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
        price = div.find_element_by_xpath(".//strong").text
        payNums = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text
        save_data(title,img,price,payNums)
#儲存資料
def save_data(title,img,price,payNums):
    # 開啟資料庫連線(ip/資料庫使用者名稱/登入密碼/資料庫名)
    con = connect("localhost", "root", "root", "pachong")
    # 使用 cursor() 方法建立一個遊標物件 cursor
    cursors = con.cursor()
    # 使用 execute()  方法執行 SQL 查詢 返回的是你影響的行數
    cursors.execute("insert into fruit values(%s,%s,%s,%s,%s)", (None, title, img, price,payNums))
    # 使用 fetchone() 方法獲取資料.
    con.commit()
    # 關閉資料庫連線(別忘了)
    con.close()
def main(keyWord):
    #獲得總共頁數
    allPage = search_product(keyWord)
    currentPage = 1
    while currentPage <= allPage:
        print("第{}頁資料".format(currentPage))
        print("*****************************************")
        driver.get("https://s.taobao.com/search?q={}&s={}".format(keyWord,(currentPage-1)*44))
        driver.implicitly_wait(2)  #瀏覽器等待方法
        #driver.maximize_window()
        get_product()
        print("第{}頁資料儲存成功".format(currentPage))
        currentPage += 1
        print("*****************************************")
if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get("https://s.taobao.com/")
    main("水果")