python自动生成采集规则_快速制作规则及获取规则提取器API

1. 引言

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

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

2. 安装集搜客GooSeeker爬虫软件

2.1. 前期准备

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

f1dfa95e97b84fc18a127299593336ed.png

2.2 安装爬虫

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

22346c2a3421db03c3eca39b4d865d64.png

下一步

6630583ea4d39106469a21dd93106da6.png

下一步

4c295327ac90684d1d21709d4eb3f3a0.png

3. 开始制作抓取规则

3.1 运行规则定义软件

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

3.2 做规则

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

544d11d75042cb3874be42bf8350ebb3.png

4. 申请规则提取器API KEY

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

01e07c96b83d3f16d9626c781b3cbe15.png

5. 结合提取器API敲一个爬虫程序

5.1 引入Gooseeker规则提取器模块gooseeker.py

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

如这里为E:\Demo\third.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 回车

63598ba4913f36765cb94642a83f2abf.png

5.4 查看结果文件

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

8f344f19c0c1083ba78ab44eaff5d6ff.png

6. 总结

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值