現在電商平台有很多商品數據,采集到的數據對電商價格戰很有優勢,這不,雙十一預售都已經開啟了,不得對自己好一點,把購物車塞到滿滿當當。
所以今天咱們以京東為例,試一試效果叭~
知識點:
- selenium工具的使用
- 結構化的數據解析
- csv數據保存
環境:
- python 3.8
- pycharm
- selenium
- csv
- time
selenium用來實現瀏覽器自動化操作,我們想實現瀏覽器自動操作還需要下載一個chromedriver工具,沒有軟件或者不會安裝、沒有激活碼等等,都在文末統一給出來。
好了,開始我們的正文吧。
需要用的模塊先導入進去,這一步寫給新手。
import csv # 數據保存模塊, 內置模塊 import time from selenium import webdriver
既然我們要爬商品,當然就要實現搜索商品吧。
def get_product(key): """搜索商品""" driver.find_element_by_css_selector('#key').send_keys(key) driver.find_element_by_css_selector('#search > div > div.form > button').click()
然后把搜索功能寫出來
keyword = input('請輸入你要搜索商品的關鍵字:')
運行之后的搜索效果
數據懶加載? 你如果沒有下拉頁面, 那么頁面下半部分數據是不會給你顯示的。
所以我們要執行頁面的下拉操作
創建一個瀏覽器 對象
driver = webdriver.Chrome()
執行瀏覽器自動化
driver.get('https://www.jd.com/') driver.implicitly_wait(10) # 設置瀏覽器的隱式等待, 智能化等待<不會死等> driver.maximize_window() # 最大化瀏覽器
調用搜索商品的函數
get_product(keyword) def drop_down(): """執行頁面的下拉操作""" for x in range(1, 11, 2): # 控制下拉次數 代碼是活的, j = x / 10 # 1/10 3/10 ... 10/10 # js JavaScript 是可以直接運行在瀏覽器的一門計算機語言 通過js下拉頁面 js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j driver.execute_script(js) time.sleep(0.5) # 休息的時間是讓瀏覽器加載數據的
然后我們要做的是解析商品數據並保存到Excel表格去,商品的標簽、名字、價格、評論、店鋪名字等等,當然只要你能看到的數據都可以爬下來。
def parse_data(): """解析商品數據, 並且保存數據""" lis = driver.find_elements_by_css_selector('.gl-item') # 解析到了所有的li標簽 for li in lis: try: name = li.find_element_by_css_selector('div.p-name a em').text # 商品的名字 price = li.find_element_by_css_selector('div.p-price strong i').text + '元' # 商品的價格 deal = li.find_element_by_css_selector('div.p-commit strong a').text # 商品的評價數量 title = li.find_element_by_css_selector('span.J_im_icon a').get_attribute('title') # 商品的店鋪名字 name = name.replace('京東超市', '').replace('\n', '') print(name, price, deal, title) # 數據的保存 with open('京東.csv', mode='a', encoding='utf-8', newline='') as f: csv_write = csv.writer(f) csv_write.writerow([name, price, deal, title]) except: continue
這是獲取到的數據自動保存為Excel
但是當前只爬了一頁,我們要實現更多的數據爬取,寫一個翻頁就好了。
def get_next(): """翻頁""" driver.find_element_by_css_selector('#J_bottomPage > span.p-num > a.pn-next > em').click()
翻頁下的邏輯需要循環執行
for page in range(100): # 調用頁面下拉函數 drop_down() # 調用數據解析函數 parse_data() # 調用翻頁的函數 get_next()
寫在最后
好了,今天就寫到這里,大家可以自己嘗試,有跟本文對應的視頻教程,可以一步步學習,包括本文源碼也可以獲取。
兄弟們的支持就是對我最大的動力,點贊三連督促我加班熬夜更新吧!
如果在學習Python遇到了問題,有空的時候都可以給大家解答。
歡迎大家閱讀往期文章