在上一篇《python爬虫实战:爬取Drupal论坛帖子列表》,爬取了一个用Drupal作的论坛,是静态页面,抓取比较容易,即便直接解析html源文件均可以抓取到须要的内容。相反,JavaScript实现的动态网页内容,没法从html源代码抓取须要的内容,必须先执行JavaScript。javascript
咱们在《Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容》一文已经成功检验了动态网页内容的抓取方法,本文将实验程序进行改写,使用开源Python爬虫规定的标准python内容提取器,把代码变得很是简洁。html
咱们在多个文章说过本开源爬虫的目的:节省程序员的时间。关键是省去编写提取规则的时间,尤为调试规则很花时间,节省时间问题在《1分钟快速生成用于网页内容提取的xslt》一文已经有了解决方案,本文咱们用京东网站做为测试目标,而电商网站都有不少动态内容,好比,产品价格和评论数等等,每每采用后加载的方式,在html源文档加载完成之后再执行javascript代码把动态内容填写上,因此,本案例主要验证动态内容的抓取。java
另外,本文案例没有使用GooSeeker爬虫API,而是把MS谋数台生成的xslt脚本程序保存在本地文件中,在程序运行的时候把文件读出来注入到gsExtractor提取器。后续会有专门的案例演示 API的使用方法。python
总之,本示例两个技术要点总结以下:
从本地文件读取xlst程序
把xlst注入到提取器gsExtractor中,利用xslt从网页上一次提取性多个字段内容。程序员
# -*- 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
运行上面的代码,就会爬取京东手机品类页面的全部手机型号、价格等信息,并保存到本地文件“京东手机列表_1.xml”中。咱们用浏览器打开这个结果文件,会看到以下的内容segmentfault
1, Python即时网络爬虫项目: 内容提取器的定义windows
1, GooSeeker开源Python网络爬虫GitHub源浏览器
1,2016-06-08:V1.0网络