前言 隨著互聯網時代的到來,人們更加傾向於互聯網購物,某寶又是電商行業的巨頭,在某寶平臺中有很多商家數據,今天帶大家使用python+selenium工具獲取這些公開的。 本篇文章適合Python零基礎、對爬蟲數據採集感興趣的同學! 環境介紹: python 3.6pycharmseleniumti ...
前言
隨著互聯網時代的到來,人們更加傾向於互聯網購物,某寶又是電商行業的巨頭,在某寶平臺中有很多商家數據,今天帶大家使用python+selenium工具獲取這些公開的。
本篇文章適合Python零基礎、對爬蟲數據採集感興趣的同學!
環境介紹:
python 3.6
pycharm
selenium
time
selenium簡介
自動化測試工具,驅動瀏覽器幫助我們獲取到渲染之後的數據
模仿人的行為操作瀏覽器(用戶行為加上代碼邏輯的結合)
安裝模塊
pip install selenium
步驟
安裝Webdriver
打開Google瀏覽器,點擊進入設置界面
進入界面後點擊關於Chrome,然後找到你Google瀏覽器的版本,安裝Webdriver要對應瀏覽器的版本
導入模塊
import time import re import csv from selenium import webdriver from selenium.webdriver import ActionChains from 淘寶爬蟲 import constans
入口測試代碼
def search_product(key): """模擬搜索商品,登陸賬戶,獲取最大頁數""" driver.get('http://www.taobao.com') driver.find_element_by_id('q').send_keys(key) # 輸入框輸入商品關鍵字 driver.find_element_by_class_name('btn-search').click() # 點擊搜索按鈕 driver.implicitly_wait(10) # 隱式等待 driver.maximize_window() # 最大化瀏覽器 def main() search_product(keyword) if __name__ == '__main__': keyword = input('請輸入你要查詢的商品數據:') driver = webdriver.Chrome() main()
解決登陸和解決滑塊驗證
driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(constans.USERNAME) # 找到用戶名輸入賬號 time.sleep(1) driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(constans.PASSWORD) # 找到密碼框輸入密碼 time.sleep(2) login = driver.find_element_by_xpath("//span[contains(@class, 'btn_slide')]") # 找到滑動驗證碼滑塊 手寫 action = ActionChains(driver) # 創建動作連對象 action.click_and_hold(on_element=login) # 點擊滑塊維持動作 action.move_by_offset(xoffset=258, yoffset=0) # 設置動作鏈坐標長度 action.pause(0.5).release().perform() # 設置動作鏈執行時間 釋放滑鼠 執行動作鏈 driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click() # 找到登陸按鈕點擊 driver.implicitly_wait(10) # 隱式等待
解析數據
def get_product(): for div in divs: 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').text # 店鋪名稱 print(info, price, deal, name, sep='|') # 分隔符 with open('data2.csv', 'a', newline='') as csvfile: # newline='' 指定一行一行寫入 csvwriter = csv.writer(csvfile, delimiter=',') # delimiter=',' csv數據的分隔符 csvwriter.writerow([info, price, deal, name])
運行代碼,效果如下圖:
這樣就可以獲取第一頁的數據了
運行代碼,效果如下圖:
解析頁碼
page = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text # 找到頁碼標簽 page = re.findall('(\d+)', page)[0] # print('商品頁數:', page) return int(page) def main(): """程式的入口""" print('正在爬取第1頁的數據') page = search_product(keyword) get_product() page_num = 1 while page_num != page: print('*' * 100) print('正在爬取第{}頁的數據'.format(page_num + 1)) print('*' * 100) driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword, 44 * page_num)) # 拼接產品url地址 driver.implicitly_wait(10) # 瀏覽器等待方法 get_product() page_num += 1 driver.quit()
最後運行代碼,就可以爬取100頁的數據了