抓取ajax动态网页java(Python网络爬虫内容提取器内容)
优采云 发布时间: 2021-10-14 03:16抓取ajax动态网页java(Python网络爬虫内容提取器内容)
本文文章将详细讲解Python爬虫如何使用Selenium+PhantomJS抓取Ajax和动态HTML内容。小编觉得很实用,分享给大家作为参考。希望大家看完这篇文章以后可以有所收获。
1、简介
在Python网络爬虫内容提取器一文中,我们详细讲解了核心组件:可插拔内容提取器类gsExtractor。本文记录了在确定gsExtractor技术路线过程中所做的编程实验。这是第二部分。第一部分是使用xslt一次性提取静态网页内容并转换成xml格式的实验。
2、提取动态内容的技术组件
上一篇Python使用xslt提取网页数据,提取的内容直接从网页源码中获取。但是有些Ajax动态内容在源码中是找不到的,所以需要找一个合适的库来加载异步或者动态加载的内容,交给本项目的提取器进行提取。
Python可以使用selenium来执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。Selenium本身没有浏览器,可以使用Firefox、Chrome等第三方浏览器,也可以使用PhantomJS等无头浏览器在后台执行。
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://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)
第三步:如下图所示,网页上手机的名称和价格已被正确抓取
关于《Python爬虫如何使用Selenium+PhantomJS抓取Ajax和动态HTML内容》,我在这里分享了文章文章。希望以上内容能够对大家有所帮助,让大家了解更多。如果你觉得文章不错,请分享出去让更多人看到。