基于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多线程编程方式分析示例详解
Dec 06 Python
Python实现在Linux系统下更改当前进程运行用户
Feb 04 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
详解Python3 pickle模块用法
Sep 16 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
django在开发中取消外键约束的实现
May 20 Python
Python进行特征提取的示例代码
Oct 15 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 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中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
Django中几种重定向方法
2015/04/28 Python
Python中%r和%s的详解及区别
2017/03/16 Python
python八皇后问题的解决方法
2018/09/27 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
对python中dict和json的区别详解
2018/12/18 Python
python字典一键多值实例代码分享
2019/06/14 Python
Python PyQt5整理介绍
2020/04/01 Python
python中如何设置代码自动提示
2020/07/15 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
网游商务专员求职信
2013/10/15 职场文书
接受捐赠答谢词
2014/01/27 职场文书
银行给客户的感谢信
2015/01/23 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js
Android studio 简单计算器的编写
2022/05/20 Java/Android