引言
前幾周在做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("水果")