1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

时间:2018-11-14 05:21:28

相关推荐

Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

后端开发|Python教程

javascript Python

后端开发-Python教程

1,引言

微信互动直播源码,vscode不同颜色的版本,ubuntu vi使用,tomcat伪静态,sqlite加法,网页设计师目标实现的策略路径,万网x3 新建数据库,服务器返回无效数据,wordpress阅读权限插件,前端框架pin,油炸水爬虫,php 判断数据类型,seo主要做什么,springboot 跑批,dedecms 全局标签,绿化苗木企业网站源码,js 禁止查看网页源代码,bootstrap登录模板下载,网站后台演示地址,html5问卷调查页面模板下载,租赁管理系统软件源码,asp下载站程序lzw

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

源码 验证码识别,vscode 插件 速度,主板ubuntu,tomcat下载设置,sqlite 错误码,弹窗 插件,手机浏览器前端框架,手机爬虫软件有没,php 插件下载,福建seo优化包括,免费淘宝客采集集网站,wordpress 网页编辑,纹身网站模板lzw

2,提取动态内容的技术部件

windows 源码编译php,Ubuntu共享文件方式,浏览器打开tomcat,爬虫养殖垫料,开发架构php,seo教程全集免费信息流营销lzw

在上一篇python使用xslt提取网页数据中,要提取的内容是直接从网页的source code里拿到的。但是一些Ajax动态内容是在source code找不到的,就要找合适的程序库把异步或动态加载的内容加载上来,交给本项目的提取器进行提取。

python可以使用selenium执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。selenium自己不带浏览器,可以使用第三方浏览器如Firefox,Chrome等,也可以使用headless浏览器如PhantomJS在后台执行。

3,源代码和实验过程

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

第一步:利用集搜客谋数台的直观标注功能,可以极快速度自动生成一个调试好的抓取规则,其实是一个标准的xslt程序,如下图,把生成的xslt程序拷贝到下面的程序中即可。注意:本文只是记录实验过程,实际系统中,将采用多种方式把xslt程序注入到内容提取器重。

第二步:执行如下代码(在windows10, python3.2下测试通过),请注意:xslt是一个比较长的字符串,如果删除这个字符串,代码没有几行,足以见得Python之强大

#/usr/bin/pythonfrom urllib import requestfrom lxml import etreefrom selenium import webdriverimport time# 京东手机商品页面url = "/1312640.html"# 下面的xslt是通过集搜客的谋数台图形界面自动生成的xslt_root = etree.XML("""\0 and count(.//*[@id= ame]/h1/text())>0]" mode="商品"/>0 and count(.//*[@id= ame]/h1/text())>0]" mode="商品">""")# 使用webdriver.PhantomJSbrowser = 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得到整个domhtml = browser.execute_script("return document.documentElement.outerHTML")doc = etree.HTML(html)# 用xslt从dom中提取需要的字段result_tree = transform(doc)print(result_tree)

第三步:下图可以看到,网页中的手机名称和价格被正确抓取下来了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。