基于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 25 Python
Python读取图片属性信息的实现方法
Sep 11 Python
详解flask入门模板引擎
Jul 18 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
python try 异常处理(史上最全)
Mar 07 Python
python异步存储数据详解
Mar 19 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
Apr 15 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
Python tkinter常用操作代码实例
Jan 03 Python
Django Model中字段(field)的各种选项说明
May 19 Python
在keras下实现多个模型的融合方式
May 23 Python
浅谈Python中的正则表达式
Jun 28 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
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
浅析jquery的作用与优势
2013/12/02 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
python 实现端口扫描工具
2020/12/18 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
中间件的定义
2016/08/09 面试题
养殖行业的创业计划书
2014/01/05 职场文书
安全标准化汇报材料
2014/02/03 职场文书
激励员工的口号
2014/06/16 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
Python字典的基础操作
2021/11/01 Python