ajax抓取网页内容(python:可插拔的内容提取器类gsExtractor:管理的动态内容怎样提取?)

优采云 发布时间: 2022-01-06 11:11

  ajax抓取网页内容(python:可插拔的内容提取器类gsExtractor:管理的动态内容怎样提取?)

  1、简介

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

  2、提取动态内容的技术组件

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

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

  3、源码和实验过程

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

  

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

  

  第二步:执行如下代码(windows10下测试,python3.2,源码下载地址可在文章末尾的github上找到),请注意:xslt是一个相对长字符串,如果删除这个字符串,代码也不是几行,足以展示Python的强大

  

#/usr/bin/python

from urllib import request

from lxml import etree

from selenium import webdriver

import time

编程客栈# 京东手机商品页面

url = "http://it编程客栈em.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不是手工写的,而是由程序自动生成的,这就有意义了,程序员不再需要花时间编写和调试捕获规则,这是一项非常耗时费力的工作。下一篇《1分钟快速生成用于Web内容提取的Xslt》将介绍如何生成xslt。

  5、Jisouke GooSeeker开源代码下载源码

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

  6、文档修订历史

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

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

  文章名称:Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线