1. 程式人生 > >利用Selenium爬取淘寶商品信息

利用Selenium爬取淘寶商品信息

支持 down oca ace element 掃描 coo name implicit

一. Selenium和PhantomJS介紹

Selenium是一個用於Web應用程序測試的工具,Selenium直接運行在瀏覽器中,就像真正的用戶在操作一樣。由於這個性質,Selenium也是一個強大的網絡數據采集工具,其可以讓瀏覽器自動加載頁面,這樣,使用了異步加載技術的網頁,也可獲取其需要的數據。

Selenium模塊是Python的第三方庫,可以通過pip進行安裝:

pip3 install selenium

Selenium自己不帶瀏覽器,需要配合第三方瀏覽器來使用。通過help命令查看Selenium的Webdriver功能,查看Webdriver支持的瀏覽器:

from selenium import webdriver

help(webdriver)

查看執行後的結果,如下圖所示:

技術分享圖片

在這個案例中,采用PhantomJS。Selenium和PhantomJS的配合使用可以完全模擬用戶在瀏覽器上的所有操作,包括輸入框內容填寫、單擊、截屏、下滑等各種操作。這樣,對於需要登錄的網站,用戶可以不需要通過構造表單或提交cookie信息來登錄網站。

二. 案例介紹

這裏所舉的案例,是利用Selenium爬取淘寶商品信息,爬取的內容為淘寶網(https://www.taobao.com/)上男士短袖的商品信息,如下圖所示:

技術分享圖片

這裏可以看到,在用戶輸入淘寶後,需要模擬輸入,在輸入框輸入“男士短袖”。

案例中使用Selenium和PhantomJS,模擬電腦的搜索操作,輸入商品名稱進行搜索,如圖所示,“檢查”搜索框元素。

技術分享圖片

並且如下圖所示,“檢查”下一頁元素:

技術分享圖片

爬取的內容有商品價格、付款人數、商品名稱、商家名稱和地址,如下圖所示:

技術分享圖片

最後把爬取數據存儲到MongoDB數據庫中。

三. 相關技術

這裏把除了selenium之外所需要的知識列一下,這裏就不做詳細解釋了,如果不清楚的話可以百度了解下。

  • mongoDB的使用,以及在python中用mongodb進行數據存儲。

  • lxml,爬蟲三大方法之一,解析效率比較高,使用難度相比正則表達式要低(上一篇文章的解析方法是正則表達式)。

  • 間歇休息的方法:driver.implicitly_wait

四. 源代碼

代碼如下所示,可復制直接執行:

from selenium import webdriver
from lxml import etree
import time
import pymongo

client = pymongo.MongoClient(localhost,  27017)
mydb = client[mydb]
taobao = mydb[taobao]

driver = webdriver.PhantomJS()
driver.maximize_window() 

def get_info(url,page):
     page = page + 1
     driver.get(url)
     driver.implicitly_wait(10)
     selector = etree.HTML(driver.page_source)
     infos = selector.xpath(//div[@class="item J_MouserOnverReq"])

     for info in infos:
        data = info.xpath(div/div/a)[0]
        goods =  data.xpath(string(.)).strip()
        price = info.xpath(div/div/div/strong/text())[0]
        sell =  info.xpath(div/div/div[@class="deal-cnt"]/text())[0]
        shop =  info.xpath(div[2]/div[3]/div[1]/a/span[2]/text())[0]
        address =  info.xpath(div[2]/div[3]/div[2]/text())[0]
        commodity = {
            good:goods,
            price:price,
            sell:sell,
            shop:shop,
            address:address
        }
        taobao.insert_one(commodity)

     if page <= 50:
        NextPage(url,page)
     else:
        pass

def NextPage(url,page):
     driver.get(url)
     driver.implicitly_wait(10)        
 driver.find_element_by_xpath(//a[@trace="srp_bottom_pagedown"]).click()
     time.sleep(4)
     driver.get(driver.current_url)
     driver.implicitly_wait(10)
     get_info(driver.current_url,page)

if __name__ == __main__:
     page = 1
     url = https://www.taobao.com/
     driver.get(url)
     driver.implicitly_wait(10)
     driver.find_element_by_id(q).clear()
     driver.find_element_by_id(q).send_keys(男士短袖)
     driver.find_element_by_class_name(btn-search).click()
     get_info(driver.current_url,page)


五. 代碼解析

(1)1~4行

導入程序需要的庫,selenium庫用於模擬請求和交互。lxml解析數據。pymongo是mongoDB 的交互庫。

(2)6~8行

打開mongoDB,進行存儲準備。

(3)10~11行

最大化PhantomJS窗口。

(4)14~33行

利用lxml抓取網頁數據,分別定位到所需要的信息,並把信息集成至json,存儲至mongoDB。

(5)35~47行

分頁處理。

(5)51~57行

利用selenium模擬輸入“男士短袖”,並模擬點擊操作,並獲取到對應的頁面信息,調取主方法解析。

———————————————————

公眾號-智能化IT系統。每周都有技術文章推送,包括原創技術幹貨,以及技術工作的心得分享。掃描下方關註。

技術分享圖片

利用Selenium爬取淘寶商品信息