1,引言

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

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

在上一篇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/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)

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

python selenium 爬取js加载的内容为空,Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容...相关推荐

  1. python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...

    学习Python的人绝大部分都是在用Python做爬虫,毕竟对于爬虫而言Python是不二选. 但是一般简单的静态页面网站还是很好爬取的,对于很多动态加载的网站就不知道怎么办了,今天小编就给大家介绍两 ...

  2. scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验

    最近打算学习 scrapy_splash 来爬取 js 加载的动态网页 selenium 实在太慢了,不在迫不得已的情况下并不推荐使用 下面,直接开始吧 目标网站 JD 某商品 环境需求 已安装 do ...

  3. python爬取js加载的数据_Python爬虫学习,记一次抓包获取js,从js函数中取数据的过程...

    昨天有小伙伴找我,新浪新闻的国内新闻页,其他部分都是静态网页可以抓到,但是在左下方的最新新闻部分,不是静态网页,也没有json数据,让我帮忙抓一下.大概看了下,是js加载的,而且数据在js函数中,很有 ...

  4. python爬取js加载的数据_Python爬虫:爬取JS加载数据的网页

    比如简书: Paste_Image.png 我们来写个程序,爬取简书网站随便一个作者的所有文章,再对其所有文章进行分词统计 程序运行统计的结果见文章: 我统计了彭小六简书360篇文章中使用的词语 需要 ...

  5. python selenium 等待js加载完成_一个用python完成的RSA成功模拟JS加密完成自动登录...

    编程工具启动图 自从做了产品,很久没有正二八经的写过代码了.最近这几天由于工作需要,一时心血来潮开始写python代码,最开始以为一个自动登录应该很简单,又没有手机验证和图片验证.结果一执行卡在一个加 ...

  6. python 异步加载_Python学习笔记4——爬取异步加载数据

    一.什么是异步加载? 在之前的学习笔记中,爬取的网页是需要手动翻页的网址,但是一些网站是通过自动加载翻页的,如knewone网页.浏览knewone的官网就能发现,当下拉到网页最下端时,网站会自动加载 ...

  7. htmlunit抓取小说网站JS加载内容

    2019独角兽企业重金招聘Python工程师标准>>> http://www.17k.com/chapter/76839/8810097.html 这是17K的一个小说的章节,内容是 ...

  8. java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets (jsoup配合htmlunit 爬取异步加载的网页遇到的)

    最近用jsoup配合htmlunit 爬取异步加载的网页运行代码的时候,报错java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets ...

  9. selenium等待定位标签加载完再执行

    遇到的问题描述 我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作.  否则页面上的元素不存在,会抛出异常. 比如: 一个动态网页使用了ajax的异步加载, ...

最新文章

  1. CSS3无前缀脚本prefixfree.js与Animatable使用介绍
  2. Redis初学16:主从复制
  3. Convert.ToInt32
  4. mysql 两表管理查询_mysql两表查询
  5. boost::fill相关的测试程序
  6. BZOJ 4720 [Noip2016]换教室
  7. Scala与Java差异(五)之Map与Tuple
  8. jquery的get和post请求
  9. 设置IDEA修改html、jsp后立即生效,不用重启项目
  10. iphone 直接中转到appstore
  11. Open3D+vs配置以及使用教程
  12. 微信小程序(底部导航)
  13. django运行错误:wrong number of arguments for ‘set‘ command
  14. 分子模拟软件amber_分子模拟周刊: 第 23 期
  15. Android平台第三方插件开发指导(dcloud)
  16. 清华大学计算机音乐,清华大学2018年毕业歌《告别之前》发布!每个告别都等得到再见...
  17. PCF8574AT的I2C地址和单独IO操作
  18. android 音乐 简书,Android音频开发(7):音乐可视化-FFT频谱图
  19. Unity 鼠标悬停
  20. C# WinForm解决Panel控件中的图片刷新时会闪烁的问题

热门文章

  1. 浅析微信支付:统一下单接口
  2. JavaScript知识精简
  3. slf4j 使用方法---个人总结
  4. Nginx重定向到子目录问题
  5. 正则表达式练习 Regex Golf
  6. Reboot与init 6的区别
  7. DropdownList绑定的两种方法
  8. linux版的lcx
  9. ant 使用常见问题
  10. linux perl 报错 Can‘t locate CPAN.pm in @INC (@INC contains: inc /usr/local/lib64/perl5 /usr.... 解决方法