1. 引言

上一篇《为编写网络爬虫程序安装Python3.5》中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经不能满足采集的需求了。这里我们使用selenium库,通过它我们可以很简单的使用浏览器来为我们加载动态内容,从而获取采集结果。

在很多案例中,Selenium与PhantomJS搭配采集动态网页内容(可以参看我以前发表的案例文章),直接与Firefox或者Chrome搭配,可以应对一些更加复杂的采集情形,比如,在防爬方面,直接驱动普通浏览器更不容易被识别成爬虫。所以,本文讲解与Firefox搭配,开发难度并没有增加。

Python版本:Python3

2. 安装selenium库

使用快捷键win + R或右键开始选择运行,输入cmd回车,打开命令提示符窗口,输入命令:pip install selenium

3. 以亚马逊商品为例的一个简单爬虫

3.1 引入Gooseeker规则提取器模块gooseeker.py(下载地址: https://github.com/FullerHua/gooseeker/tree/master/core), 自定义存放目录,这里为E:\demo\gooseeker.py

引入GooSeeker规则提取器,就省去手工编写XPath或者正则表达式的麻烦,用直观标注的方式自动生成采集规则后,通过API加载和使用采集规则。操作过程请参看《1分钟快速生成用于网页内容提取的xslt》。

下面的代码就是使用了API,所以看不到冗长的XPath和正则表达式规则,代码中的API key和抓取规则名可以直接使用,这是公共的测试用的规则。

3.2 在提取器模块gooseeker.py同级目录下创建一个.py后缀文件,如这里为E:\Demo\second.py,再以记事本打开,敲入代码:

# -*- coding: utf-8 -*-
# 使用gsExtractor类的示例程序
# 以webdriver驱动Firefox采集亚马逊商品列表
# xslt保存在xslt_bbs.xml中
# 采集结果保存在result-2.xml中 import os
import time
from lxml import etree
from selenium import webdriver from gooseeker import GsExtractor #驱动火狐
driver = webdriver.Firefox()
# 访问并读取网页内容
url = "https://www.amazon.cn/b/ref=s9_acss_bw_ct_refTest_ct_1_h?_encoding=UTF8&node=658810051&pf_rd_m=A1AJ19PSB66TGU&pf_rd_s=merchandised-search-5&pf_rd_r=WJANDTHE4NFAYRR4P95K&pf_rd_t=101&pf_rd_p=289436412&pf_rd_i=658414051"
#开始加载
driver.get(url)
#等待2秒,更据动态网页加载耗时自定义
time.sleep(2)
# 获取网页内容
content = driver.page_source.encode('utf-8')
# 获取docment
doc = etree.HTML(content) # 引用提取器
bbsExtra = GsExtractor()
bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e", "亚马逊图书_test") # 设置xslt抓取规则
result = bbsExtra.extract(doc) # 调用extract方法提取所需内容 # 当前目录
current_path = os.getcwd()
file_path = current_path + "/result-2.xml" # 保存结果
open(file_path,"wb").write(result) # 打印出结果
print(str(result).encode('gbk','ignore').decode('gbk'))

3.3 执行second.py,打开命令提示窗口,进入second.py文件所在目录,输入命令 :python second.py 回车

注:这里是以驱动Firefox为例,所以需要安装Firefox,若未安装可以去往Firefox官网下载安装

3.4 查看保存结果文件,进入second.py文件所在目录,找到名称为result-2的xml文件

4. 总结

安装selenium,由于网络原因失败了一次,后面再次安装时才成功,如果碰到多次超时而安装失败,可以尝试连接vpn后再使用pip命令安装。

下一篇《快速制作规则并获取提取器api》将会讲解:快速的将一个网页结构生成规则并通过规则Api方式得到需要采集的结果。

5. 文档修改历史

2016-10-25:V1.0

6. 集搜客GooSeeker开源代码下载源

GooSeeker开源Python网络爬虫GitHub源

为采集动态网页安装和测试Python Selenium库的更多相关文章

  1. Python Selenium库

    Selenium库 自动化测试工具,支持多种游览器 爬虫中主要用来解决JavaScript渲染的问题 安装Selenium pip3 install selenium 安装游览器驱动 下载驱动地址:h ...

  2. python——selenium库的使用

    selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Fire ...

  3. Python 标准库和第三方库的安装位置、Python 第三方库安装的各种问题及解决

    首先使用 sys 下的 path 变量查看所有的 python 路径: import sys sys.path 标准库 lib 目录下(home 目录/pythonXX.XX/lib) 第三方库 在 ...

  4. python Selenium库的使用

    一.什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行 ...

  5. Python爬虫-- selenium库

    selenium库 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(S ...

  6. 自动化选课(Python + selenium

    ​ 前几天听到朋友说自己选课事情,突发奇想想要搞这样一个东西,但是由于各种原因只做到以下的完成度,具体的情况也会在解释的最后留下.这个只适用于曲师大的教务系统,因为用的这个系统来进行的一个调试,对于其 ...

  7. Python爬虫实战(4):豆瓣小组话题数据采集—动态网页

    1, 引言 注释:上一篇<Python爬虫实战(3):安居客房产经纪人信息采集>,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功.本篇是针对动态网页的数据 ...

  8. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  9. Python 爬虫修养-处理动态网页

    Python 爬虫修养-处理动态网页 本文转自:i春秋社区 0x01 前言 在进行爬虫开发的过程中,我们会遇到很多的棘手的问题,当然对于普通的问题比如 UA 等修改的问题,我们并不在讨论范围,既然要将 ...

随机推荐

  1. Python核心编程(第九章)--文件和输入输出

    文件内建函数: open()函数提供了初始化输入/输出操作的通用接口 open()基本语法:file_object = open(filename,access_mode='r',buffering= ...

  2. 无法读取配置节 system.serviceModel 因为它缺少节声明的解决方法

    无法读取配置节 system.serviceModel 因为它缺少节声明的解决方法,需要的朋友可以参考下 在Windows Server2008 R2中的IIS7中部署WCF服务时报出如题错误: HT ...

  3. 树状数组(BIT)

    i的二进制的最后一个1可以通过i&(-i)得到,时间复杂度o(logn).对于W*H的二维BIT只需要建立H个大小为x轴方向元素个数W的BIT,复杂度O(logW+logH).同样的方法可以扩 ...

  4. 将图片以Blob格式存入数据库,再通过Servlet显示到界面

    1:为了方便测试,直接将1.png图片存入到数据库中. public static void storePicBlog() throws FileNotFoundException, SQLExcep ...

  5. 关于Fragment与Activity的想法

    View,Fragment,Activity,ListView等都会涉及到Layout文件 不要从Layout来考虑,而是从Activity,Fragment,来考虑,Layout只是他们的一个属性 ...

  6. delphi 打开文件夹并定位到一个文件(关键是/select参数)

    strFileName := FcxLV[nIndex].Items.Item[FcxLV[nIndex].ItemIndex].SubItems.Strings[0]; //路径  ShellExe ...

  7. CTO这点事(技术,业务,管理,情商,周期,趋势)转

    几乎整个互联网行业都缺 CTO,特别是一些草根背景的创业者,这个问题更加显著.从我自己的感受,身边各种朋友委托我找 CTO 的需求,嗯,算下来超过两位数了,光最近一个月就有 3 个,而且这三家都是刚拿 ...

  8. 记一次 java程序优化

    优化原因 环境中部署两个程序: web应用 tomcat   10G(webservice服务端,前端web服务) java应用               5G(webservice客户端,sock ...

  9. Java内存回收(垃圾回收)机制总结

    一.背景: Java程序员编写程序时,对于新建的对象,当不再需要此对象时,不必去释放这个对象所占用的空间,这个工作是由Java虚拟机自己完成的 ,即内存回收或垃圾回收. 二.如何知道一个对象所占用的空 ...

  10. Tomcat启动load action异常

    近期将之前的项目移到另一个文件夹中(包的路径也更改了),启动Tomcat之后包错:无法加载action,看错误提示知道是路径错误,网上也有各种各样的解决方案,这里我的错误是因为项目移到了别的文件中,所 ...