资讯专栏INFORMATION COLUMN

快速制作规则及获取规则提取器API

itvincent / 3198人阅读

摘要:也就是用可视化的集搜客爬虫软件针对亚马逊图书商品页做一个采集规则,并结合规则提取器抓取网页内容。安装集搜客爬虫软件前期准备进入集搜客官网产品页面,下载对应版本。

1. 引言

前面文章的测试案例都用到了集搜客Gooseeker提供的规则提取器,在网页抓取工作中,调试正则表达式或者XPath都是特别繁琐的,耗时耗力,工作枯燥,如果有一个工具可以快速生成规则,而且可以可视化的即时验证,就能把程序员解放出来,投入到创造性工作中。

之前文章所用的例子中的规则都是固定的,如何自定义规则再结合提取器提取我们想要的网页内容呢?对于程序员来说,理想的目标是掌握一个通用的爬虫框架,每增加一个新目标网站就要跟着改代码,这显然不是好工作模式。这就是本篇文章的主要内容了,本文使用一个案例说明怎样将新定义的采集规则融入到爬虫框架中。也就是用可视化的集搜客GooSeeker爬虫软件针对亚马逊图书商品页做一个采集规则,并结合规则提取器抓取网页内容。

2. 安装集搜客GooSeeker爬虫软件 2.1. 前期准备

进入集搜客官网产品页面,下载对应版本。我的电脑上已经安装了Firefox 38,所以这里只需下载爬虫。

2.2 安装爬虫

打开Firefox –> 点击菜单工具 –> 附加组件 –> 点击右上角附加组件的工具 –> 选择从文件安装附加组件 -> 选中下载好的爬虫xpi文件 –> 立即安装

下一步

下一步

3. 开始制作抓取规则 3.1 运行规则定义软件

点击浏览器菜单:工具-> MS谋数台 弹出MS谋数台窗口。

3.2 做规则

在网址栏输入我们要采集的网站链接,然后回车。当页面加载完成后,在工作台页面依次操作:命名主题名 -> 创建规则 -> 新建整理箱 -> 在浏览器菜单选择抓取内容,命名后保存。

4. 申请规则提取器API KEY

打开集搜客Gooseeke官网,注册登陆后进入会员中心 -> API -> 申请API

5. 结合提取器API敲一个爬虫程序 5.1 引入Gooseeker规则提取器模块gooseeker.py

(下载地址: gooseeker/core at master · FullerHua/gooseeker · GitHub), 选择一个存放目录,这里为E:demogooseeker.py

5.2 与gooseeker.py同级创建一个.py后缀文件

如这里为E:Demothird.py,再以记事本打开,敲入代码:
注释:代码中的31d24931e043e2d5364d03b8ff9cc77e 就是API KEY,用你申请的代替;amazon_book_pc 是规则的主题名,也用你的主题名代替

# -*- coding: utf-8 -*-
# 使用GsExtractor类的示例程序
# 以webdriver驱动Firefox采集亚马逊商品列表
# xslt保存在xslt_bbs.xml中
# 采集结果保存在third文件夹中
import os
import time
from lxml import etree
from selenium import webdriver
from gooseeker import GsExtractor

# 引用提取器
bbsExtra = GsExtractor()   
bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e", "amazon_book_pc") # 设置xslt抓取规则

# 创建存储结果的目录
current_path = os.getcwd()
res_path = current_path + "/third-result"
if os.path.exists(res_path):
    pass
else:
    os.mkdir(res_path)

# 驱动火狐
driver = webdriver.Firefox()
url = "https://www.amazon.cn/s/ref=sr_pg_1?rh=n%3A658390051%2Cn%3A!658391051%2Cn%3A658414051%2Cn%3A658810051&page=1&ie=UTF8&qid=1476258544"
driver.get(url)
time.sleep(2)

# 获取总页码
total_page = driver.find_element_by_xpath("//*[@class="pagnDisabled"]").text
total_page = int(total_page) + 1

