python抓取动态网页( Python网络爬虫可插拔的内容提取器)
优采云 发布时间: 2021-09-18 22:16python抓取动态网页(
Python网络爬虫可插拔的内容提取器)
一,。导言
在PythonWebCrawler内容提取器文章中,我们详细解释了核心组件:可插入内容提取器类gsextractor。本文记录了在确定GSR萃取器技术路线的过程中进行的编程实验。这是第二部分。在第一部分中,实验使用XSLT一次性提取静态网页内容并将其转换为XML格式。这就留下了一个问题:如何提取JavaScript管理的动态内容?然后本文回答了这个问题。javascript
二,。用于提取动态内容的技术组件
在上一篇文章中,python使用XSLT提取网页数据。要提取的内容直接从网页的源代码中获取。但是,一些Ajax动态内容在源代码中找不到,因此我们需要找到一个合适的库来加载异步或动态加载的内容,并将其交给项目的提取器进行提取。html
Python可以使用selenium来执行JavaScript。Selenium允许浏览器自动加载页面并获取所需数据。Selenium本身没有浏览器。它可以使用第三方浏览器(如Firefox和chrome)或无头浏览器(如phantom JS)在后台执行。爪哇
三,。源代码和实验过程
如果我们想抓取京东手机页面的手机名称和价格(在网络源代码中找不到价格),如下图:
蟒蛇
步骤1:通过使用搜索引擎的可视化注释功能,可以以非常快的速度自动生成已调试的捕获规则。事实上,它是一个标准的XSLT程序。如下图所示,将生成的XSLT程序复制到以下程序中。注:本文仅记录实验过程。在实际系统中,XSLT程序将以多种方式注入到内容提取器中
吉特
步骤2:执行以下代码(在Windows 10中,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)
步骤3:如下图所示,网页中的手机名称和价格已被正确捕获
github
四,。下次阅读
到目前为止,在两次文章演示如何捕获静态和动态网页内容之后,我们都使用XSLT一次性从网页中提取所需内容。事实上,XSLT是一种更复杂的编程语言。如果XSLT是手动编写的,那么最好将其编写为离散XPath。如果XSLT不是手动编写的,而是由程序自动生成的,那么它是有意义的。程序员不再需要花时间编写和调整捕获规则,这是一项费时费力的工作。接下来,“1分钟快速生成用于网页内容提取的XSLT”将描述如何生成XSLT。网
五,。Jisoke gooseeker开源代码下载源代码
1.GooSeeker开源Python web爬虫GitHub源代码编程
五,。文档修改历史记录
2016-05-26:V2.0,补充文字说明
2016-05-29:V2.1. 增加第5章:下载源代码并更改GitHub网站源代码段错误