Python爬蟲程式碼:雙十一到了,爬一下某東看看有沒有好東西,這不得買一波大的!
阿新 • • 發佈:2021-10-22
現在電商平臺有很多商品資料,採集到的資料對電商價格戰很有優勢,這不,雙十一預售都已經開啟了,不得對自己好一點,把購物車塞到滿滿當當。
所以今天咱們以京東為例,試一試效果叭~
知識點:
- 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交流大家庭見:點選藍色文字新增即可獲取免費的福利!
兄弟們的支援就是對我最大的動力,點贊三連督促我加班熬夜更新吧!
如果在學習Python遇到了問題,有空的時候都可以給大家解答。
歡迎大家閱讀往期文章