zoukankan      html  css  js  c++  java
  • API例子:用Python驱动Firefox采集网页数据


     

    1,引言

    本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器。开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scrapy采集淘宝这种含有大量ajax代码的网页数据,但是要注意本例一个严重缺陷:用Selenium加载网页的过程发生在Spider中,破坏了Scrapy的架构原则。所以,本例只是为了测试Firefox驱动和ajax网页数据采集这两个技术点,用于正式运行环境中必须予以修改,后续的文章将专门讲解修正后的实现。

    请注意,本例用到的xslt文件是通过MS谋数台保存提取器后,通过API接口获得,一方面让python代码变得简洁,另一方面,节省调试采集规则的时间。详细操作请查看Python即时网络爬虫:API说明

    2,具体实现

    2.1,环境准备

    需要执行以下步骤,准备Python开发和运行环境:

    • 安装Python--官网下载安装并部署好环境变量 (本文使用Python版本为3.5.1)
    • 安装lxml-- 官网库下载对应版本的.whl文件,然后命令行界面执行 "pip install .whl文件路径"
    • 安装Scrapy--命令行界面执行 "pip install Scrapy",详细请参考Scrapy:Python3下的第一次运行测试
    • 安装selenium--命令行界面执行 "pip install selenium"
    • 安装Firefox--官网下载安装

    上述步骤展示了两种安装:1,安装下载到本地的wheel包;2,用Python安装管理器执行远程下载和安装。

    2.2,开发和测试过程

    以下代码默认都是在命令行界面执行

    1),创建scrapy爬虫项目simpleSpider

    E:python-3.5.1>scrapy startproject simpleSpider
    

    2),修改settings.py配置

    有些网站会在根目录下放置一个名字为robots.txt的文件,里面声明了此网站希望爬虫遵守的规范,Scrapy默认遵守这个文件制定的规范,即ROBOTSTXT_OBEY默认值为True。在这里需要修改ROBOTSTXT_OBEY的值,找到E:python-3.5.1simpleSpidersimpleSpider下文件settings.py,更改ROBOTSTXT_OBEY的值为False。

    3),导入API模块

    在项目目录E:python-3.5.1simpleSpider下创建文件gooseeker.py(也可以在开源Python即时网络爬虫GitHub源 的core文件夹中直接下载),代码如下:

    4),创建SimpleSpider爬虫类

    在项目目录E:python-3.5.1simpleSpidersimpleSpiderspiders下创建文件simplespider.py,代码如下:

    5),启动爬虫

    在E:python-3.5.1simpleSpider项目目录下执行命令

    E:python-3.5.1simpleSpider>scrapy crawl simplespider
    

    6),输出文件

    采集到的网页数据结果文件是:淘宝天猫_商品详情30474_1466064544.xml

    3,展望

    调用Firefox,IE等全特性浏览器显得有点太重量级,很多场合可以考虑轻量级的浏览器内核,比如,casperjs和phantomjs等。同时运行在没有界面的浏览器(headless browser,无头浏览器)模式下,也许可以对网页数据采集性能有所提升。

    然后,最重要的一点是要写一个 Scrapy 的下载器,专门驱动这些浏览器采集网页数据,也就是把这个功能从Spider中迁移出来,这样才符合Scrapy的整体框架原则,实现事件驱动的工作模式。

    4,相关文档

    1, Python即时网络爬虫:API说明
    2, API例子:用Java/JavaScript下载内容提取器

    5,集搜客GooSeeker开源代码下载源

    1, GooSeeker开源Python网络爬虫GitHub源

    6,文档修改历史

    1,2016-06-30:V1.0
    2,2016-06-30:V1.1,在第一段明显位置注明本案例的缺陷

  • 相关阅读:
    leetcode: Combination Sum II
    leetcode: Combination Sum
    leetcode: Count and Say
    leetcode: Sudoku Solver
    leetcode: Linked List Cycle II
    selenium采用xpath方法识别页面元素
    selenium采用find_element_by方法识别页面元素
    selenium中webdriver识别class属性多个值中有空格的解决方案
    解决多个py模块调用同一个python的logging模块,打印日志冲突问题
    封装selenium自动化框架中的截图功能
  • 原文地址:https://www.cnblogs.com/gooseeker/p/5629060.html
Copyright © 2011-2022 走看看