基于scrapy实现的简单蜘蛛采集程序


Posted in Python onApril 17, 2015

本文实例讲述了基于scrapy实现的简单蜘蛛采集程序。分享给大家供大家参考。具体如下:

# Standard Python library imports
# 3rd party imports
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
# My imports
from poetry_analysis.items import PoetryAnalysisItem
HTML_FILE_NAME = r'.+\.html'
class PoetryParser(object):
  """
  Provides common parsing method for poems formatted this one specific way.
  """
  date_pattern = r'(\d{2} \w{3,9} \d{4})'
 
  def parse_poem(self, response):
    hxs = HtmlXPathSelector(response)
    item = PoetryAnalysisItem()
    # All poetry text is in pre tags
    text = hxs.select('//pre/text()').extract()
    item['text'] = ''.join(text)
    item['url'] = response.url
    # head/title contains title - a poem by author
    title_text = hxs.select('//head/title/text()').extract()[0]
    item['title'], item['author'] = title_text.split(' - ')
    item['author'] = item['author'].replace('a poem by', '')
    for key in ['title', 'author']:
      item[key] = item[key].strip()
    item['date'] = hxs.select("//p[@class='small']/text()").re(date_pattern)
    return item
class PoetrySpider(CrawlSpider, PoetryParser):
  name = 'example.com_poetry'
  allowed_domains = ['www.example.com']
  root_path = 'someuser/poetry/'
  start_urls = ['http://www.example.com/someuser/poetry/recent/',
         'http://www.example.com/someuser/poetry/less_recent/']
  rules = [Rule(SgmlLinkExtractor(allow=[start_urls[0] + HTML_FILE_NAME]),
                  callback='parse_poem'),
       Rule(SgmlLinkExtractor(allow=[start_urls[1] + HTML_FILE_NAME]),
                  callback='parse_poem')]

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python重试装饰器示例
Feb 11 Python
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
Apr 08 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
python操作redis的方法
Jul 07 Python
python获取Pandas列名的几种方法
Aug 07 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
利用python 读写csv文件
Sep 10 Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 #Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 #Python
在Python中实现贪婪排名算法的教程
Apr 17 #Python
在Linux下调试Python代码的各种方法
Apr 17 #Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 #Python
Python中生成器和yield语句的用法详解
Apr 17 #Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 #Python
You might like
深入php常用函数的使用汇总
2013/06/08 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
php微信开发之关注事件
2018/06/14 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
详解python深浅拷贝区别
2019/06/24 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
一组SQL面试题
2016/02/15 面试题
置业顾问岗位职责
2014/03/02 职场文书
公司请假条格式
2014/04/11 职场文书
个人培训总结
2015/03/05 职场文书
收银员岗位职责范本
2015/04/07 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
解析Java异步之call future
2021/06/14 Java/Android
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers