嗨 ,兄弟們晚上好啊!
下午爬完京東,我們晚上再試試淘寶,剁手之路永不停歇!
其實我不太想爬的,沒辦法被媳婦知道了,說要在淘寶買東西,自己懶得看,讓我用代碼去分析分析。
害,有這時間打兩把無限火力他不香嗎!
反正都爬完了,整理出來發給大家參考一下吧。
環境介紹:
- python 3.6
- pycharm
- selenium
- csv
- time
- random
python解釋器安裝包、安裝教程
pycharm代碼編輯器安裝包、安裝教程、激活碼
Chrome瀏覽器Webdriver插件安裝教程
xpath-helper插件安裝教程
這些如果沒有的話,可以在文末獲取。
第三方模塊
selenium python模塊 操作瀏覽器驅動 pip install selenium
這里簡單的說下chromedriver (谷歌驅動)
瀏覽器驅動用來自動翻頁的,下載跟你安裝的谷歌瀏覽器版本最相近的版本,放到你的Python安裝目錄,或者跟你的代碼放在同一個文件夾中就好了。
這個是我的瀏覽器版本
這是跟我對應版本的驅動插件
下載好解壓出來長這樣子,我這里把它跟代碼放一起了。
其他幾個的話就不多說了
導入模塊
先導入一下要用的模塊,注釋夠詳細了吧。
from selenium import webdriver # 導入selenium模塊的瀏覽器功能 import random # 隨機數據模塊 設置隨機等待 import time # 時間模塊, 這是等待的時間<隨機> 內置模塊, 安裝解釋器的時候自帶的 from constants import TAO_USERNAME, TAO_PASSWORD # 導入用戶信息 import csv # 數據保存 # 內置模塊
解決登錄
我們要根據關鍵字搜索商品, 解決登錄,避免淘寶檢測selenium, 盡量的模擬用戶操作去解決登錄,淘寶登錄它是有js 加密的, js會檢測selenium自動登錄, 最好是學學JS解密。
def search_product(keyword): driver.find_element_by_xpath('//*[@id="q"]').send_keys(keyword) time.sleep(random.randint(1, 3)) driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click() time.sleep(random.randint(1, 3)) driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(TAO_USERNAME) time.sleep(random.randint(1, 3)) driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(TAO_PASSWORD) time.sleep(random.randint(1, 3)) driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click() time.sleep(random.randint(1, 3))
解析數據
這里我們要對多個商品數據解析,所有的div標簽,然后進行二次提取商品價格、付款人數、店鋪名稱、店鋪地址、詳情頁地址
ef parse_data(): # 多個商品數據解析 divs = driver.find_elements_by_xpath('//div[@class="grid g-clearfix"]/div/div') # 所有的div標簽 for div in divs: # 二次提取 try: 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/span[2]').text # 店鋪名稱 # 手寫 location = div.find_element_by_xpath('.//div[@class="location"]').text # 店鋪地址 # 手寫 detail_url = div.find_element_by_xpath('.//div[@class="pic"]/a').get_attribute('href') # 詳情頁地址 # 手寫 print(info, price, deal, name, location, detail_url, sep='|') with open('淘寶.csv', mode='a', encoding='utf-8', newline='') as f: csv_write = csv.writer(f) csv_write.writerow([info, price, deal, name, location, detail_url]) except: continue
實現根據關鍵字搜索商品
word = input('請輸入你要搜索商品的關鍵字:')
瀏覽器操作
創建一個瀏覽器
driver = webdriver.Chrome()
修改瀏覽器的屬性
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})
執行瀏覽器操作
driver.get('https://www.taobao.com/')
get 是driver一個方法, 內部傳一個地址,driver.get() 不是函數, 是driver對象的一個方法, 方法的調用和自定義函數調用是有區別的。
智能化等待: 頁面渲染加載過程需要時間
driver.implicitly_wait(10)
最大化瀏覽器
driver.maximize_window()
搜索商品和解析商品
search_product(word) for page in range(0, 100): # 0123456... print(f'\n========================正在抓取第{page + 1}頁數據=========================') driver.get(f'https://s.taobao.com/search?q={word}&s={page * 44}') parse_data() time.sleep(random.randint(2, 4))
我們在執行瀏覽器的自動化操作的時候,用戶平常怎么操作頁面, 那么咱們代碼邏輯和用戶操作的頁面的邏輯大致一樣。
驗證碼主要是驗證人機行為,一般是滑動, 點選, 普通驗證碼。
完整的免費源碼領取處:
兄弟萌,我最大的動力就是來自你們的支持!!看完記得點贊收藏三連哈!
關於解答——
兄弟們在Python學習中遇到問題、有時間會給大家解答的!大家自行添加哈~
.