基于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性能优化技巧
Mar 09 Python
在Python中使用第三方模块的教程
Apr 27 Python
Python中的ConfigParser模块使用详解
May 04 Python
举例讲解Linux系统下Python调用系统Shell的方法
Nov 07 Python
python版学生管理系统
Jan 10 Python
在Python中实现替换字符串中的子串的示例
Oct 31 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
使用Python实现图像标记点的坐标输出功能
Aug 14 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
python在package下继续嵌套一个package
Apr 14 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继承的一个应用
2011/09/06 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
详解在Python程序中使用Cookie的教程
2015/04/30 Python
python实现类的静态变量用法实例
2015/05/08 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
python提取字典key列表的方法
2015/07/11 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
python中的字符串内部换行方法
2018/07/19 Python
Python3匿名函数用法示例
2018/07/25 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
一套SQL笔试题
2016/08/14 面试题
应聘自荐书
2013/10/08 职场文书
自荐书封面下载
2013/11/29 职场文书
人事专员的岗位职责
2014/03/01 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
村委会换届选举方案
2014/05/03 职场文书
2014年售票员工作总结
2014/11/19 职场文书
mysql部分操作
2021/04/05 MySQL
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js