Python爬蟲實戰(2):爬取京東商品列表
阿新 • • 發佈:2019-02-15
1,引言
在上一篇》,爬取了一個用Drupal做的論壇,是靜態頁面,抓取比較容易,即使直接解析html原始檔都可以抓取到需要的內容。相反,JavaScript實現的動態網頁內容,無法從html原始碼抓取需要的內容,必須先執行JavaScript。本文將實驗程式進行改寫,使用開源Python爬蟲規定的標準,把程式碼變得非常簡潔。
2,技術要點
我們在多個文章說過本開源爬蟲的目的:節省程式設計師的時間。關鍵是省去編寫提取規則的時間,尤其除錯規則很花時間,節省時間問題在《1分鐘快速生成用於網頁內容提取的xslt》一文已經有了解決方案,本文我們用京東網站作為測試目標,而電商網站都有很多動態內容,比如,產品價格和評論數等等,往往採用後加載的方式,在html源文件載入完成以後再執行javascript程式碼把動態內容填寫上,所以,本案例主要驗證動態內容的抓取。
另外,本文案例沒有使用GooSeeker爬蟲API,而是把MS謀數臺生成的xslt指令碼程式儲存在本地檔案中,在程式執行的時候把檔案讀出來注入到gsExtractor提取器。後續會有專門的案例演示 API的使用方法。
總之,本示例兩個技術要點總結如下:
3,python原始碼
4,抓取結果
執行上面的程式碼,就會爬取京東手機品類頁面的所有手機型號、價格等資訊,並儲存到本地檔案“京東手機列表_1.xml”中。我們用瀏覽器開啟這個結果檔案,會看到如下的內容
5,相關文件
6,集搜客GooSeeker開原始碼下載源
1, GooSeeker開源Python網路爬蟲GitHub源
7,文件修改歷史
1,2016-06-08:V1.0
在上一篇》,爬取了一個用Drupal做的論壇,是靜態頁面,抓取比較容易,即使直接解析html原始檔都可以抓取到需要的內容。相反,JavaScript實現的動態網頁內容,無法從html原始碼抓取需要的內容,必須先執行JavaScript。本文將實驗程式進行改寫,使用開源Python爬蟲規定的標準,把程式碼變得非常簡潔。
2,技術要點
我們在多個文章說過本開源爬蟲的目的:節省程式設計師的時間。關鍵是省去編寫提取規則的時間,尤其除錯規則很花時間,節省時間問題在《1分鐘快速生成用於網頁內容提取的xslt》一文已經有了解決方案,本文我們用京東網站作為測試目標,而電商網站都有很多動態內容,比如,產品價格和評論數等等,往往採用後加載的方式,在html源文件載入完成以後再執行javascript程式碼把動態內容填寫上,所以,本案例主要驗證動態內容的抓取。
另外,本文案例沒有使用GooSeeker爬蟲API,而是把MS謀數臺生成的xslt指令碼程式儲存在本地檔案中,在程式執行的時候把檔案讀出來注入到gsExtractor提取器。後續會有專門的案例演示 API的使用方法。
總之,本示例兩個技術要點總結如下:
- 從本地檔案讀取xlst程式
-
把xlst注入到提取器gsExtractor中,利用xslt從網頁上一次提取性多個欄位內容。
3,python原始碼
# -*- coding:utf-8 -*- # 爬取京東商品列表, 以手機商品列表為例 # 示例網址:http://list.jd.com/list.html?cat=9987,653,655&page=1&JL=6_0_0&ms=5 # crawler_jd_list.py # 版本: V1.0 from urllib import request from lxml import etree from selenium import webdriver from gooseeker import gsExtractor import time class Spider: def __init__(self): self.scrollpages = 0 self.waittime = 3 self.phantomjsPath = 'C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe' def getContent(self, url): browser = webdriver.PhantomJS( executable_path = self.phantomjsPath ) browser.get(url) time.sleep(self.waittime) html = browser.execute_script("return document.documentElement.outerHTML") doc = etree.HTML(html) jdlistExtra = gsExtractor() jdlistExtra.setXsltFromFile("jd_list.xml") output = jdlistExtra.extract(doc) return output def saveContent(self, filepath, content): file_obj = open(filepath, 'w', encoding='UTF-8') file_obj.write(content) file_obj.close() url = 'http://list.jd.com/list.html?cat=9987,653,655&page=1&JL=6_0_0&ms=5' jdspider = Spider() result = jdspider.getContent(url) jdspider.saveContent('京東手機列表_1.xml', str(result))
原始碼下載位置請看文章末尾的GitHub源。
4,抓取結果
執行上面的程式碼,就會爬取京東手機品類頁面的所有手機型號、價格等資訊,並儲存到本地檔案“京東手機列表_1.xml”中。我們用瀏覽器開啟這個結果檔案,會看到如下的內容
5,相關文件
6,集搜客GooSeeker開原始碼下載源
1, GooSeeker開源Python網路爬蟲GitHub源
7,文件修改歷史
1,2016-06-08:V1.0