ajax抓取网页内容(python:可插拔的内容提取器类gsExtractor:管理的动态内容怎样提取?)
优采云 发布时间: 2022-01-06 11:11ajax抓取网页内容(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内容