java爬虫抓取动态网页( Python网络爬虫内容提取器一文讲解)

优采云 发布时间: 2021-10-11 23:28

  java爬虫抓取动态网页(

Python网络爬虫内容提取器一文讲解)

  

  1 简介

  在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。

  2.提取动态内容的技术成分

  上一篇Python使用xslt提取网页数据,提取的内容直接从网页源码中获取。但是有些Ajax动态内容在源码中是找不到的,所以需要找一个合适的库来加载异步或者动态加载的内容,交给本项目的提取器进行提取。

  Python可以使用selenium来执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。

  3、源码及实验过程

  如果我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:

  

  第一步:使用直观的采集和搜索客户标记功能,可以很快自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,将生成的xslt程序复制到下面可以在程序中。注:本文仅记录实验过程。在实际系统中,xslt 程序会以多种方式注入到内容提取器中。

  

  第二步:执行如下代码(在windows10下测试,python3.2),请注意:xslt是一个比较长的字符串,如果把这个字符串删掉,那几行代码也不多,够看Python了强大的

  #/usr/bin/python

from urllib import request

from lxml import etree

from selenium import webdriver

import time

# 京东手机商品页面

url = "http://item.jd.com/1312640.html"

# 下面的xslt是通过集搜客的谋数台图形界面自动生成的

xslt_root = etree.XML("""\

""")

# 使用webdriver.PhantomJS

browser = webdriver.PhantomJS(executable_path='C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')

browser.get(url)

time.sleep(3)

transform = etree.XSLT(xslt_root)

# 执行js得到整个dom

html = browser.execute_script("return document.documentElement.outerHTML")

doc = etree.HTML(html)

# 用xslt从dom中提取需要的字段

result_tree = transform(doc)

print(result_tree)

  第三步:如下图所示,网页上手机的名称和价格已被正确抓取

  

  4. 阅读下一步

  至此,我们已经演示了如何通过两个文章来抓取静态和动态的网页内容,这两个文章都使用xslt一次从网页中提取需要的内容。实际上,xslt 是一种更复杂的编程语言。如果你手动写xslt,那么最好写离散xpath。如果这个xslt不是手工写的,而是程序自动生成的,这是有道理的,程序员不再需要花时间编写和调试捕获规则,这是一项非常耗时费力的工作。接下来,《一分钟快速生成xslt进行网页内容提取》将介绍如何生成xslt。

  5.采集GooSeeker开源代码下载源

  1.GooSeeker开源Python网络爬虫GitHub源码

  5. 文档修改历史

  2016-05-26:V2.0,添加文字说明

  2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线