Python爬蟲實戰(2):爬取京東商品列表

clipboard.png

1,引言

在上一篇《python爬蟲實戰:爬取Drupal論壇帖子列表》,爬取了一個用Drupal作的論壇,是靜態頁面,抓取比較容易,即便直接解析html源文件均可以抓取到須要的內容。相反,JavaScript實現的動態網頁內容,沒法從html源代碼抓取須要的內容,必須先執行JavaScript。javascript

咱們在《Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態HTML內容》一文已經成功檢驗了動態網頁內容的抓取方法,本文將實驗程序進行改寫,使用開源Python爬蟲規定的標準python內容提取器,把代碼變得很是簡潔。html

2,技術要點

咱們在多個文章說過本開源爬蟲的目的:節省程序員的時間。關鍵是省去編寫提取規則的時間,尤爲調試規則很花時間,節省時間問題在《1分鐘快速生成用於網頁內容提取的xslt》一文已經有了解決方案,本文咱們用京東網站做爲測試目標,而電商網站都有不少動態內容,好比,產品價格和評論數等等,每每採用後加載的方式,在html源文檔加載完成之後再執行javascript代碼把動態內容填寫上,因此,本案例主要驗證動態內容的抓取。java

另外,本文案例沒有使用GooSeeker爬蟲API,而是把MS謀數臺生成的xslt腳本程序保存在本地文件中,在程序運行的時候把文件讀出來注入到gsExtractor提取器。後續會有專門的案例演示 API的使用方法。python

總之,本示例兩個技術要點總結以下:
從本地文件讀取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源。web

4,抓取結果

運行上面的代碼,就會爬取京東手機品類頁面的全部手機型號、價格等信息,並保存到本地文件「京東手機列表_1.xml」中。咱們用瀏覽器打開這個結果文件,會看到以下的內容
clipboard.pngsegmentfault

5,相關文檔

1, Python即時網絡爬蟲項目: 內容提取器的定義windows

6,集搜客GooSeeker開源代碼下載源

1, GooSeeker開源Python網絡爬蟲GitHub源瀏覽器

7,文檔修改歷史

1,2016-06-08:V1.0網絡

相關文章
相關標籤/搜索