python爬蟲----爬取淘寶資料
阿新 • • 發佈:2020-12-13
引言
前幾周在做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("水果")