教師節送什么?Python教你挑選禮物
又到了一年一度的教師節,每次教師節大家都會煩惱不知道送什么禮物?尤其是對于理工男來說,更是一個讓人頭大的問題。我今天就和大家分享一個用Python爬取淘寶商品信息的項目,希望可以給大家選禮物時提供一個參考。
1.爬取目標
本次項目利用selenium抓取淘寶商品信息,用selenium語法來獲取商品信息、價格、購買人數、圖片、以及店鋪的名字,最后再把獲取的信息儲存在MongoDB中。
2.準備工作
在開始本次項目前,首先你要確保正確安裝好Chome瀏覽器并配置好對應版本的ChromeDriver;另外,還需要正確安裝Python的selenium庫和pymongo庫;最后還要在電腦上安裝好MongoDB。
3.下面給出Windows下安裝selenium、pymongo、MongoDB的方法
selenium:
- pip install selenium || pip3 install selenium
pymongo:
- pip install pymongo || pip3 install pymongo
MongoDB:
由于MongoDB現在版本比較多,3.0和4.0安裝方法存在差異,我下載的是3.x版本的,安裝和配置都比較簡單,所以,我也建議大家安裝和使用3.x版本的。
下載鏈接:
https://www.mongodb.com/download-center/community
ChromeDriver下載鏈接:
https://chromedriver.storage.googleapis.com/index.html
這里下載的ChromeDriver版本要和你下載的谷歌瀏覽器的版本相一致,否則程序運行會出現錯誤。下載完后將ChromeDriver.exe放到你Python安裝路徑下的Scripts中即可。
4.提取單頁商品信息
獲取各個元素用到的是selenium語法的
- find_element_by_xpath()
括號中需要填入各元素的Xpath路徑。
- 獲取商品信息
代碼如下:
- 'info' : li.find_element_by_xpath('.//div[@class="row row-2 title"]').text
- 獲取價格信息
代碼如下:
- 'price' : li.find_element_by_xpath('.//a[@class="J_ClickStat"]').get_attribute('trace-price') + '元'
- 獲取付款人數
代碼如下:
- 'deal' : li.find_element_by_xpath('.//div[@class="deal-cnt"]').text
- 獲取圖片

代碼如下:
- 'image' : li.find_element_by_xpath('.//div[@class="pic"]/a/img').get_attribute('src')
- 獲取店鋪名字
代碼如下:
- 'name' : li.find_element_by_xpath('.//div[@class="shop"]/a/span[2]').text
5.提取多頁商品信息
經過上面的分析,只能爬取一頁的商品信息,我們想獲取多頁信息,就需要先定義一個函數,將總頁數提取出來,代碼如下
- #提取總頁數
- def search():
- driver.find_element_by_id('q').send_keys('python')
- driver.find_element_by_class_name("tb-bg").click()
- time.sleep(10)
- token
- = driver.find_element_by_xpath(
- '//*[@id="mainsrp-pager"]/div/div/div/div[1]'
- ).text
- token = int(re.compile('\d+').search(token).group(0))
- return token
6.向下滑動頁面
我們都知道selenium用來抓取動態渲染的頁面非常有效,我們在抓取頁面信息時,需要模擬人來操作下拉、翻頁等操作。
對于下拉操作,有爬蟲基礎的可能會想到用selenium模擬的操作,但本次項目我們用js語法來模擬下拉,這樣做的好處就是不容易被淘寶的反爬機制識別,代碼如下
- def drop_down():
- for x in range(1,11,2):
- time.sleep(0.5)
- j = x/10 #滑動到的位置
- js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' %j
- driver.execute_script(js)
同理,我們也定義一個函數來模擬翻頁,代碼如下
- def next_page():
- token = search()
- num = 0
- while num != token - 1:
- driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword,44*num))
- driver.implicitly_wait(10) #隱式等待
- num += 1
- drop_down()
- get_product()
翻頁編寫時,需要注意,我在代碼加入了keyword,意思就是可以根據你自己的需求,爬取不同種類的商品信息。
7.將數據保存至MongoDB
- def save_to_mongo(result):
- try:
- if db[MONGO_COLLECTION].insert(result):
- print('儲存到MongoDB成功')
- except Exception:
- print('儲存到MongoDB失敗')
8.結果展示
總結
這次用selenium爬取淘寶商品信息,代碼邏輯框架如下
由于我能力有限,暫時只能實現這么多功能,下一步準備對MongoDB儲存的數據進行分析,這樣就完成了從數據爬取——數據儲存——數據分析一個完整的過程。
最后,祝所有的老師們:教師節快樂!