集搜客网页抓取软件(Python网络爬虫内容提取器)
优采云 发布时间: 2022-01-02 20:17集搜客网页抓取软件(Python网络爬虫内容提取器)
1、简介
在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。这就留下了一个问题:如何提取javascript管理的动态内容?那么这篇文章就回答了这个问题。
2、提取动态内容的技术组件
上一篇Python使用xslt提取网页数据,提取的内容直接从网页源代码中获取。但是,在源代码中找不到某些 Ajax 动态内容。找一个合适的库来加载异步或动态加载的内容,交给本项目的提取器提取即可。
Python 可以使用 selenium 来执行 javascript,而 selenium 可以让浏览器自动加载页面并获取所需的数据。 Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
3、源码和实验过程
如果我们要抓取京东手机页面的手机名称和价格(网页源码中没有找到价格),如下图:
第一步:利用采集客户和统计站的直观标注功能,极快地自动生成调试好的抓包规则,其实就是一个标准的xslt程序,如下图,复制生成的xslt程序转到下面的程序。注:本文仅记录实验过程。在实际系统中,xslt程序会以多种方式注入到内容提取器中。
第2步:执行如下代码(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://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不是手工写的,而是由程序自动生成的,这就有意义了,程序员不再需要花时间编写和调试捕获规则,这是一项非常耗时费力的工作。下一篇《1分钟快速生成用于网页内容提取的Xslt》将介绍如何生成xslt。
5、Jisouke GooSeeker 开源代码下载源码
1. GooSeeker 开源 Python 网络爬虫 GitHub 源码
6、文档修改历史
2016-05-26:V2.0,添加文字说明
2016-05-29:V2.1,增加第五章:源码下载源码,修改github源码地址