1,引言

在上一篇python爬虫实战:爬取Drupal论坛帖子列表》,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容。相反,JavaScript实现的动态网页内容,无法从html源代码抓取需要的内容,必须先执行JavaScript。


我们在《
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容》一文已经成功检验了动态网页内容的抓取方法,
本文将实验程序进行改写,使用开源Python爬虫规定的标准python内容提取器,把代码变得非常简洁。

2,技术要点


我们在多个文章说过本开源爬虫的目的:节省程序员的时间。关键是省去编写提取规则的时间,尤其调试规则很花时间,节省时间问题在《1分钟快速生成用于网页内容提取的xslt
》一文已经有了解决方案,本文我们用京东网站作为测试目标,而电商网站都有很多动态内容,比如,产品价格和评论数等等,往往采用后加载的方式,在html源文档加载完成以后再执行javascript代码把动态内容填写上,所以,本案例主要验证动态内容的抓取。

另外,本文案例没有使用GooSeeker爬虫API,而是把MS谋数台生成的xslt脚本程序保存在本地文件中,在程序运行的时候把文件读出来注入到gsExtractor提取器。后续会有专门的案例演示 API的使用方法。


总之,本示例两个技术要点总结如下:

  • 从本地文件读取xlst程序
  • 把xlst注入到提取器GsExtractor中,利用xslt从网页上一次提取性多个字段内容。

3,python源代码

  1. # -*- coding:utf-8 -*-
  2. # 爬取京东商品列表, 以手机商品列表为例
  3. # 示例网址:http://list.jd.com/list.html?cat=9987,653,655&page=1&JL=6_0_0&ms=5
  4. # crawler_jd_list.py
  5. # 版本: V1.0

  6. from urllib import request
  7. from lxml import etree
  8. from selenium import webdriver
  9. from gooseeker import GsExtractor
  10. import time

  11. class Spider:
  12.     def __init__(self):
  13.         self.scrollpages = 0
  14.         self.waittime = 3
  15.         self.phantomjsPath = 'C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe'

  16.     def getContent(self, url):
  17.         browser = webdriver.PhantomJS( executable_path = self.phantomjsPath )
  18.         browser.get(url)
  19.         time.sleep(self.waittime)
  20.         html = browser.execute_script("return document.documentElement.outerHTML")
  21.         doc = etree.HTML(html)
  22.         jdlistExtra = GsExtractor()
  23.         jdlistExtra.setXsltFromFile("jd_list.xml")
  24.         output = jdlistExtra.extract(doc)
  25.         return output

  26.     def saveContent(self, filepath, content):
  27.         file_obj = open(filepath, 'w', encoding='UTF-8')
  28.         file_obj.write(content)
  29.         file_obj.close()

  30. url = 'http://list.jd.com/list.html?cat=9987,653,655&page=1&JL=6_0_0&ms=5'
  31. jdspider = Spider()
  32. result = jdspider.getContent(url)
  33. jdspider.saveContent('京东手机列表_1.xml', str(result))
复制代码

源代码下载位置请看文章末尾的GitHub源。

4,抓取结果


运行上面的代码,就会爬取京东手机品类页面的所有手机型号、价格等信息,并保存到本地文件“京东手机列表_1.xml”中。我们用浏览器打开这个结果文件,会看到如下的内容

京东手机列表抓取结果截图.png




5,相关文档

1, Python即时网络爬虫项目: 内容提取器的定义

6,集搜客GooSeeker开源代码下载源
1, GooSeeker开源Python网络爬虫GitHub源

7,文档修改历史
1,
2016-06-03:V1.0




jd_list.rar

555 Bytes, 下载次数: 229

举报 使用道具
| 回复

共 0 个关于本帖的回复 最后回复于 2016-6-3 11:18

您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • Gephi社会网络分析-马蜂窝游记文本分词并同
  • Gephi社会网络分析-基于马蜂窝游记文本以词
  • 知乎话题文本根据词语间距筛选后生成共词矩
  • 马蜂窝游记文本分词后以词语间距为筛选条件
  • 学习使用apriori算法挖掘关联关系

热门用户

GMT+8, 2024-3-28 22:13