# 用简单循环加载下一页链接(也可以定位到下一页按钮,循环点击)
for page in range(1,total_page):
    # 获取网页内容
    content = driver.page_source.encode("utf-8")

    # 获取docment
    doc = etree.HTML(content)
    # 调用extract方法提取所需内容
    result = bbsExtra.extract(doc)

    # 保存结果
    file_path = res_path + "/page-" + str(page) + ".xml"
    open(file_path,"wb").write(result)
    print("第" + str(page) + "页采集完毕,文件:" + file_path)

    # 加载下一页
    if page < total_page - 1:
        url = "https://www.amazon.cn/s/ref=sr_pg_" + str(page + 1) + "?rh=n%3A658390051%2Cn%3A!658391051%2Cn%3A658414051%2Cn%3A658810051&page=" + str(page + 1) + "&ie=UTF8&qid=1476258544"
        driver.get(url)
        time.sleep(2)
print("~~~采集完成~~~")
driver.quit()
5.3 执行third.py

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

5.4 查看结果文件

进入third.py文件所在目录,找到名称为result-2的文件夹然后打开

6. 总结

制作规则时,由于定位选择的是偏好id,而采集网址的第二页对应页面元素的id属性有变化,所以第二页内容提取出现了问题,然后对照了一下网页元素发现class是一样的,果断将定位改为了偏好class,这下提取就正常了。下一篇《在Python3.5下安装和测试Scrapy爬网站》简单介绍Scrapy的使用方法。

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

GooSeeker开源Python网络爬虫GitHub源

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44211.html

相关文章

  • API例子:用Java/JavaScript下载内容提取

    摘要:,引言本文讲解怎样用和使用接口下载内容提取器,这是一个示例程序。具体请参看内容提取器的定义。用下载内容提取器可以直接跳到第部分的内容。 showImg(https://segmentfault.com/img/bVyszb); 1,引言 本文讲解怎样用Java和JavaScript使用 GooSeeker API 接口下载内容提取器,这是一个示例程序。什么是内容提取器?为什么用这种方式...

    JackJiang 评论0 收藏0
  • Python即时网络爬虫:API说明

    摘要:用于数据分析和数据挖掘的网络爬虫程序中,内容提取器是影响通用性的关键障碍,如果这个提取器是从获得的,您的网络爬虫程序就能写成通用的框架。,相关文档,即时网络爬虫项目内容提取器的定义,集搜客开源代码下载源,开源网络爬虫源,文档修改历史, showImg(https://segmentfault.com/img/bVynLk); API说明——下载gsExtractor内容提取器 1,接口...

    genefy 评论0 收藏0
  • Python即时网络爬虫项目: 内容提取的定义

    摘要:集搜客从文件读取从字符串获得通过接口获得返回当前提取方法,入参是一个对象,返回是提取结果用法示例下面是一个示例程序,演示怎样使用类提取官网的帖子列表。 1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作中。 2. 解决方案 为了解决这个问...

    KunMinX 评论0 收藏0
  • Python爬虫实战(1):爬取Drupal论坛帖子列表

    摘要:,引言在即时网络爬虫项目内容提取器的定义一文我们定义了一个通用的网络爬虫类,期望通过这个项目节省程序员一半以上的时间。本文将用一个实例讲解怎样使用这个爬虫类。我们将爬集搜客老版论坛,是一个用做的论坛。 showImg(https://segmentfault.com/img/bVxTdG); 1,引言 在《Python即时网络爬虫项目: 内容提取器的定义》一文我们定义了一个通用的pyt...

    李文鹏 评论0 收藏0
  • 让Scrapy的Spider更通用

    摘要:而分配任务的是会员中心的爬虫罗盘,实现集中管理分布执行。开源即时网络爬虫项目同样也要尽量实现通用化。网址和提取规则本来应该硬编码到中的,现在隔离出来,由会员中心进行管理,那么就很容易做通用了。 showImg(https://segmentfault.com/img/bVyEnS); 1,引言 《Scrapy的架构初探》一文所讲的Spider是整个架构中最定制化的一个部件,Spider...

    MartinDai 评论0 收藏0

发表评论

0条评论

itvincent

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<